Hyperparameters para Fine-tuning con LoRA
LoRA rank óptimo, alpha, epochs, batch size, gradient accumulation, QLoRA vs LoRA, target modules y más.
Los hyperparameters de LoRA son parámetros ajustables que controlan cómo Low-Rank Adaptation realiza el fine-tuning de LLMs. Seleccionar los valores correctos es crucial para lograr precisión, estabilidad, calidad y menos alucinaciones.
El Objetivo
Ajustar hyperparameters para incrementar precisión mientras contrarrestamos overfitting (memorización) o underfitting (respuestas genéricas).
¿Qué es LoRA?
En los LLMs tenemos model weights. Por ejemplo, Llama 70B tiene 70 mil millones de números. En lugar de cambiar todos los 70B números, agregamos matrices delgadas A y B a cada peso.
Solo optimizamos ~1% de los pesos
Fórmula de LoRA
W = Peso original (congelado)
A, B = Matrices entrenables
r = Rank (típicamente 8-128)
Hyperparameters Clave
| Hyperparameter | Valor Típico | Descripción | Impacto |
|---|---|---|---|
| Learning Rate | 2e-4 | Qué tan rápido aprende el modelo | Más bajo = más preciso pero lento |
| Epochs | 1-3 | Veces que ve todo el dataset | Más = riesgo de overfitting |
| Batch Size | 2 | Muestras por paso forward/backward | Mayor = más VRAM |
| Gradient Accumulation | 8 | Micro-batches antes de actualizar | Simula batch más grande |
Learning Rate
Recomendaciones por Tipo de Entrenamiento
Batch Size y Gradient Accumulation
Effective Batch Size
Trade-off: VRAM vs Tiempo
Configuraciones equivalentes (Effective = 32):
Hyperparameters de LoRA
LoRA Rank (r)
Número de parámetros entrenables. Mayor = más capacidad pero más memoria.
LoRA Alpha
Escala la fuerza del fine-tuning. alpha=rank es baseline, alpha=2×rank es más agresivo.
LoRA Dropout
Regularización. 0 está optimizado para velocidad en AstrApp.
Weight Decay
Penaliza pesos grandes para prevenir overfitting.
Warmup Steps
Incrementa gradualmente el learning rate al inicio.
Target Modules
Para rendimiento óptimo, aplica LoRA a todas las capas lineales principales:
target_modules = [
"q_proj", "k_proj", "v_proj", "o_proj", # Attention
"gate_proj", "up_proj", "down_proj", # MLP
]QLoRA vs LoRA
QLoRA (4-bit)
- 75%+ menos VRAM
- Modelos grandes en GPUs pequeñas
- Ligeramente más lento
- ~98-99% precisión de LoRA
LoRA (16-bit)
- Máxima precisión
- Ligeramente más rápido
- 4× más VRAM
- Requiere GPUs grandes
Evitar Overfitting y Underfitting
Overfitting
El modelo memoriza los datos y falla al generalizar. Training loss < 0.2.
Soluciones:
- →Reducir learning rate (1e-4 o 5e-5)
- →Reducir epochs a 1-2
- →Aumentar weight_decay a 0.01-0.1
- →Aumentar lora_dropout a 0.1
- →Expandir dataset con más datos
- →Habilitar early stopping
Underfitting
El modelo no captura patrones. Respuestas genéricas. Loss se mantiene alto.
Soluciones:
- →Aumentar learning rate (3e-4 o 5e-4)
- →Aumentar epochs
- →Aumentar LoRA Rank (32-128)
- →Reducir batch size a 1
- →Usar dataset más relevante
Configuración Inicial Recomendada
# Configuración de LoRA
r = 16 # Rank
lora_alpha = 16 # Igual al rank
lora_dropout = 0 # Optimizado
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"]
# Configuración de entrenamiento
per_device_train_batch_size = 2
gradient_accumulation_steps = 8 # Effective batch = 16
num_train_epochs = 3
learning_rate = 2e-4
warmup_steps = 10
weight_decay = 0.01