shadcn/studio
Volver a Guía de Fine-tuning
Guía Avanzada

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 + (alpha/rank) × A × B

W = Peso original (congelado)

A, B = Matrices entrenables

r = Rank (típicamente 8-128)


Hyperparameters Clave

HyperparameterValor TípicoDescripciónImpacto
Learning Rate2e-4Qué tan rápido aprende el modeloMás bajo = más preciso pero lento
Epochs1-3Veces que ve todo el datasetMás = riesgo de overfitting
Batch Size2Muestras por paso forward/backwardMayor = más VRAM
Gradient Accumulation8Micro-batches antes de actualizarSimula batch más grande

Learning Rate

Alto
5e-4
Rápido pero inestable
Medio
2e-4
Balance óptimo ✅
Bajo
2e-5
Preciso pero lento

Recomendaciones por Tipo de Entrenamiento

LoRA/QLoRA Normal2e-4
Reinforcement Learning (DPO, GRPO)5e-6
Full Fine-tuningLearning rates más bajos

Batch Size y Gradient Accumulation

Effective Batch Size

batch_size × gradient_accumulation = Effective Batch
Ejemplo: 2 × 8 = 16 (batch efectivo de 16)

Trade-off: VRAM vs Tiempo

Configuraciones equivalentes (Effective = 32):

b=32, g=1
⚠️ MUY ALTO
Probablemente OOM
b=8, g=4
🔶 MEDIO
b=2, g=16
✅ MUY BAJO
Recomendado
b=1, g=32
💚 MÍNIMO
Más lento

Hyperparameters de LoRA

LoRA Rank (r)

Número de parámetros entrenables. Mayor = más capacidad pero más memoria.

16 o 32
Recomendado

LoRA Alpha

Escala la fuerza del fine-tuning. alpha=rank es baseline, alpha=2×rank es más agresivo.

r o r×2
Recomendado

LoRA Dropout

Regularización. 0 está optimizado para velocidad en AstrApp.

0
Recomendado

Weight Decay

Penaliza pesos grandes para prevenir overfitting.

0.01
Recomendado

Warmup Steps

Incrementa gradualmente el learning rate al inicio.

5-10%
Recomendado

Target Modules

Para rendimiento óptimo, aplica LoRA a todas las capas lineales principales:

Attentionq_projQuery projection
Attentionk_projKey projection
Attentionv_projValue projection
Attentiono_projOutput projection
MLPgate_projGate projection
MLPup_projUp projection
MLPdown_projDown projection
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