GGUFインポータンスマトリクス量子化(ジージーユーエフインポータンスマトリクスりょうしか)
llama.cppのGGUFフォーマットにおける文脈考慮型量子化手法。キャリブレーションデータを使い重みの「重要度」を計測し、重要な重みほど高精度で量子化することで、同じビット数でも通常量子化より高い品質を実現する。IQ2_XXS・IQ4_XS等のIQシリーズで採用される。
GGUFインポータンスマトリクス量子化とは
GGUF Importance Matrix(imatrix)量子化は、2024年初頭にllama.cppコミュニティが開発した革新的な量子化手法です。従来の均一量子化(Q4_0・Q8_0)やK-Quant(Q4_K_M・Q5_K_S等)に比べ、同じビット幅でも大幅に高いperplexityを達成することができます。
llama.cppの主要開発者Georgi Gerganovが2024年1〜2月にコードをマージし、同年中にHuggingFace Hub上の量子化モデル(Unsloth・bartowski等のリポジトリ)の主流フォーマットとなりました。
仕組み:なぜ「重要度」が量子化精度を上げるのか
従来の均一量子化の問題
通常の量子化(Q4_0等)では全ての重みを同一の量子化グリッドにマッピングします。しかし実際のTransformerモデルでは、一部の重みが推論に極めて重要で、残りは微小な寄与しか持ちません。均一に精度を落とすと重要な重みも劣化します。
imatrixの動作フロー
- キャリブレーションデータ準備(多様なテキスト100〜500件、合計512K〜2Mトークン)
- FP16モデルで順伝播 → 各重み行列の活性化寄与度を記録(imatrix.dat)
- 量子化実行時にimatrix.datを参照:
- スコアが高い重み:より多くのビット・細かい量子化ビン
- スコアが低い重み:少ないビット・粗い量子化ビン
IQシリーズの構造
| 量子化名 | 実効bpw | 特徴 | 対象GPU VRAM(7B) |
|---|---|---|---|
| IQ1_S | 1.56 | 最極小サイズ・品質低め | 2 GB |
| IQ1_M | 1.74 | IQ1_S改良版 | 2 GB |
| IQ2_XXS | 2.06 | 2bit相当で最高品質 | 3 GB |
| IQ2_XS | 2.31 | IQ2_XXS改良 | 3 GB |
| IQ2_M | 2.53 | Q2_K相当の品質 | 3.5 GB |
| IQ3_XXS | 3.06 | 3bit高精度 | 4 GB |
| IQ4_XS | 4.25 | Q4_K_S比で高品質 | 5 GB |
| IQ4_NL | 4.50 | Non-linear quant | 5 GB |
perplexityベンチマーク(WikiText-2、Llama 3 8B)
| 量子化 | bpw | Perplexity | VRAMサイズ |
|---|---|---|---|
| FP16 | 16 | 6.14 | 16 GB |
| Q8_0 | 8.5 | 6.17 | 8.5 GB |
| Q5_K_M | 5.33 | 6.28 | 5.3 GB |
| Q4_K_M | 4.58 | 6.39 | 4.6 GB |
| IQ4_XS | 4.25 | 6.36 | 4.3 GB |
| Q3_K_M | 3.35 | 6.70 | 3.5 GB |
| IQ2_XXS | 2.06 | 7.12 | 2.1 GB |
| Q2_K | 2.63 | 8.54 | 2.7 GB |
IQ2_XXSはQ2_K(より多くのメモリを使う)よりperplexityが大幅に改善。IQ4_XSはQ4_K_Mより少ないVRAMで同等以上の精度を達成しています。
imatrixの生成方法
# キャリブレーションテキスト準備(wikitext等)
wget https://huggingface.co/datasets/wikitext/resolve/main/wikitext-103-v1/wiki.test.tokens \
-O calibration.txt
# imatrix.datを生成(FP16モデルが必要)
./llama-imatrix \
-m ./Meta-Llama-3.1-8B-F16.gguf \
-f calibration.txt \
-o imatrix.dat \
--chunks 128
# imatrixを使った量子化
./llama-quantize \
--imatrix imatrix.dat \
./Meta-Llama-3.1-8B-F16.gguf \
./Meta-Llama-3.1-8B-IQ4_XS.gguf \
IQ4_XS
Ollamaでの利用
OllamaはGGUFモデルを内部で使用しており、bartowskiやUnslothが公開するIQ系量子化モデルをHuggingFace経由で利用できます。
ollama run hf.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF:IQ4_XS
自作PCでのVRAM別推奨量子化
| 搭載VRAM | 7B推奨 | 8B推奨 | 70B推奨 |
|---|---|---|---|
| 6 GB | IQ4_XS | IQ3_XXS | NG |
| 8 GB | Q8_0 | Q5_K_M | NG |
| 16 GB | Q8_0 | Q8_0 | IQ2_XXS |
| 24 GB | Q8_0 | Q8_0 | IQ4_XS |
よくある質問(FAQ)
Q1: imatrixなしのQ4_K_MとIQ4_XSではどちらが良いですか? A: VRAM消費が4.6 GB vs 4.3 GBでIQ4_XSの方が少なく、perplexityも同等かわずかに良好です。ただしimatrix生成にFP16モデルとGPU時間が必要なため、事前生成済みのIQファイルを使うのが実用的です。
Q2: imatrix生成に必要な時間・ハードウェアは? A: RTX 4090で7Bモデルのimatrix生成(512K〜2Mトークン)は10〜30分程度。FP16モデル(7B: 約14GB)が読み込めるGPUが必要です。
Q3: 日本語コンテンツで使う場合キャリブレーションは日本語にすべきですか? A: 原則として英語キャリブレーションで問題なし(重みの重要度は言語非依存で決まる傾向あり)。ただし日本語特化モデルでは日本語キャリブレーションデータ追加で若干の改善が報告されています。
まとめ
- キャリブレーションデータで重みの重要度を計測し量子化精度を最適化
- IQ2_XXS〜IQ4_XSはQ2_K〜Q4_K_Mより低VRAM・高品質を両立
- bartowski・Unslothらが主要モデルのIQ量子化版をHuggingFace Hubで公開中
- 自分でimatrix生成するならFP16モデルとGPU計算時間が必要