Skip to content
Published on

最新LLM量子化技術の総まとめ — GPTQ・AWQからFP8・MXFP4・KVキャッシュ量子化まで

シェア
Authors

はじめに — なぜビットを減らすのか、なぜ持ちこたえるのか

70BモデルをFP16で載せると重みだけで140GB — H100が2枚必要です。同じモデルを4ビットに量子化すれば約35GB — 1枚に収まって余裕があります。量子化(quantization) はこのようにパラメータを表現するビット数を減らし、メモリ・帯域・コストを削る技術で、モデル開発ライフサイクル のサービング節で述べた「学習より長く続く戦い」の第一の武器です。

驚くべきは品質が思ったより持ちこたえることです。理由は二つ。第一に、ニューラルネットの重みの分布はほとんど0の周辺に集まっており、少ないビットでも密に表現できます。第二に、本当の問題は少数の外れ値(outlier) — 突出して大きい値 — であり、最新の手法はすべて「外れ値をどう遇するか」への異なる答えです。この視点を一つ握っていれば、以下の手法が一つの系譜として読めます。

用語を二つだけ先に:学習済みモデルをそのまま変換するのが PTQ(Post-Training Quantization)、低精度に耐えるよう再学習まで行うのが QAT(Quantization-Aware Training)です。この記事の大半は実務の主流であるPTQです。

まず表記法 — W4A16とは何か

量子化の議論には W{ビット}A{ビット} 表記が絶えず出てきます。

W4A16   = 重み(Weight)4ビット、活性値(Activation)16ビット
          → 保存・ロードは4ビット、計算直前に復元して16ビットで演算
W8A8    = 重みも活性値も8ビット → 演算自体が8ビット(ハードウェア支援が必要)
W4A4KV4 = 重み・活性値・KVキャッシュまで全部4ビット

重みだけ減らすW4A16系はメモリ・帯域を節約し(小バッチ推論も速くなります — decodeはmemory-boundなので)、活性値まで減らすW8A8/W4A4系は演算スループットまで引き上げます。ただし活性値は外れ値がずっと激しく、扱いがはるかに難しい — それが下のSmoothQuantが解く問題です。

INT系の古典たち — 外れ値外交の歴史

LLM.int8()(2022) — 「外れ値チャネルだけFP16で別に計算し、残りはINT8で」という混合分解で、巨大モデルの8ビット推論が品質損失なしに可能であることを初めて示しました。外れ値問題の存在を公式化した出発点です。

GPTQ(2022) — 4ビット時代を開いたPTQです。重みを一列ずつ量子化しながら、その列で生じた誤差をまだ量子化していない残りの重みに補正して累積誤差を抑えます(二次近似・ヘシアンベース)。少量のキャリブレーションデータだけでW4を実用圏に乗せました。

AWQ(2023) — 視点を反転させました。すべての重みは平等ではない — 活性値の大きいチャネルと掛け合わされる少数(約1%)の重みが品質を左右するという観察から、その「重要な」チャネルをスケーリングで保護し、残りを大胆に4ビットへ下げます。再学習不要で速く、GPU推論カーネルとの相性が良いため、vLLM系サービングにおけるINT4の事実上の標準になりました。

SmoothQuant(2022) — W8A8への橋です。活性値の外れ値スケールを数学的に重み側へ移管し(活性値を滑らかに、重みをやや荒く)、両方を8ビットで計算可能にします。

ローカル陣営 — GGUFとk-quant、そしてQLoRAのNF4

GGUF(llama.cpp) はローカル推論エコシステム(Ollama、LM Studio)の共通フォーマットです。特徴は k-quant混合精度:一つのモデルの中で層・テンソルごとに重要度に応じて異なるビットを混ぜます。ファイル名がそのまま仕様です。

Q4_K_M  = 4ビットk-quant、Mediumミックス — 品質/サイズバランスの定番
Q5_K_M  = 5ビット — 余裕があればこちら
Q8_0    = 8ビット — ほぼ無損失、サイズ節約は半分程度
Q2_K    = 2ビット — 極端圧縮、品質の妥協大
(最近は重要度行列ベースのi-quant系 IQ4_XS なども追加)

CPU+GPU混合推論を前提に設計されており、「ゲーミングPCで70Bを回す」シナリオの主役です。

NF4(QLoRA、2023) — ファインチューニング側の量子化です。正規分布に従う重みに情報理論的に最適な4ビット格子(NormalFloat4)でベースモデルを凍結し、その上にLoRAアダプタだけを学習します。「48GB GPU一枚で65Bをファインチューニング」を開いた手法で、モデル開発の記事 で扱ったLoRAとセットで覚えるとよいでしょう。

2026年の中心軸 — FP8とマイクロスケーリングFP4

最近の地形の最大の変化は、整数(INT)から低精度浮動小数点(FP)への移動です。浮動小数点は指数部のおかげで大きい値と小さい値を同時に表現する能力が高く、外れ値に整数より寛容です。

FP8 — Hopper(H100)からハードウェア支援される8ビット浮動小数点です(レンジ型E5M2と精度型E4M3)。FP16比でメモリ半分、品質低下はほぼない水準のため、データセンターのサービングスタック(vLLM、TensorRT-LLM)の事実上の標準デフォルトになりました。「ハードウェアがHopper/BlackwellならまずFP8」が現在の常識です。

マイクロスケーリングFP4 — MXFP4とNVFP4 — 4ビット浮動小数点を実用化した鍵はブロック単位のスケールです。32個前後の値のブロックごとに共有スケールファクタを別に持ち、4ビットの狭い表現範囲をブロックごとに最適な位置へ「移動」させます。OCP標準の MXFP4 は公開モデルの配布にまで使われ始め(OpenAIのgpt-ossがMXFP4で公開されたのが象徴的)、NVIDIAの NVFP4 はBlackwell世代のハードウェア支援とともにW4A4、さらにKVキャッシュまで4ビットにする構成(W4A4KV4)を狙います。「FP4はBlackwell時代のFP8」という要約が業界の共通認識です。

次のボトルネック — KVキャッシュ量子化

重みを削り終えた後に残る大きなメモリ消費者は KVキャッシュ です — LLMキャッシングの記事 で見たように、長いコンテキストではキャッシュが重みより大きくなり得ます。そこで最近のサービングエンジンは、KVキャッシュ自体をFP8(さらにINT4/FP4)で保存するオプションを提供します。効果は二重です:同じGPUにより長いコンテキスト・より多くの同時ユーザーを載せられ、decodeはmemory-boundなのでトークン生成速度自体が速くなります。長文コンテキストのサービスなら、重みの次に必ず検討すべき項目です。

選択ガイド — ハードウェア × 目的マトリクス

状況                                   推奨の出発点
─────────────────────────────────    ─────────────────────────────
データセンター、H100/Blackwell保有     FP8(サービングエンジンの標準経路)
Blackwell + 最大スループット           NVFP4/MXFP4(W4A4系)を検討
VRAM不足のGPUサービング(A100/4090)   AWQ INT4(W4A16)、GPTQが代替
ローカルPC / CPU混合 / Ollama          GGUF Q4_K_Mから、余裕があればQ5_K_M
ファインチューニングを安く             QLoRA(NF4 + LoRA)
長いコンテキストがボトルネック         KVキャッシュ量子化(FP8から)を追加
品質最優先、メモリに余裕               W8A8(FP8/INT8)まで

そしてどの選択でも最後のステップは同じです — 自分の課題の評価セットで検証してください。パープレキシティは参考に過ぎず、量子化のダメージは課題ごとに不均等に現れます(特に数学・コード・長い推論から先に崩れます)。モデル開発の記事 のeval-first原則がここでもそのまま適用されます。キャリブレーションデータ(GPTQ/AWQが使う少量サンプル)も実際の使用分布に近いものが安全です。

おわりに — 外れ値との戦争史

振り返れば、量子化手法の歴史は一文に要約されます:「外れ値をどう遇するか」。LLM.int8()は別室に案内し、GPTQは誤差を隣人に補正し、AWQは重要チャネルを護衛し、SmoothQuantは荒い側から滑らかな側へ移管し、FP8は指数部で抱擁し、MXFP4/NVFP4はブロックごとのスケールで正面突破しました。次の戦場はKVキャッシュと4ビット活性値です。ビットはこれからも減り続けます — 検証の習慣さえあれば、その節約はほとんどタダ同然です。

参考資料