AI・機械学習
上級

KVキャッシュ最適化(ケーブイキャッシュサイテキカ)

LLM推論時にTransformerのAttention計算で生成されるKey-Value(KV)ペアをGPUメモリ上に効率的にキャッシュ・管理する技術群で、メモリ使用量とレイテンシの両方を削減する

0 回閲覧
0 いいね

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倍に拡張

選び方・注意点

  1. モデルアーキテクチャの確認: GQA/MQA採用モデルは元々KVキャッシュが小さい。非GQAモデル(GPT-NeoX等)では PagedAttentionやKV量子化の効果が特に大きい
  2. コンテキスト長要件: 128Kトークン対応が必要な場合、Sliding Window は不適。PagedAttention + GQA + KV量子化の組み合わせが推奨
  3. 精度とのトレードオフ: KV量子化(INT4)は一部のタスクで精度低下が顕著。FP8は精度影響が1%未満で実用的
  4. 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サービングでは、これらの最適化なしに効率的な推論は困難