KVキャッシュに格納されるKey-Valueテンソルのデータ精度をFP16からINT8/INT4に低減し、メモリ使用量を50〜75%削減する技術。KIVIやAtomが代表的手法。
KVキャッシュ量子化(KV Cache Quantization)は、LLM推論時にKVキャッシュに格納されるKeyベクトルとValueベクトルのデータ型をFP16(16ビット浮動小数点)からINT8(8ビット整数)やINT4(4ビット整数)に変換し、メモリ使用量を大幅に削減する技術である。モデルの重み量子化とは異なり、KVキャッシュは推論中に動的に生成されるため、活性化値量子化に近いアプローチが必要になる。
| 項目 | 重み量子化 (GPTQ/AWQ) | KVキャッシュ量子化 (KIVI/Atom) |
|---|---|---|
| 対象 | モデルパラメータ | 推論時のK/Vテンソル |
| タイミング | オフライン(事前処理) | オンライン(推論中リアルタイム) |
| データ特性 | 静的、分布が安定 | 動的、入力依存で分布が変化 |
| 外れ値 | チャネル単位で対処可能 | トークン/チャネル混在で複雑 |
| 効果対象 | モデルメモリ削減 | KVキャッシュメモリ削減 |
| 併用 | 可能 | 可能(相互補完) |
2024年に提案された手法で、KeyとValueに異なる量子化戦略を適用する:
2024年にUCバークレーが提案。チャネル単位の外れ値に注目し、混合精度量子化を採用:
MITが提案したGPUサービング特化の量子化フレームワーク:
| 構成 | KVメモリ | パープレキシティ劣化 | スループット | 推奨用途 |
|---|---|---|---|---|
| FP16 (ベースライン) | 100% | 0 | 1× | 品質最優先 |
| INT8 対称 | 50% | <0.02 | 1.3× | 安全な選択 |
| INT4 対称 | 25% | <0.1 | 1.8× | バランス型 |
| KIVI (K2V4) | 25% | <0.05 | 2.0× | メモリ制約環境 |
| Atom INT4 混合 | 27% | <0.05 | 4.7× | 高スループット |
KVキャッシュの値は入力に依存して動的に変化するため、静的な量子化パラメータ(スケール、ゼロポイント)が使えない。主な対処法:
標準のPyTorchやCUDAライブラリはINT4のAttention計算をサポートしていない。KVキャッシュ量子化には:
Q1: KVキャッシュ量子化と重み量子化は併用できますか? A: 併用可能で推奨される。例えばAWQ INT4(重み)+ KIVI INT4(KVキャッシュ)の組み合わせにより、モデルメモリとKVキャッシュメモリの両方を75%削減できる。vLLM 0.6以降でこの組み合わせがサポートされている。Llama 3.1 8Bの場合、FP16で約20GB(パラメータ16GB + KV 4GB)が約5GB(パラメータ4GB + KV 1GB)まで圧縮される。
Q2: INT4未満の量子化(INT2やINT1)は実用的ですか? A: KIVIのKey側はINT2で実用的な品質を維持するが、KeyとValueの両方をINT2にすると顕著な品質劣化が発生する。2026年時点では、KVキャッシュ全体としてINT4が実用的な下限で、INT2はKey側のみの限定適用に留まる。1ビット量子化(バイナリ)は研究段階で実用には至っていない。
Q3: 量子化のオーバーヘッドはどの程度ですか? A: 量子化・逆量子化の計算自体は軽量で、Atomの融合カーネルでは1%未満のオーバーヘッド。ただし、融合カーネルなしの素朴な実装(FP16復元→Attention計算)では10〜15%のオーバーヘッドが発生する。カスタムカーネルの有無がKVキャッシュ量子化の実用性を左右する。