← Resources
By Ren Sugaya
— Performance Engineer, GPU & Inference
·
· INSIGHT
LLM量子化の徹底解説:GGUF、Q4とQ8、そして品質
量子化はLLMの重みをより低い精度で保存してモデルを小さくし、4ビットならVRAMをおよそ4分の1に削減します。本ガイドではVRAMの計算方法を解説し、Q4_K_MのようなGGUF量子化名を読み解き、GGUFとGPTQ・AWQを比較し、品質が実際にどこで崩れ始めるかを示します。
量子化とは何か、そしてなぜ重要なのか
量子化は、モデルの重みを保存する際の数値精度を下げます。通常はFP16(16ビット、1重みあたり2バイト)から8ビットまたは4ビットへと削減します。メモリは1重みあたりのビット数に比例して増減するため、4ビットはFP16の約4分の1のVRAMしか使いません。さらに、トークン生成は演算量だけでなくメモリ帯域幅によって律速されるため、推論速度も向上します。
サイズの計算は単純です:bytes ≈ (parameters × bits-per-weight) ÷ 8。FP16での8Bモデルは約16 GBですが、4ビットでは約4.5 GBになります。この差こそが、データセンター向けGPUを要するモデルをラップトップで動かせるものにします。
GGUFはファイル形式であり、量子化手法ではない
GGUFは、量子化された重みとモデルのメタデータ(トークナイザー、アーキテクチャ、ハイパーパラメータ)を単一ファイルにまとめた形式です。llama.cppプロジェクトのGGMLの後継であり、CPU・Apple Silicon(Metal)・CPU/GPUの混合オフロードに最適化されています。llama.cpp・Ollama・LM Studioによるローカル/ラップトップ推論で広く使われているのはそのためです。
量子化レベルはファイル名に含まれています。数字は平均ビット/重みを表し、`_K`はk-quants(二重量子化されたスケーリング係数とレイヤーごとのビット割り当てを備えた現代的なスーパーブロック方式)を意味します。`_S`・`_M`・`_L`はそれぞれ小・中・大のバリアントです。`_M`はアテンションや出力といった敏感なレイヤーを選択的に高精度で保持するため、Q4_K_Mは一律の4ビット量子化よりも優れています。
Q4対Q5対Q8:数値で見るサイズと品質
Llama-3.1-8Bを対象としたピアレビュー済みの評価が、このトレードオフを具体的に示しています(サイズはこのモデルの値ですが、比率は一般化できます)。FP16ベースラインのperplexity約7.32(低いほど良い)に対して:
- Q8_0 — 8.5 bits/weight, ~7.95 GiB, perplexity 7.33:実質的に無損失。
- Q6_K — 6.56 bpw, ~6.14 GiB, perplexity 7.35。
- Q5_K_M — 5.70 bpw, ~5.33 GiB, perplexity 7.40。
- Q4_K_M — 4.89 bpw, ~4.58 GiB, perplexity 7.56:ベースラインから0.5%未満という実用的なスイートスポット。
- Q3以下 — 急激かつ一貫した劣化、特に推論タスクで顕著。
4〜5ビットの帯域が安全圏です。3ビット未満ではimportance-matrix(IQ)量子化が必要になります。これはキャリブレーションデータを使って重要な箇所に精度を集中させる手法で、使えはしますが、メモリが本当に厳しいときの最終手段です。
GGUF対GPTQ対AWQ
GGUFだけが選択肢ではありません。最適な選択は実行環境によって変わります。
- GGUF:CPU・Mac・混合オフロード向けに作られています。ローカルおよびデスクトップ推論にはこれを選びましょう。
- GPTQ:学習後・キャリブレーションベースで、二次情報を用いてレイヤーごとの誤差を最小化します。同じビット幅では重み単位で最も精度が高い一方、生成に時間がかかり、GPUサービング(vLLM、TGI、TensorRT-LLM)向けです。
- AWQ:活性化の大きさに基づき、最も重要な約1%の重みを保護します。GPTQより速く生成でき、4ビットでGPUに最適化されています。
- bitsandbytes:事前量子化済みチェックポイントやキャリブレーションなしで、ロード時に動的に量子化します。最も手軽な方法で、QLoRAファインチューニングで広く使われています。
実用的な使い分け:ローカル・ラップトップにはGGUF、GPUサーバーのスループットにはAWQまたはGPTQ。
実際にどれだけ品質が落ちるのか
4ビットでは多くの人が心配するよりずっと少なく、3ビット未満では予想以上に落ちます。Llama-3.1-8Bの評価では、Q8は完全精度と誤差程度の差しかなく、Q4_K_Mは平均ベンチマークで0.5%未満の損失にとどまり、急落は3ビットで現れました。特にgrade-school mathのような推論負荷の高い評価で最も明確な劣化が見られました。絶対的なperplexityとサイズの数値はモデル固有であることを忘れないでください。パーセンテージは一般化できますが、必ず使用するベースモデルの数値を確認しましょう。さらに、ファイルサイズを超えるVRAMも見込んでおくこと:KVキャッシュと約10〜15%のフレームワークオーバーヘッドにも余裕が必要です。
osFoundryにおける量子化
通常、量子化を選ぶには、bits-per-weightを理解し、KVキャッシュ用の余裕を確保し、クラッシュせずに収まる一つのファイルを探して暗号のようなGGUFのサフィックスの壁を漁る必要があります。osFoundryのローカル推論はこの手間を取り除きます。利用可能なメモリを検出し、適切な量子化を自動で選択します。VRAMが厳しければQ4_K_M、余裕があればQ5_K_MまたはQ8_0を選び、ハードウェアが対応できる最高の品質でモデルを動かします。カタログはすべてのバリアントではなく互換性のあるビルドだけを表示し、重い量子化が収まらない場合はスムーズにフォールバックします。Q4_K_Mの意味を知らなくても、GGUFを手作業で選ぶのと同じ、サイズと品質の最適解が手に入ります。
Frequently asked questions
- LLM量子化を簡単に言うと?
- モデルの重みをより低い数値精度で保存することです。たとえば16ビットの代わりに4ビットで保存し、モデルを小さくします。メモリは1重みあたりのビット数に比例するため、4ビット量子化はFP16の約4分の1のVRAMしか使わず、動作も速くなります。品質への影響は小さく、たいてい許容範囲内です。
- GGUFは何の略で、どういうものですか?
- GGUFはllama.cppプロジェクトの単一ファイル形式のモデル形式(GGMLの後継)で、量子化された重みとモデルのメタデータをまとめたものです。CPU・Apple Silicon・CPU/GPU混合推論に最適化されており、llama.cpp・Ollama・LM Studioといったローカルツールの標準形式になっています。量子化アルゴリズムではなく、ファイル形式です。
- Q4、Q5、Q8の違いは何ですか?
- 数字は平均ビット/重みを表すため、Q8はQ5より大きく高精度で、Q5はQ4より大きくなります。一般的な8Bモデルでは、Q8は約8 GBでほぼ無損失、Q5_K_Mは約5.3 GBでわずかに劣り、Q4_K_Mは約4.6 GBで品質損失0.5%未満という、サイズと品質のスイートスポットです。
- どのGGUF量子化を使うべきですか?
- ほとんどの場合はQ4_K_Mが最適です。サイズと品質のバランスが最も良く、標準的な出発点です。VRAMに余裕があり、より高い精度が欲しい場合はQ5_K_MまたはQ8_0に上げてください。3ビット以下では品質が急激に落ちるため、メモリが本当に厳しいときだけimportance-matrix IQ量子化を使ってQ4未満に下げましょう。
- 4ビット量子化でどれくらい品質が落ちますか?
- 驚くほどわずかです。ピアレビュー済みのLlama-3.1-8B評価では、Q4_K_Mは平均ベンチマークで完全精度ベースラインを0.5%未満下回っただけでした。目立った劣化は3ビットから始まり、特に推論や数学タスクで顕著です。正確な数値はモデルによって異なりますが、4〜5ビットは広く安全圏とされています。
- GGUF対GPTQ対AWQ — どれを選ぶべきですか?
- llama.cppやOllamaを使ったローカル・ラップトップ・Apple Silicon推論にはGGUF。GPTQとAWQはGPUに適したレイアウトで保存され、vLLMやTGIを使ったGPUサーバーのスループットに向いています。AWQは生成が速く、GPTQは重み単位で最も精度が高いことが多いです。bitsandbytesはキャリブレーション不要でロード時に量子化するため、最も手軽です。
- 量子化モデルに必要なVRAMはどう計算しますか?
- bytes ≈ (parameters × bits-per-weight) ÷ 8を使います。4ビットでは10億パラメータあたり約0.5〜0.6 GBなので、8Bモデルは約4.5 GBです。さらにKVキャッシュと約10〜15%のフレームワークオーバーヘッドの分の余裕を加えてください。実際に動かしたときのメモリ使用量は、常にディスク上のファイルサイズより大きくなります。
Sources