🎓 レベル:発展 | 重要度:B(推奨) 📎 前提:量子化の仕組み(ビット数と精度) | 原理:推論の実務(機械学習)
要点(結論先出し)
- 代表は3系統(要最新確認):GGUF k-quants(llama.cpp・CPU/GPU混在)、GPTQ(GPU向け・後処理で誤差最小化)、AWQ(GPU向け・重要チャンネル保護)。
- k-quants はスーパーブロックで階層的にスケールを配り、
Q4_K_Mのように S/M/L で品質とサイズを刻む。さらに importance matrix(imatrix) を使う IQ系は、重要な重みを優先的に守る。 - どこで動かすかで選ぶ:CPUオフロード前提なら GGUF系、GPUに丸ごと載せて速度重視なら GPTQ/AWQ。
概念 ── 「どう賢く丸めるか」が方式の違い
ビット数(4bitなど)が同じでも、どの値にビットを多く割くかで品質が変わります。各方式はその配分戦略が違います。
- k-quants(GGUF):重みを256要素のスーパーブロックに分け、その中をさらに小ブロックに分割。各層に量子化したスケール/最小値を持たせ、限られたbitを賢く配分。末尾の _S / _M / _L は「メタデータをどれだけ持つか=品質とサイズの刻み」。
- IQ系(importance matrix):較正データで各重みの重要度を測り、重要な重みは粗く丸めない。低ビット帯(2〜3bit級)で効きやすい(要最新確認)。
- GPTQ:較正データを使い、量子化誤差が出力に与える影響を後処理で補正しながら丸める。GPU推論向け。
- AWQ:活性化を手がかりに重要チャンネルを保護して丸める。GPU推論向けで高速。
仕組み ── 較正データの有無で二分する
flowchart TD
M["FP16の重み"] --> A{"較正データを使うか"}
A -->|"使わない"| KQ["k-quants(ブロック統計のみ)"]
A -->|"使う"| CAL["imatrix・GPTQ・AWQ(重要度を測る)"]
KQ --> GG["GGUF(CPU混在で実行)"]
CAL --> G2["GGUF-IQ または GPU形式"]
較正データを使う方式ほど「どの重みが大事か」を考慮でき、低ビットでの品質が上がりやすい。一方で量子化の手間は増えます。
住み分け(実務の指針・要最新確認)
- 手元で手軽・CPUオフロードあり → GGUF の
Q4_K_M/品質が要るならQ5_K_M・Q6_K。 - VRAMにギリギリ載せたい・極小化 → IQ系の低ビット(品質低下に注意)。
- GPUに丸ごと載せて高スループット → AWQ / GPTQ(vLLM等と相性)→ vLLMとTGI
なぜそうするか
同じ4bitでも「賢い配分」をするほど、サイズはそのままで品質が上がる。逆に言えば、ビット数だけで品質を語るのは不十分。実行環境(CPU混在 or GPU専有)と必要品質で方式を選ぶのが正解です。
⚠️ よくある落とし穴
- 方式とエンジンの相性を無視:AWQ/GPTQ は GPU推論エンジン向け。llama.cpp で動かすなら GGUF系を選ぶ。
_Sを品質目的で選ぶ:_Sは小型・高速寄り。品質重視なら_M/_L。- IQ系を万能と思う:低ビットで効くが、量子化に較正データと時間が要る。中ビット帯では k-quants で十分なことも。
- 命名を暗記する:量子化名は更新が速い。意味(ブロック・較正・S/M/L)で理解し、最新表を都度確認。
対応lab
- 量子化サイズの比較は 量子化とVRAM・品質のトレードオフ と
local-llm-study/labs/vram_sizing.py。
関連
- 前提の仕組み → 量子化の仕組み(ビット数と精度)
- サイズと品質の最終判断 → 量子化とVRAM・品質のトレードオフ
- GPU高スループット実行 → vLLMとTGI