AI・機械学習
中級

KVキャッシュ(ケーブイキャッシュ)

Transformerモデルの推論時に過去のKey-Valueペアをメモリに保持し、同じ計算の繰り返しを回避して生成速度を高速化するメカニズム。

0 回閲覧
0 いいね

KVキャッシュとは

KVキャッシュ(Key-Value Cache)は、Transformerベースの大規模言語モデル(LLM)が自己回帰的にトークンを生成する際、過去に計算したAttentionのKeyベクトルとValueベクトルをメモリ上に保持する仕組みである。新しいトークンを生成するたびに過去の全トークンのK/Vを再計算する必要がなくなり、推論速度が劇的に向上する。

KVキャッシュの動作原理

Transformerの自己回帰生成では、各ステップで現在のトークンのQueryと過去全トークンのKey/Valueを使ってAttentionスコアを計算する。KVキャッシュがない場合、トークン数Nに対して計算量はO(N²)で増大するが、KVキャッシュを使えばステップあたりの新規計算はO(N)に抑えられる。

具体的な動作フロー:

  1. Prefill Phase(プリフィル段階): 入力プロンプト全体を一括処理し、全レイヤーのK/Vテンソルを計算してキャッシュに格納
  2. Decode Phase(デコード段階): 新トークンを1つずつ生成し、そのトークンのK/Vのみを既存キャッシュに追加
  3. Attention計算: 現在のQueryと蓄積されたK/V全体でAttentionを計算
  4. 次トークン予測: Attention出力からロジットを計算し、サンプリング戦略に従って次のトークンを選択

メモリ消費量の計算

KVキャッシュのメモリ使用量は以下の式で算出できる:

メモリ(bytes) = 2 × レイヤー数 × ヘッド数 × ヘッド次元 × シーケンス長 × バッチサイズ × データ型サイズ
モデルレイヤー数ヘッド数ヘッド次元最大長FP16 KVキャッシュ
Llama 3.1 8B328 (GQA)128128K約4GB/リクエスト
Llama 3.1 70B808 (GQA)128128K約10GB/リクエスト
GPT-4 (推定)12096 (MHA)128128K約150GB/リクエスト
Mistral 7B328 (GQA)12832K約1GB/リクエスト
Qwen2.5 72B808 (GQA)128128K約10GB/リクエスト

Llama 3.1 8Bでも128Kコンテキストを満杯にすると約4GBのKVキャッシュが必要となり、モデルパラメータ自体(FP16で約16GB)に匹敵する規模になる。バッチサイズ8で同時処理すると32GBを超え、A100 80GBでも余裕がなくなる。

KVキャッシュの課題

メモリボトルネック

2026年時点でLLMのコンテキスト長は128K〜1Mトークンに拡張されており、KVキャッシュのメモリ消費が推論コストの最大要因となっている。NVIDIA H100(80GB HBM3)でもLlama 3.1 70Bの128Kコンテキストを8バッチ同時処理するとメモリ不足に陥る。

レイテンシへの影響

KVキャッシュが大きくなるとメモリ帯域幅がボトルネックになる。Attention計算時にキャッシュ全体をGPUメモリから読み出す必要があり、HBM3の帯域幅3.35TB/sでも長コンテキストでは数ミリ秒のレイテンシが発生する。

フラグメンテーション

動的なリクエスト処理では、各リクエストのシーケンス長が異なるためメモリが断片化する。最大長を事前確保する方式では80〜90%のメモリが無駄になるケースがある。

主要な最適化技術

技術カテゴリ効果代表的実装
Paged Attentionメモリ管理メモリ利用率95%以上vLLM, SGLang
GQA/MQAアーキテクチャKVサイズ1/4〜1/8Llama 3, Mistral
KV圧縮 (INT4/INT8)量子化メモリ50〜75%削減KIVI, Atom
トークン刈り込みエビクション動的メモリ削減H2O, SnapKV
Prefix Caching再利用プリフィル時間90%削減SGLang, vLLM

関連技術との位置づけ

KVキャッシュ最適化は、LLM推論最適化スタック全体の一部である:

  • モデルレベル: GQA、MQA、Multi-Latent Attention(DeepSeek-V3)
  • システムレベル: Paged Attention、Prefix Caching、Continuous Batching
  • ハードウェアレベル: FlashAttention、HBM最適化
  • 量子化レベル: KV Cache量子化(INT4/INT8)、混合精度

よくある質問(FAQ)

Q1: KVキャッシュはなぜGPUメモリに保持するのですか?CPUメモリではダメですか? A: Attention計算はGPU上で実行されるため、KVキャッシュもGPUメモリ(HBM)に配置するのが最速である。CPUメモリに退避(オフロード)する手法も存在するが、PCIe 5.0の帯域幅(64GB/s)はHBM3(3.35TB/s)の約1/50であり、レイテンシが大幅に増加する。FlexGenなどのオフロードフレームワークはスループット重視のバッチ処理向けに使われる。

Q2: GQAとMQAはKVキャッシュにどう影響しますか? A: Multi-Head Attention(MHA)では各Attentionヘッドが独自のK/Vを持つが、Grouped Query Attention(GQA)では複数のQueryヘッドが1組のK/Vを共有する。Llama 3.1 8Bは32 Queryヘッドに対し8 KVヘッドで、KVキャッシュサイズはMHA比で1/4になる。Multi-Query Attention(MQA)はさらに全ヘッドで1組のK/Vを共有し、最大1/32まで削減できるが品質低下リスクがある。

Q3: KVキャッシュの最適化なしでLLMを本番運用できますか? A: 短いコンテキスト(4K以下)かつ低バッチサイズなら可能だが、128Kコンテキストや高スループット環境ではKVキャッシュ最適化なしでは実用的なコストで運用できない。vLLMのPaged Attentionだけでもスループットが2〜4倍向上する実測値が報告されている。

まとめ

  • KVキャッシュはTransformerの自己回帰推論を効率化する核心技術
  • コンテキスト長の拡大に伴い、メモリ消費が推論コストの最大要因に
  • GQA/MQA、Paged Attention、KV量子化、エビクション等の多層的な最適化が必須
  • vLLM、SGLang、TensorRT-LLMなどの推論フレームワークが主要最適化を統合提供
  • 2026年時点でMulti-Latent Attention(DeepSeek-V3)やKVキャッシュ蒸留など次世代手法も登場