AI・機械学習
上級

KVキャッシュ量子化(ケーブイキャッシュリョウシカ)

KVキャッシュに格納されるKey-Valueテンソルのデータ精度をFP16からINT8/INT4に低減し、メモリ使用量を50〜75%削減する技術。KIVIやAtomが代表的手法。

0 回閲覧
0 いいね

KVキャッシュ量子化とは

KVキャッシュ量子化(KV Cache Quantization)は、LLM推論時にKVキャッシュに格納されるKeyベクトルとValueベクトルのデータ型をFP16(16ビット浮動小数点)からINT8(8ビット整数)やINT4(4ビット整数)に変換し、メモリ使用量を大幅に削減する技術である。モデルの重み量子化とは異なり、KVキャッシュは推論中に動的に生成されるため、活性化値量子化に近いアプローチが必要になる。

重み量子化との違い

項目重み量子化 (GPTQ/AWQ)KVキャッシュ量子化 (KIVI/Atom)
対象モデルパラメータ推論時のK/Vテンソル
タイミングオフライン(事前処理)オンライン(推論中リアルタイム)
データ特性静的、分布が安定動的、入力依存で分布が変化
外れ値チャネル単位で対処可能トークン/チャネル混在で複雑
効果対象モデルメモリ削減KVキャッシュメモリ削減
併用可能可能(相互補完)

主要な量子化手法

KIVI (Key-Value Integer Quantization for Inference)

2024年に提案された手法で、KeyとValueに異なる量子化戦略を適用する:

  • Key量子化: チャネル方向(トークン間)に量子化。KeyはAttention計算で内積の一方となるため、チャネル方向の外れ値が品質に影響しやすい。INT2まで圧縮可能
  • Value量子化: トークン方向(チャネル間)に量子化。Valueは加重和で混合されるため、トークン方向が安定。INT4で十分な品質
  • 非対称量子化: KeyをINT2、ValueをINT4とする非対称構成で、FP16比75%のメモリ削減
  • 品質: Llama 2 70Bでパープレキシティ劣化0.05未満(WikiText-2)

Atom

2024年にUCバークレーが提案。チャネル単位の外れ値に注目し、混合精度量子化を採用:

  • 外れ値検出: 統計的に外れ値が集中するチャネル(通常1〜3%)を特定
  • 混合精度: 外れ値チャネルはFP16、残りはINT4で量子化
  • 融合カーネル: 量子化とAttention計算を1つのCUDAカーネルに融合し、メモリアクセスを最小化
  • 性能: Llama 2 70BでFP16比4.7倍のスループット向上、品質劣化0.1%未満

QServe

MITが提案したGPUサービング特化の量子化フレームワーク:

  • W4A8KV4: 重みINT4 + 活性化INT8 + KVキャッシュINT4の統合量子化
  • SmoothAttention: Attention計算前にKey/Valueを正規化して量子化誤差を低減
  • TensorRT統合: NVIDIA TensorRT-LLMとの深い統合で、量子化オーバーヘッドを最小化
  • 性能: Llama 3 8BをA100で30%以上高速化

量子化精度と品質の関係

構成KVメモリパープレキシティ劣化スループット推奨用途
FP16 (ベースライン)100%01×品質最優先
INT8 対称50%<0.021.3×安全な選択
INT4 対称25%<0.11.8×バランス型
KIVI (K2V4)25%<0.052.0×メモリ制約環境
Atom INT4 混合27%<0.054.7×高スループット

実装上の課題

動的範囲の問題

KVキャッシュの値は入力に依存して動的に変化するため、静的な量子化パラメータ(スケール、ゼロポイント)が使えない。主な対処法:

  1. Per-Token量子化: トークンごとにスケールを計算。精度は高いが計算オーバーヘッドが大きい
  2. Per-Channel量子化: チャネルごとにスケールを固定。KIVIが採用するアプローチで効率的
  3. Group量子化: 128要素ごとにグループ化してスケールを共有。GPTQ系と同様の考え方

カスタムカーネルの必要性

標準のPyTorchやCUDAライブラリはINT4のAttention計算をサポートしていない。KVキャッシュ量子化には:

  • INT4デコード + FP16 Attention: 量子化されたK/VをFP16に復元してからAttention計算(簡易だが遅い)
  • INT4ネイティブAttention: 量子化された状態でAttention計算を実行(高速だがカスタムカーネル必要)
  • Atom、QServeは後者のアプローチで、Triton/CUDAカーネルを提供

よくある質問(FAQ)

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キャッシュ量子化の実用性を左右する。

まとめ

  • KVキャッシュ量子化はFP16→INT4で75%のメモリ削減を実現
  • KIVIのKey INT2/Value INT4非対称構成が最も効率的
  • Atomの融合カーネルでスループット4.7倍向上
  • 重み量子化との併用でモデル全体のメモリを大幅圧縮
  • カスタムCUDAカーネルの有無が実用性の鍵