TRL (Transformer Reinforcement Learning) é uma biblioteca da Hugging Face projetada para treinar modelos de linguagem com abordagens modernas, incluindo Ajuste Fino Supervisionado (SFT), RLHF (Aprendizado por Reforço a partir de Feedback Humano) e DPO (Otimização de Preferência Direta).
Para ajuste fino supervisionado com LoRA/QLoRA, usamos o SFTTrainer, que estende o Trainer padrão da Hugging Face com otimizações para geração de texto. Vantagens:
# Instalar TRL
!pip install -q trl
# Importar componentes
from trl import SFTTrainer
from transformers import TrainingArguments
Define hiperparâmetros de treinamento: lote, épocas, taxa de aprendizado, logging, etc.
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
optim="paged_adamw_8bit",
save_steps=500,
logging_steps=100,
learning_rate=2e-4,
weight_decay=0.01,
fp16=True,
bf16=False,
max_grad_norm=0.3,
warmup_ratio=0.03,
lr_scheduler_type="cosine",
report_to="wandb",
evaluation_strategy="steps",
eval_steps=500,
save_total_limit=2,
load_best_model_at_end=True,
metric_for_best_model="eval_loss",
greater_is_better=False,
push_to_hub=False,
)
Notas:
batch_size=4 + accumulation=4 → lote efetivo de 16.paged_adamw_8bit evita estouro de memória em QLoRA.bf16=True se GPU suportar (A100/H100).report_to="wandb" por "none" se não usar Weights & Biases.O SFTTrainer requer dados formatados em texto único por exemplo.
from datasets import Dataset
dataset_dict = {
"instruction": [
"Escreva uma descrição curta para um produto tecnológico.",
"Resuma o seguinte texto em uma frase.",
],
"input": [
"Produto: Fones de ouvido sem fio com cancelamento de ruído. Preço: $129,99.",
"A IA generativa está transformando indústrias como educação, entretenimento e saúde ao permitir a criação automatizada de conteúdo de alta qualidade.",
],
"output": [
"Aproveite sua música sem distrações com estes fones de ouvido sem fio de alta fidelidade. Com cancelamento ativo de ruído e até 30 horas de duração da bateria, são ideais para viajar, trabalhar ou simplesmente relaxar. Apenas $129,99.",
"A IA generativa está revolucionando setores-chave ao automatizar a criação de conteúdo de alta qualidade.",
]
}
dataset = Dataset.from_dict(dataset_dict)
def formatting_prompts_func(examples):
instructions = examples["instruction"]
inputs = examples["input"]
outputs = examples["output"]
texts = []
for instruction, input_text, output in zip(instructions, inputs, outputs):
text = f"### Instrução:\n{instruction}\n\n### Entrada:\n{input_text}\n\n### Resposta:\n{output}"
texts.append(text)
return texts
trainer = SFTTrainer(
model=model,
args=training_args,
train_dataset=dataset,
formatting_func=formatting_prompts_func,
max_seq_length=512,
tokenizer=tokenizer,
packing=False,
)
trainer.train()
Observação: Para conjuntos grandes, separe train_dataset e eval_dataset e passe ambos ao treinador. Aqui, para simplificação, usamos apenas treinamento.