Wandb es esencial para el seguimiento de experimentos. Permite la visualización en tiempo real de:
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.
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.
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))