KVキャッシュ最適化(ケーブイキャッシュサイテキカ)
LLM推論時にTransformerのAttention計算で生成されるKey-Value(KV)ペアをGPUメモリ上に効率的にキャッシュ・管理する技術群で、メモリ使用量とレイテンシの両方を削減する
KVキャッシュ最適化は、LLM(大規模言語モデル)の推論において最も重要なメモリ管理技術の一つである。Transformerモデルの自己回帰生成(Autoregressive Generation)では、各トークン生成時に過去の全トークンのKey(K)とValue(V)テンソルを参照する必要がある。これらのKVペアをGPUメモリ(VRAM)にキャッシュすることで再計算を回避し、推論速度を大幅に向上させる。しかし、KVキャッシュはモデルサイズとシーケンス長に比例してメモリを消費するため、2026年現在の128Kトークン対応モデルではKVキャッシュだけで数十GBのVRAMを必要とすることもあり、効率的な管理が不可欠である。
概要
KVキャッシュの基本的な仕組みは、Transformerの各層・各AttentionヘッドにおけるKとVの射影ベクトルを保存し、新しいトークン生成時に過去トークンの再計算を省略することである。例えば、Llama 3.1 70Bモデル(80層、64ヘッド、ヘッド次元128)でシーケンス長4,096トークンの場合、KVキャッシュは 80×64×4096×128×2(KとV)×2バイト(FP16)= 約10.7GBのVRAMを消費する。バッチサイズ8なら約86GBとなり、A100 80GBでもモデル重み(140GB FP16)と合わせて収まらない。
この問題を解決するために、PagedAttention、GQA(Grouped-Query Attention)、MQA(Multi-Query Attention)、KVキャッシュ量子化、Sliding Window Attentionなど、多数の最適化手法が開発されてきた。
主な特徴・仕組み
- PagedAttention(vLLM): KVキャッシュを固定サイズのページ(通常16トークン分)に分割し、OSの仮想メモリのように非連続メモリ割り当てを行う。メモリ断片化を95%以上削減し、同時処理可能なリクエスト数を2〜4倍に向上
- GQA(Grouped-Query Attention): Llama 3、Gemma 2等が採用。64ヘッドのQueryに対してKVヘッド数を8に削減(8:1グループ化)。KVキャッシュサイズを1/8に圧縮しつつ、MHA(Multi-Head Attention)と同等の精度を維持
- MQA(Multi-Query Attention): 全QueryヘッドがKVペアを1組だけ共有。KVキャッシュサイズを1/64に圧縮するが、品質低下のリスクがGQAより高い。Falcon、StarCoder等が採用
- KVキャッシュ量子化: KVテンソルをFP16からINT8/INT4に量子化。メモリ使用量を50〜75%削減。vLLMの
--kv-cache-dtype fp8オプションで利用可能 - Sliding Window Attention: Mistral 7Bが採用。直近の4,096トークンのKVキャッシュのみ保持し、それ以前は破棄。メモリ使用量を一定に保つが、超長文コンテキストでは情報損失が発生
- Prefix Caching: 共通のシステムプロンプトのKVキャッシュを複数リクエスト間で共有。同一プレフィックスの場合、Prefill計算をスキップしてTTFTを最大10倍短縮
- RadixAttention(SGLang): Prefix Cachingをラディックスツリー(基数木)で管理し、部分一致するプレフィックスの再利用を最大化
スペック比較表
| 最適化手法 | メモリ削減率 | 速度影響 | 精度影響 | 代表的な採用例 |
|---|---|---|---|---|
| PagedAttention | 断片化95%削減 | スループット2〜4x | なし | vLLM |
| GQA(8:1) | KVサイズ1/8 | 同等〜微向上 | ほぼなし | Llama 3, Gemma 2 |
| MQA(1:1) | KVサイズ1/64 | 向上 | わずかに低下 | Falcon, StarCoder |
| KV量子化(FP8) | 50%削減 | 同等 | 微低下(<1%) | vLLM, TensorRT-LLM |
| Sliding Window | 固定メモリ | 同等 | 長文で低下 | Mistral 7B |
具体例・対応製品
- Llama 3.1 405B(GQA 8:1): 128ヘッドQuery / 8ヘッドKVで、KVキャッシュサイズを従来の1/16に削減。8x H100 80GBで128Kコンテキスト対応
- vLLM PagedAttention: 16トークン/ページのデフォルト設定で、Llama 2 13Bのバッチ処理で同時リクエスト数が2.2倍に増加(論文値)
- Mistral 7B(Sliding Window 4096): 固定4096トークンウィンドウにより、シーケンス長に関わらずKVキャッシュは約1.2GBで一定
- SGLang RadixAttention: マルチターン会話でプレフィックス再利用率が70〜90%に達し、TTFT(Time-to-First-Token)を平均5倍短縮
- TensorRT-LLM FP8 KVキャッシュ: H100のFP8テンソルコアを活用し、KVキャッシュを半精度から8bit化。VRAM使用量50%削減で同一ハードウェアのバッチサイズを2倍に拡張
選び方・注意点
- モデルアーキテクチャの確認: GQA/MQA採用モデルは元々KVキャッシュが小さい。非GQAモデル(GPT-NeoX等)では PagedAttentionやKV量子化の効果が特に大きい
- コンテキスト長要件: 128Kトークン対応が必要な場合、Sliding Window は不適。PagedAttention + GQA + KV量子化の組み合わせが推奨
- 精度とのトレードオフ: KV量子化(INT4)は一部のタスクで精度低下が顕著。FP8は精度影響が1%未満で実用的
- Prefix Cachingの効果: システムプロンプトが長い(1,000トークン以上)アプリケーションでは、Prefix CachingによるTTFT短縮効果が絶大
関連用語との違い
KVキャッシュはAttention計算の中間結果を保存するメモリ領域であり、モデル重み(Weight)とは別にGPUメモリを消費する。モデル量子化(AWQ/GPTQ等)はモデル重みの圧縮、KVキャッシュ量子化はAttention中間結果の圧縮であり、両者は独立に適用可能。PagedAttentionはKVキャッシュのメモリ配置を最適化する手法であり、量子化とは異なりデータ精度を変更しない。
よくある質問(FAQ)
Q1: KVキャッシュはモデルサイズと別にどれくらいVRAMを使いますか? A: Llama 3.1 70B(GQA 8:1)でシーケンス長4096・バッチ1の場合、約670MB。バッチ16なら約10.7GB。非GQAモデルではこの8倍が必要。
Q2: PagedAttentionとKVキャッシュ量子化は併用できますか?
A: vLLMでは --kv-cache-dtype fp8 とPagedAttentionを同時に有効化可能。メモリ断片化削減と量子化圧縮の両方の恩恵を受けられる。
Q3: Sliding Window AttentionのモデルでKVキャッシュOOMが起きることはありますか? A: ウィンドウサイズ分のKVキャッシュは常に必要だが、シーケンス長に比例して増加しないため、OOMのリスクは大幅に低減される。ただしバッチサイズが大きい場合は注意。
まとめ
- KVキャッシュはLLM推論のメモリボトルネックであり、最適化が本番サービングの鍵
- PagedAttention、GQA、KV量子化、Prefix Cachingなど複数手法を組み合わせて使用
- モデルアーキテクチャ(GQA/MQA採用有無)とコンテキスト長要件に応じて最適な手法を選択
- 2026年のLLMサービングでは、これらの最適化なしに効率的な推論は困難