LLM 量子化比較 — FP16・INT8・INT4 と GGUF・AWQ・GPTQ

読了 5分

同じモデルをより小さい GPU に載せる最初の手段が量子化です。重みを低い精度で保存して VRAM を減らす代わりに精度を少し譲る取引ですが、「どれだけ譲ってどれだけ節約するか」が方式ごとに異なります。結論を先に書くと、GPU の多ユーザーサービングは AWQ、ローカル実行は GGUF、大半の場合は 4 ビット(INT4)で足りますが、推論・コードが核心なら INT8 か FP16 を維持します。 VRAM 規模の計算は LLM サーバー規模 で扱ったので、この記事はその VRAM を減らす方法の選択です。

精度 — VRAM はビット数に比例します #

量子化の軸は、重みを何ビットで保存するかです。元は大抵 16 ビット(FP16/BF16)で、ここからビットを半分ずつ減らすと VRAM も概ね半分ずつ減ります。

精度ビット70B モデルの VRAM(重み)品質
FP1616約 140GB
INT88約 70GBほぼ同一
INT44約 35〜40GB大半は維持、一部低下

読み方は単純です。INT4 に下げると FP16 比で VRAM が 4 分の 1 になり、H100 1 枚(80GB)に 70B モデルが余裕を持って載ります。FP16 なら 2 枚が必要です。実際に必要な VRAM は重みのほかに KV キャッシュが加わるので上の表に余裕を足す必要がありますが、方式選択の骨格はこの比例関係です。この節約がそのまま 損益分岐 の GPU 原価を下げます。

三つの形式 — 同じ 4 ビットでも用途が違います #

INT4 までは「どれだけ減らすか」の話で、実務の選択は「どの形式で減らすか」です。三つの形式が用途ごとに分かれます。

  • GGUF: llama.cpp と Ollama が使う形式です。Q2_K から Q8_0 まで量子化の段階が細かく、CPU+GPU の混合実行をサポートするので VRAM が不足するローカル環境に強いです。Q5_K_M・Q6_K は元に近く、Q2_K は目立って落ちるので、ローカルでは大抵 Q4_K_M〜Q5_K_M が均衡点です。
  • AWQ(Activation-aware Weight Quantization): 活性値を基準に重要な上位 1% の重みを保護しながら量子化します。FP16 品質の約 95〜97% を維持して三方式で最も精度がよく、GPU サービングでスループットも高いです。vLLM の多ユーザーサービングの既定の選択です。
  • GPTQ: AWQ より先に広く使われた GPU 量子化の方式で、FP16 の約 90〜96% を維持します。対応ツールと事前量子化されたモデルが多い利点がありますが、精度・速度で AWQ に劣る区間があります。

INT4 が品質を落とすところ #

4 ビットが「大半は維持」だからといって常に安全なわけではありません。低下が目立つ作業があります。

  • 数学・コード生成・推論中心の作業: 一つのトークンの誤差が結果全体を誤らせる作業では、INT4 の微細な品質低下が実際の誤答として表れます。こうしたワークロードは INT8 か FP16 を維持するほうが安全です。
  • 単純なチャット・要約・分類: わずかな品質低下が体感されない作業なら、INT4 に下げて VRAM・原価を節約するほうが得です。

つまり ワークロードの性格が精度の下限を決めます。 ベンチマークの数値(perplexity、精度)だけを見ず、実際のタスクで量子化の前後を比較して許容できるかを確認するのが先です。AWQ が INT4 でも GPTQ より推論・指示追従で優れるという結果がありますが、どちらにせよ 4 ビットは推論の作業で検証を経ます。

サービングフレームワークと合わせる #

形式の選択は サービングフレームワーク の選択と結び付いています。別々に選ぶと食い違います。

  • Ollama・llama.cpp でローカル実行 → GGUF。他の形式は受けないか限定的です。
  • vLLM・SGLang で GPU サービング → AWQ または FP8 がスループットで有利です。GPTQ も動きますが、新規のデプロイは AWQ が無難です。
  • FP8: 最新の GPU(Hopper 以降)でハードウェア加速される 8 ビット浮動小数点で、INT8 より品質の損失が少なくサービングのスループットが高く、プロダクションで場所を広げつつあります。

選択の手順 #

  1. 精度の下限から決めます: 推論・数学・コードが核心なら INT8 以上、チャット・要約・分類なら INT4 で始めます。
  2. 実行環境で形式を狭めます: ローカルなら GGUF、GPU サービングなら AWQ(または FP8)です。
  3. VRAM に合わせます: 目標の GPU にモデルが KV キャッシュまで載って入る最小の精度を選びます。サーバー規模の計算 と一緒に見ます。
  4. 実際のタスクで検証します: 量子化の前後をベンチマークではなく実際の入力で比較し、品質の低下が許容範囲かを確認します。
  5. スループットが必要ならサービング最適化の形式で: 多ユーザーなら AWQ・FP8 が GGUF よりスループットが高いです。

まとめ #

  • 量子化はビット数に比例して VRAM を減らします。INT4 は FP16 比で 4 分の 1 で、70B モデルが 140GB から 35〜40GB に下がります。
  • 形式は用途で分かれます。ローカルは GGUF、GPU サービングは AWQ、その前世代が GPTQ です。AWQ が FP16 の 95〜97% で精度が最もよいほうです。
  • INT4 は数学・コード・推論の作業で品質低下が目立ちます。こうしたワークロードは INT8 か FP16 を維持します。
  • 形式はサービングフレームワークと結び付けて選びます。Ollama は GGUF、vLLM は AWQ・FP8 です。
  • 方式の選択はベンチマークではなく、実際のタスクの品質検証で締めます。
X