量子化(BF16 / FP8 / FP4)
量子化は重みやKV Cacheを低い精度で保持し、メモリ使用量と読み出しバイト数を減らす技術です。デコード速度は読むバイト数に反比例するため、帯域が制約の環境では速度改善に直結します。ただし品質は必ず落ちるため、劣化幅を自前の評価セットで測ってから採用します。
30秒で分かる
- 量子化は、重みをより少ないビット数で保持する技術です
- BF16(2バイト)→ FP8(1バイト)→ INT4(0.5バイト)と、精度を落とすほどメモリが減ります
- メモリが減るだけでなく、読み出すバイト数が減るのでデコードが速くなります
- 品質は必ず落ちます。問題は「落ちるかどうか」ではなく「許容範囲に収まるか」です
- 重みの量子化とKV Cacheの量子化は別物です。混同すると見積もりを外します
仕組み
何が減るのか
30Bモデルの重み
BF16 (2 bytes) ████████████████████████████████ 60 GB
FP8 (1 byte) ████████████████ 30 GB
INT4 (0.5 byte) ████████ 15 GB
メモリが減ると、2つの効果が同時に得られます。
- 容量に余裕ができる → KV Cacheに回せる → 同時実行数を増やせる
- 1トークンで読むバイト数が減る → デコードが速くなる
2つ目が見落とされがちですが、帯域が制約になっている環境ではこちらのほうが重要です。理論デコード速度は「帯域 ÷ 読むバイト数」なので、重みを半分にすれば理論速度は2倍になります。
量子化する対象
| 対象 | 効果 | 注意点 |
|---|---|---|
| 重み | メモリと読み出し量が減る | 最も一般的。品質劣化は比較的小さい |
| アクティベーション | 演算そのものが高速化される可能性 | GPUの対応が必要。劣化しやすい |
| KV Cache | 同時実行数を増やせる | 長文で劣化が出やすい |
weight-only量子化(重みだけを量子化し、計算は高い精度で行う)が最も広く使われています。読み出し量を減らしつつ、品質劣化を抑えられるためです。
精度形式の違い
| 形式 | バイト数 | 位置づけ |
|---|---|---|
| BF16/FP16 | 2 | 量子化なしの基準。品質の上限を測るために使う |
| FP8 | 1 | 対応GPUでは実用的な既定値。劣化は小さい傾向 |
| INT4/FP4 | 0.5 | 最小。手法とモデル次第で劣化が目立つことがある |
ハードウェアの対応が前提
FP8やFP4は、GPU側が該当形式の演算に対応していて初めて速度上の利点が出ます。対応していない世代のGPUでは、「メモリは減るが計算時に変換が入って遅くなる」ということが起こり得ます。
採用予定のGPUがどの形式に対応しているかを、公称仕様で必ず確認してください。
量子化の手法
配布されているモデルには、いくつかの量子化形式があります。
| 種類 | 特徴 |
|---|---|
| 学習後量子化(PTQ) | 学習済みモデルを後から変換する。最も手軽 |
| キャリブレーション付き | 少量のデータで誤差を補正し、劣化を抑える |
| 量子化を考慮した学習 | 学習段階から量子化前提。品質は最も良いがコスト大 |
実務では、モデル提供元が配布している量子化版を使うのが第一候補です。自前で量子化する場合は、キャリブレーションデータに日本語を含めることを検討します。英語のみで補正すると、日本語の品質だけが落ちることがあります。
設計に効く数字と落とし穴
効果の見積もり
30Bモデル・帯域273GB/sの環境での理論値:
| 精度 | 重み | 理論デコード速度 | 目標25 tok/s |
|---|---|---|---|
| BF16 | 60 GB | 約 4.6 tok/s | 届かない |
| FP8 | 30 GB | 約 9.1 tok/s | 届かない |
| INT4 | 15 GB | 約 18.2 tok/s | まだ届かない |
この例では、量子化だけでは目標に届きません。より小さいモデルかMoE構成へ切り替えるという判断が必要になります。量子化は万能ではなく、「あと少し足りない」を埋める手段だと捉えるのが実態に合っています。
重みを量子化してもKV Cacheは減らない
INT4にすれば重みは4分の1になりますが、KV Cacheは1バイトも減りません。同時実行数で詰まっているなら、効くのはKV側の対策です。
- 容量が足りない × 重みが大きい → 重みの量子化が効く
- 容量が足りない × 同時実行が多い → KV Cache側の対策が効く
- 速度が足りない → 重みの量子化・MoE・小さいモデル
どこで詰まっているかを特定してから手段を選びます。
品質劣化の測り方
「量子化すると劣化する」は一般論であり、判断には使えません。自社のユースケースで測ります。
- BF16版でLevel 0の想定質問100件を実行し、基準値を取る
- 同じ質問を量子化版で実行する
- 正答率・誤答率・出典提示率を比較する
- 差分が許容範囲かをビジネス側と合意する
平均スコアだけを見ない
平均正答率が2ポイント下がっただけでも、特定の種類の質問だけが壊れていることがあります。数値計算を含む質問、長文の要約、固有名詞の扱いは劣化が出やすい領域です。
質問をカテゴリ別に分けてスコアを比較すると、平均では見えない劣化を検出できます。
落とし穴
- 「量子化済み」の中身は一様ではない:同じINT4でも手法によって品質差があります。配布元と手法を確認します
- 推論エンジンが対応していない形式がある:モデル側の形式と推論エンジンの対応表を先に突き合わせます(Level 3)
- 量子化で速くならないケースがある:帯域ではなく演算やバッチ処理が律速している場合、読み出し量を減らしても効果は限定的です
- 長文で劣化が顕在化する:短い質問では差が出ず、長いコンテキストで急に崩れることがあります。評価は本番想定の長さで行います