Transformers documentation
Ajuste fino de um modelo
Ajuste fino de um modelo
Pesos quantizados não podem ser atualizados diretamente por gradientes, portanto, você faz o ajuste fino de um modelo quantizado treinando um pequeno adaptador sobre os pesos quantizados congelados. Treinar um adaptador LoRA em um modelo de 4 bits é conhecido como QLoRA, e permite fazer o ajuste fino de um modelo que não caberia na memória em bf16.
Trainer verifica o modelo antes do treinamento para garantir que:
- O método de quantização suporta treinamento. Consulte a coluna Fine-tune em Escolher um método.
- O modelo possui um adaptador treinável acoplado. Os métodos que suportam treinamento com quantização são a exceção, abordados abaixo.
- O modelo não foi compilado com
torch.compile.
Treinar um adaptador
Instale o PEFT.
pip install -U peft
Carregue o modelo com um método que suporte treinamento, anexe um adaptador LoRA com add_adapter() e passe o modelo para Trainer. O exemplo abaixo usa 4-bit bitsandbytes e pressupõe que train_dataset seja um conjunto de dados tokenizado.
import torch
from peft import LoraConfig
from transformers import AutoModelForCausalLM, BitsAndBytesConfig, Trainer, TrainingArguments
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
quantization_config=quantization_config,
device_map="auto",
)
lora_config = LoraConfig(r=16, lora_alpha=32, target_modules="all-linear", task_type="CAUSAL_LM")
model.add_adapter(lora_config)
trainer = Trainer(
model=model,
args=TrainingArguments(output_dir="qwen3-qlora", bf16=True),
train_dataset=train_dataset,
)
trainer.train()Apenas os pesos do adaptador são treinados. Os pesos base quantizados permanecem congelados.
Salvar o adaptador
save_pretrained() salva apenas os pesos do adaptador, que ocupam alguns megabytes. Isso funciona com todos os métodos, inclusive aqueles que não conseguem salvar seus pesos quantizados.
model.save_pretrained("qwen3-qlora-adapter")Para usar o adaptador, carregue o modelo base com a mesma configuração de quantização e carregue o adaptador sobre ele. Consulte Carregando um adaptador para mais detalhes.
Treinamento com quantização
BitNet e compressed-tensors podem treinar o modelo completo sem um adaptador, desde que os pesos permaneçam em uma forma treinável.
- O BitNet precisa de
linear_class="autobitlinear"equantization_mode="online"em BitNetQuantConfig. - compressed-tensors requer um checkpoint que não esteja comprimido, ou
dequantize=Trueem CompressedTensorsConfig. Checkpoints que usam os kernels FP8 não podem treinar.
Veja Conceitos de quantização para saber como o treinamento consciente de quantização difere da quantização pós-treinamento.
Update on GitHub