Transformers documentation

Ajuste fino de um modelo

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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" e quantization_mode="online" em BitNetQuantConfig.
  • compressed-tensors requer um checkpoint que não esteja comprimido, ou dequantize=True em 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