クラウド設計図鑑

量子化(BF16 / FP8 / FP4)

中級読了11分BF16FP8FP4INT4Weight-onlyKV量子化

量子化は重みや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つの効果が同時に得られます。

  1. 容量に余裕ができる → KV Cacheに回せる → 同時実行数を増やせる
  2. 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・小さいモデル

どこで詰まっているかを特定してから手段を選びます。

品質劣化の測り方

「量子化すると劣化する」は一般論であり、判断には使えません。自社のユースケースで測ります。

  1. BF16版でLevel 0の想定質問100件を実行し、基準値を取る
  2. 同じ質問を量子化版で実行する
  3. 正答率・誤答率・出典提示率を比較する
  4. 差分が許容範囲かをビジネス側と合意する

平均スコアだけを見ない

平均正答率が2ポイント下がっただけでも、特定の種類の質問だけが壊れていることがあります。数値計算を含む質問、長文の要約、固有名詞の扱いは劣化が出やすい領域です。

質問をカテゴリ別に分けてスコアを比較すると、平均では見えない劣化を検出できます。

落とし穴

  • 「量子化済み」の中身は一様ではない:同じINT4でも手法によって品質差があります。配布元と手法を確認します
  • 推論エンジンが対応していない形式がある:モデル側の形式と推論エンジンの対応表を先に突き合わせます(Level 3
  • 量子化で速くならないケースがある:帯域ではなく演算やバッチ処理が律速している場合、読み出し量を減らしても効果は限定的です
  • 長文で劣化が顕在化する:短い質問では差が出ず、長いコンテキストで急に崩れることがあります。評価は本番想定の長さで行います

この技術を実際に使って判断しているLevel