Transformers documentation

モデルのファインチューニング

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

and get access to the augmented documentation experience

to get started

モデルのファインチューニング

量子化された重みは勾配によって直接更新できないため、量子化モデルのファインチューニングは、凍結された量子化重みの上に小さなアダプターを学習させることで行います。4ビットモデルに対してLoRAアダプターを学習させる手法はQLoRAと呼ばれ、bf16ではメモリに収まらなかったモデルのファインチューニングを可能にします。

Trainerは、学習前にモデルを確認し、以下を満たしていることを保証します。

  • 量子化メソッドはトレーニングをサポートしています。メソッドの選択の「Fine-tune」列を参照してください。
  • モデルには学習可能なアダプターが接続されています。量子化対応トレーニングをサポートするメソッドは例外であり、以下で説明しています。
  • モデルはtorch.compileでコンパイルされていません。

アダプターを学習

PEFTをインストールします。

pip install -U peft

学習をサポートするメソッドでモデルを読み込み、add_adapter() で LoRA アダプターをアタッチし、モデルを Trainer に渡します。以下の例では 4-bit の bitsandbytes を使用し、train_dataset がトークン化されたデータセットであると仮定しています。

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()

アダプター重みのみが学習されます。量子化されたベース重みは凍結されたままです。

アダプターを保存する

save_pretrained() は、数メガバイト程度のアダプター重みのみを保存します。この機能は、量子化された重みを保存できない手法を含む、すべての手法で動作します。

model.save_pretrained("qwen3-qlora-adapter")

アダプターを使用するには、同じ量子化設定でベースモデルを読み込み、その上にアダプターを読み込みます。詳細はアダプターの読み込みを参照してください。

量子化認識トレーニング

BitNetとcompressed-tensorsは、重みが学習可能な形式のまま維持される限り、アダプターなしでモデル全体を学習できます。

  • BitNetには、BitNetQuantConfigにlinear_class="autobitlinear"とquantization_mode="online"が必要です。
  • compressed-tensorsには、圧縮されていないチェックポイント、またはCompressedTensorsConfig内のdequantize=Trueが必要です。FP8カーネルを使用するチェックポイントは、トレーニングできません。

量子化認識型学習と学習後量子化の違いについては、Quantization conceptsを参照してください。

Update on GitHub