📚 Módulo 8: Monitoreo del Entrenamiento y Evaluación

8.1 Monitoreo con Weights & Biases (wandb)

Wandb es esencial para el seguimiento de experimentos. Permite la visualización en tiempo real de:

  • Pérdida de entrenamiento y validación.
  • Uso de GPU y memoria.
  • Tasa de aprendizaje.
  • Ejemplos generados durante el entrenamiento.

Configuración:

import wandb

# Iniciar sesión (requiere clave API gratuita)
wandb.login()

# Configurar proyecto
wandb.init(project="fine-tuning-qwen-lora", name="experiment-1")

Durante el entrenamiento, SFTTrainer envía automáticamente métricas a wandb si report_to="wandb" está habilitado.

8.2 Evaluación Durante el Entrenamiento

El SFTTrainer puede evaluar periódicamente si se proporciona un eval_dataset. Prepara un conjunto de validación separado.

# Asumimos que tenemos un conjunto de datos de validación
eval_dataset = ... # Similar al conjunto de entrenamiento, no visto durante el entrenamiento

# Modificar entrenador
trainer = SFTTrainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,           # Agregar conjunto de evaluación
    formatting_func=formatting_prompts_func,
    max_seq_length=512,
    tokenizer=tokenizer,
    packing=False,
)

La evaluación se ejecuta cada eval_steps (definido en TrainingArguments) y registra eval_loss. Puedes definir métricas personalizadas (por ejemplo, ROUGE, BLEU, precisión) mediante compute_metrics.

8.3 Evaluación Manual Post-Entrenamiento

Después del entrenamiento, prueba el modelo con nuevos prompts.

def generate_response(instruction, input_text=""):
    prompt = f"### Instrucción:\\n{instruction}\\n\\n### Entrada:\\n{input_text}\\n\\n### Respuesta:\\n"
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    outputs = model.generate(**inputs, max_new_tokens=200, temperature=0.7, top_p=0.9)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    # Extraer solo la respuesta (después de "### Respuesta:")
    response_text = response.split("### Respuesta:")[-1].strip()
    return response_text

# Probar
instruction = "Escribe una descripción corta para un producto tecnológico."
input_text = "Producto: Reloj inteligente con GPS y monitor cardíaco. Precio: $199.99."

print(generate_response(instruction, input_text))

Course Info

Course: AI-course3

Language: ES

Lesson: Module8