Transformers documentation
概要
概要
Quantizationは、モデルの重み(場合によってはアクティベーション)をより少ないビット数で保存することで、モデルが消費するメモリ量を削減します。モデルは通常、bf16で読み込まれ、これはパラメータごとに2バイトを必要とします。8Bモデルの場合、bf16では重みに約16GB、8ビットでは約8GB、4ビットでは約4〜5GBのメモリが必要です。ビット数を減らすと精度が多少低下しますが、各量子化手法はメモリ、速度、精度の間に異なるトレードオフをもたらします。
Transformers は from_pretrained() を通じて 20 種類以上の量子化手法を統合しているため、選択した手法にかかわらず、同じ読み込みコードを使用できます。
量子化モデルを使用する2つの方法
量子化の使用方法は、チェックポイントがすでに量子化済みかどうかによって異なります。
| あなたは | 実施する内容 | メソッド |
|---|---|---|
| フルプレシションのチェックポイント | from_pretrained に量子化設定を渡すと、重みの読み込み時に量子化が行われます。 | モデルの読み込み時に量子化を行う |
| すでに量子化済みのチェックポイント | from_pretrained を量子化設定なしで呼び出します。Transformers は、チェックポイントの config.json または指定した GGUF ファイルからメソッドを読み取ります。 | 事前量子化済みチェックポイントを読み込む |
AWQ、AutoRound、AQLM、compressed-tensors、GGUFなどの一部のメソッドは、チェックポイントからの読み込みのみに対応しています。まず、各メソッド専用のライブラリを使用してモデルを量子化し、その後、その結果をTransformersで読み込みます。
読み込み時にモデルを量子化
メソッドの config クラスを作成し、quantization_config に渡します。以下の例では、bitsandbytes を使用して 8B モデルを 4 ビットで読み込みます。
import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B-Instruct",
quantization_config=quantization_config,
device_map="auto",
)このグループの各メソッドには、TorchAoConfig や BitsAndBytesConfig のような独自の設定クラスがあります。ほとんどのメソッドにはキャリブレーション用のデータセットは不要です。GPTQ は例外で、モデルの読み込み時にデータセットを用いてキャリブレーションを行います。
事前量子化されたチェックポイントを読み込む
事前量子化済みチェックポイントには、config.json に quantization_config が保存されています。from_pretrained がこれを見つけると、対応する量子化器が自動的に選択されます。
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"TheBloke/zephyr-7B-alpha-AWQ",
device_map="auto",
)
print(model.config.quantization_config.quant_method)チェックポイントを読み込む前に、そのメソッドが依存するライブラリをインストールしてください。各メソッドのページには、インストールすべき内容が記載されています。カーネルバックエンドなど、読み込みオプションを変更するには、同じタイプの設定を渡します。そのオプションは、チェックポイントに保存されているオプションとマージされます。
GGUF チェックポイント
GGUF チェックポイントは、重み、設定、トークナイザーを単一のファイルに格納する形式であり、from_pretrained が読み取る config.json は存在しません。ファイル名は gguf_file で指定します。
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"unsloth/Qwen3.5-4B-GGUF",
gguf_file="Qwen3.5-4B-Q4_K_M.gguf",
)ほとんどのGGUFモデルは読み込み時にフル精度へデクォンタイズされるため、量子化されていないモデルと同量のメモリを消費します。重みがパックされた状態のまま保持されるのは、kernelsパッケージがインストールされているMPS環境でのQwen3.5およびQwen3.5 MoEの場合のみです。詳細はGGUFを参照してください。
量子化モデルを保存する
save_pretrained() または push_to_hub() を呼び出して、量子化された重みとその quantization_config を保存します。すべてのメソッドで量子化された重みを保存できるわけではありません。
メソッドを選択
手法を選択するでは、一般的な目的に応じた出発点を提案し、すべての手法をハードウェア、ビット幅、省メモリ効果、ファインチューニング、およびtorch.compileのサポートという観点から比較しています。量子化ピッカーを使用すると、各精度でモデルがハードウェアのメモリに収まるかどうかを確認できます。
その他のツール
これらのツールは、Transformers の外部でモデルを量子化します。
- Optimumは、Intel CPUやONNX Runtimeなどの特定のハードウェアやランタイム向けにモデルを量子化します。
- Hub Spaces はモデルを量子化し、結果をあなたのアカウントにプッシュします:bitsandbytes、GGUF、MLX。
リソース
次のステップ
- 量子化スキーム、粒度、および技術の仕組みについては、Quantization conceptsを参照してください。
- quantized cache を使用して KV キャッシュを量子化し、長い生成時のメモリ使用量を削減します。
- Quantizing exportsでモデルをエクスポートしながら量子化します。
- 量子化メソッドの貢献で新しいメソッドを貢献してください。