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).
モデルのファインチューニング
量子化された重みは勾配によって直接更新できないため、量子化モデルのファインチューニングは、凍結された量子化重みの上に小さなアダプターを学習させることで行います。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