📚 Módulo 8: Monitoramento do Treinamento e Avaliação

8.1 Monitoramento com Weights & Biases (wandb)

Wandb é essencial para o acompanhamento de experimentos. Permite visualização em tempo real de:

  • Perda de treinamento e validação.
  • Uso de GPU e memória.
  • Taxa de aprendizado.
  • Exemplos gerados durante o treinamento.

Configuração:

import wandb

# Login (requer chave API gratuita)
wandb.login()

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

Durante o treinamento, SFTTrainer envia métricas automaticamente para wandb se report_to="wandb" estiver habilitado.

8.2 Avaliação Durante o Treinamento

O SFTTrainer pode avaliar periodicamente se um eval_dataset for fornecido. Prepare um conjunto de validação separado.

# Assumimos que temos um conjunto de dados de validação
eval_dataset = ... # Similar ao conjunto de treinamento, não visto durante o treinamento

# Modificar treinador
trainer = SFTTrainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,           # Adicionar conjunto de avaliação
    formatting_func=formatting_prompts_func,
    max_seq_length=512,
    tokenizer=tokenizer,
    packing=False,
)

A avaliação é executada a cada eval_steps (definido em TrainingArguments) e registra eval_loss. Você pode definir métricas personalizadas (por exemplo, ROUGE, BLEU, acurácia) via compute_metrics.

8.3 Avaliação Manual Pós-Treinamento

Após o treinamento, teste o modelo com novos prompts.

def generate_response(instruction, input_text=""):
    prompt = f"### Instrução:\n{instruction}\n\n### Entrada:\n{input_text}\n\n### Resposta:\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)
    # Extrair apenas a resposta (após "### Resposta:")
    response_text = response.split("### Resposta:")[-1].strip()
    return response_text

# Testar
instruction = "Escreva uma descrição curta para um produto tecnológico."
input_text = "Produto: Relógio inteligente com GPS e monitor cardíaco. Preço: $199,99."

print(generate_response(instruction, input_text))

Course Info

Course: AI-course3

Language: PT

Lesson: Module8