Saltar al contenido principal

Barridos de Hiperparámetros

Busca automáticamente los mejores hiperparámetros.

Inicio Rápido

aitraining llm --train \
  --model google/gemma-3-270m \
  --data-path ./data.jsonl \
  --project-name sweep-experiment \
  --use-sweep \
  --sweep-backend optuna \
  --sweep-n-trials 20

Python API

from autotrain.trainers.clm.params import LLMTrainingParams

params = LLMTrainingParams(
    model="google/gemma-3-270m",
    data_path="./data.jsonl",
    project_name="sweep-experiment",

    # Enable sweep
    use_sweep=True,
    sweep_backend="optuna",
    sweep_n_trials=20,
    sweep_metric="eval_loss",
    sweep_direction="minimize",

    # Base parameters (sweep will vary some)
    trainer="sft",
    epochs=3,
    batch_size=4,
    lr=2e-5,
)

Parámetros

ParámetroDescripciónPor Defecto
use_sweepHabilitar barridoFalse
sweep_backendBackend (optuna, grid, random)optuna
sweep_n_trialsNúmero de intentos10
sweep_metricMétrica a optimizareval_loss
sweep_directionminimizar o maximizarminimize
sweep_paramsEspacio de búsqueda personalizado (cadena JSON)None (automático)

Espacios de Búsqueda

Espacio de Búsqueda Por Defecto

Por defecto, los barridos buscan sobre:
  • Tasa de aprendizaje: 1e-5 a 1e-3 (uniforme log)
  • Tamaño de batch: 2, 4, 8, 16 (categórico)
  • Ratio de warmup: 0.0 a 0.2 (uniforme)
El rango LoRA NO está incluido en el barrido por defecto. Añádelo manualmente vía sweep_params si es necesario.

Espacio de Búsqueda Personalizado

El parámetro sweep_params espera una cadena JSON:
import json

sweep_params = json.dumps({
    "lr": {"type": "loguniform", "low": 1e-6, "high": 1e-3},
    "batch_size": {"type": "categorical", "values": [2, 4, 8]},
    "lora_r": {"type": "categorical", "values": [8, 16, 32, 64]},
    "warmup_ratio": {"type": "uniform", "low": 0.0, "high": 0.2},
})

params = LLMTrainingParams(
    ...
    use_sweep=True,
    sweep_params=sweep_params,  # JSON string
)

Backends de Barrido

Optuna

Optimización bayesiana eficiente:
params = LLMTrainingParams(
    ...
    use_sweep=True,
    sweep_backend="optuna",
)

Búsqueda en Rejilla

Búsqueda exhaustiva sobre todas las combinaciones:
params = LLMTrainingParams(
    ...
    use_sweep=True,
    sweep_backend="grid",
)

Búsqueda Aleatoria

Muestreo aleatorio del espacio de búsqueda:
params = LLMTrainingParams(
    ...
    use_sweep=True,
    sweep_backend="random",
)

Métricas

Métricas Estándar

MétricaDescripción
eval_lossPérdida de validación
train_lossPérdida de entrenamiento
accuracyPrecisión de clasificación
perplexityPerplejidad del modelo de lenguaje

Métricas de Evaluación Mejoradas

Habilita use_enhanced_eval para acceder a métricas adicionales:
MétricaDescripción
perplexityPerplejidad del modelo de lenguaje (por defecto)
bleuPuntuación BLEU para traducción/generación
rougePuntuación ROUGE para resumen
bertscoreBERTScore para similitud semántica
accuracyPrecisión de clasificación
f1Puntuación F1
exact_matchPrecisión de coincidencia exacta
meteorPuntuación METEOR

Parámetros de Evaluación Mejorada

ParámetroDescripciónPor Defecto
use_enhanced_evalHabilitar métricas mejoradasFalse
eval_metricsMétricas separadas por comas"perplexity"
eval_strategyCuándo evaluar (epoch, steps, no)"epoch"
eval_batch_sizeTamaño de batch para evaluación8
eval_dataset_pathRuta al dataset de evaluación (si diferente)None
eval_save_predictionsGuardar predicciones durante evaluaciónFalse
eval_benchmarkEjecutar benchmark estándarNone

Benchmarks Estándar

Usa eval_benchmark para ejecutar benchmarks estándar de LLM:
BenchmarkDescripción
mmluMassive Multitask Language Understanding
hellaswagRazonamiento de sentido común HellaSwag
arcAI2 Reasoning Challenge
truthfulqaVeracidad TruthfulQA

Ejemplo de Métricas Personalizadas

params = LLMTrainingParams(
    ...
    use_sweep=True,
    sweep_metric="bleu",
    use_enhanced_eval=True,
    eval_metrics="bleu,rouge,bertscore",
    eval_batch_size=8,
)

Ejemplo: Encontrar Mejor LR

import json

params = LLMTrainingParams(
    model="google/gemma-3-270m",
    data_path="./data.jsonl",
    project_name="lr-sweep",

    use_sweep=True,
    sweep_n_trials=10,
    sweep_params=json.dumps({
        "lr": {"type": "loguniform", "low": 1e-6, "high": 1e-3},
    }),

    # Fixed parameters
    trainer="sft",
    epochs=1,
    batch_size=4,
)

Visualizando Resultados

Dashboard Optuna

pip install optuna-dashboard
optuna-dashboard sqlite:///optuna.db

Dashboard W&B

Visualiza barridos en la interfaz web de W&B.

Mejores Prácticas

  1. Comienza pequeño - 10-20 intentos para exploración inicial
  2. Usa early stopping - Detén intentos malos temprano
  3. Fija lo que sabes - Solo barre parámetros inciertos
  4. Usa datos de validación - Siempre ten división de evaluación

Próximos Pasos