Wandb é essencial para o acompanhamento de experimentos. Permite visualização em tempo real de:
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.
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.
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))