Skip to content
Published on

LLMロングコンテキスト性能とKV Cache最適化完全ガイド:MQAからRing Attentionまで

Authors
  • Name
    Twitter

はじめに

2024年以降、LLMのコンテキストウィンドウは爆発的に拡張されました。GPT-4 Turboの128K、Claude 3の200K、Gemini 1.5 Proの1M+トークンに至るまで、長い文脈を処理する能力はモデルの核心的な競争力となっています。しかし、コンテキストウィンドウを拡大することは単に数字を大きくする問題ではありません。その背後には**KV Cache(Key-Value Cache)**というメモリボトルネックが存在し、これを効率的に管理することが本番デプロイメントの中心的な課題です。

本記事では、KV Cacheの基本原理からメモリ消費量の計算式、そしてMulti-Query Attention(MQA)、Grouped-Query Attention(GQA)、PagedAttention、スライディングウィンドウアテンション、Ring Attentionなどの最新最適化手法を包括的に解説します。さらに、Needle-in-a-Haystackテストによるロングコンテキスト性能評価と、実務でのコスト・性能トレードオフまで掘り下げます。

KV Cacheとは何か

Transformerの自己回帰生成とKV Cache

TransformerベースのLLMはトークンを一つずつ順次生成します(自己回帰方式)。新しいトークンを生成するたびに、それまでの全トークンに対するアテンション計算が必要ですが、毎回最初から再計算すると時間計算量がO(n^2)に急増します。

KV Cacheはこの問題を解決します。以前のトークンのKeyとValueテンソルをキャッシュに保存しておき、新しいトークン生成時に以前のKey/Valueを再計算せずキャッシュから取得し、現在のトークンのQueryとのみアテンション計算を行います。

# 自己回帰生成におけるKV Cacheの動作原理
Step 1: "The"K1, V1を生成しキャッシュに保存
Step 2: "cat"K2, V2を生成 + キャッシュ(K1,V1)とアテンション計算
Step 3: "sat"K3, V3を生成 + キャッシュ(K1,V1,K2,V2)とアテンション計算
Step 4: "on"K4, V4を生成 + キャッシュ(K1..V3)とアテンション計算
...
Step N: "mat"KN, VNを生成 + キャッシュ(K1..V(N-1))とアテンション計算

KV Cacheがなければどうなるか

KV Cacheがなければ、各トークン生成のたびにシーケンス全体のKey、Valueを再計算する必要があります。1000トークンのシーケンスの場合:

  • KV Cache使用時:最後のトークンのみ計算 → O(n)アテンション
  • KV Cache未使用時:毎ステップ全体再計算 → O(n^2)の総計算量

結果として、KV Cacheは推論速度を数十倍向上させますが、その代わりにGPUメモリを大量に消費します。

KV Cacheメモリ消費量分析

メモリ計算式

KV Cacheのメモリ使用量は以下の式で正確に計算できます:

KV Cacheメモリ = 2 × n_layers × d_model × seq_len × batch_size × sizeof(dtype)

各変数の意味:

変数説明例の値
2KeyとValueの2つを保存定数
n_layersTransformerレイヤー数32 (LLaMA-7B), 80 (LLaMA-70B)
d_modelモデル隠れ次元4096 (LLaMA-7B), 8192 (LLaMA-70B)
seq_lenシーケンス長(コンテキストウィンドウ)4096, 128K, 1M
batch_size同時処理バッチサイズ1〜64
sizeof(dtype)データ型サイズ(バイト)2 (FP16), 1 (INT8)

モデル別KV Cacheメモリ例

LLaMA-2 7B(32レイヤー、d_model=4096、FP16基準)で計算してみましょう:

seq_len=4096, batch=1:
2 × 32 × 4096 × 4096 × 1 × 2 bytes = 2 GB

seq_len=128K, batch=1:
2 × 32 × 4096 × 131072 × 1 × 2 bytes = 64 GBGPU 1枚では不可能!

seq_len=128K, batch=8:
2 × 32 × 4096 × 131072 × 8 × 2 bytes = 512 GB ← 大規模クラスタが必要

LLaMA-2 70B(80レイヤー、d_model=8192、FP16基準):

seq_len=4096, batch=1:
2 × 80 × 8192 × 4096 × 1 × 2 bytes = 40 GB

seq_len=128K, batch=1:
2 × 80 × 8192 × 131072 × 1 × 2 bytes = 1.28 TB ← モデル重みとは別!

このように、ロングコンテキストではKV Cacheがモデルの重みよりもはるかに大きなメモリを占有する可能性があり、これが最適化が不可欠な理由です。

KV Cache対モデル重みメモリ比較

項目LLaMA-7B (FP16)LLaMA-70B (FP16)
モデル重み約14 GB約140 GB
KV Cache (4K, batch=1)約2 GB約40 GB
KV Cache (32K, batch=1)約16 GB約320 GB
KV Cache (128K, batch=1)約64 GB約1.28 TB
KV Cache (128K, batch=8)約512 GB約10.24 TB

KV Cache最適化手法

Multi-Query Attention(MQA)

核心アイデア:すべてのアテンションヘッドが同一のKeyとValueを共有し、Queryのみヘッドごとに異なります。

# Standard Multi-Head Attention (MHA)
# 各ヘッドにQ, K, Vが別々に存在
# n_heads = 32の場合、KV Cacheに32セットのK,Vを保存

# Multi-Query Attention (MQA)
# Qは32ヘッド、KとVは1セットのみ
# KV Cacheサイズが1/32に削減!

メモリ削減効果

方式KVヘッド数KV Cacheサイズ(相対値)
MHAn_heads(例:32)1x
MQA11/32x(約97%削減)

利点:KV Cacheメモリの劇的な削減、デコーディング速度向上 欠点:品質低下の可能性(特に複雑な推論タスクにおいて)

適用モデル:PaLM、StarCoder、Falcon

参考論文:Shazeer (2019), "Fast Transformer Decoding: One Write-Head is All You Need"

Grouped-Query Attention(GQA)

核心アイデア:MQAとMHAの中間地点。Queryヘッドをグループに分割し、各グループが1つのKey-Valueヘッドを共有します。

# Grouped-Query Attention (GQA)
# n_heads = 32, n_kv_heads = 8 (4つのQヘッドが1つのKVヘッドを共有)
# KV Cacheサイズが1/4に削減

# GQA-8: 8つのKVグループ → MHA比1/4サイズ
# GQA-4: 4つのKVグループ → MHA比1/8サイズ
# GQA-1: 1つのKVグループ → MQAと同等

メモリ削減と品質のトレードオフ

方式n_kv_headsメモリ削減品質への影響
MHA320%ベースライン
GQA-8875%ほぼなし
GQA-4487.5%最小限
GQA-2293.75%わずか
MQA (GQA-1)196.875%顕著

適用モデル:LLaMA 2 70B (GQA-8)、LLaMA 3、Mistral、Gemma

参考論文:Ainslie et al. (2023), "GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints"

PagedAttention

核心アイデア:OSの仮想メモリページングの概念をKV Cache管理に適用します。KV Cacheを連続メモリではなく、固定サイズのブロック(ページ)で管理します。

従来の方式:
[Request 1 KV Cache(連続割り当て、最大長を予約)]
[         無駄な空間                              ]
[Request 2 KV Cache(連続割り当て、最大長を予約)]
[         無駄な空間                              ]

PagedAttention:
[Page 1: Req1] [Page 2: Req2] [Page 3: Req1] [Page 4: Req2]
[Page 5: Req1] [Page 6: Req3] [Page 7: Req2] [Page 8: Req3]
→ ブロック単位で必要な分だけ割り当て、内部フラグメンテーションを最小化

主な利点

  • メモリ無駄の削減:従来方式比60〜80%のメモリ効率向上
  • より大きなバッチサイズ:同じGPUメモリで2〜4倍のリクエストを同時処理
  • Copy-on-Write:同一プロンプトのリクエスト間でKV Cacheの共有が可能

適用:vLLM、SGLang、TensorRT-LLM

参考論文:Kwon et al. (2023), "Efficient Memory Management for Large Language Model Serving with PagedAttention"

KV Cache量子化(Quantization)

KV CacheをFP16からINT8またはINT4に量子化すると、メモリを即座に50〜75%削減できます。

# KV Cache量子化の例(概念コード)
# FP16 KV Cache: 各値2バイト
# INT8 KV Cache: 各値1バイト(50%削減)
# INT4 KV Cache: 各値0.5バイト(75%削減)

# 量子化適用時のLLaMA-7B 128Kコンテキスト:
# FP16: 64 GB → INT8: 32 GB → INT4: 16 GB

主な手法

手法説明品質への影響
Per-token INT8トークンごとにスケールファクターを維持最小限
Per-channel INT8チャネルごとのスケールファクターほぼなし
KV Cache INT44ビット量子化タスクに依存
KIVIKeyとValueに異なるビット幅を適用最小限

備考:KeyテンソルはValueよりも量子化に敏感な傾向があるため、KeyにINT8、ValueにINT4を適用する非対称量子化(KIVIなど)が効果的です。

スライディングウィンドウアテンション(Sliding Window Attention)

核心アイデア:シーケンス全体ではなく、固定サイズのウィンドウ内のトークンのみにアテンションを計算します。

フルアテンション(Full Attention):
Token 100がToken 199すべてにアテンション → KV Cache 100個を維持

スライディングウィンドウ(window_size=32):
Token 100がToken 6999にのみアテンション → KV Cache 32個のみ維持
→ メモリ O(n)O(window_size)に削減!

利点:KV Cacheサイズがシーケンス長に関係なく固定 欠点:ウィンドウ外の遠いトークンの情報に直接アクセス不可(レイヤースタッキングによる間接伝達)

適用モデル:Mistral 7B (window_size=4096)、Longformer(ローカル+グローバルのハイブリッド)

Ring Attentionとシーケンス並列化

核心アイデア:シーケンスを複数のデバイスに分割し、Key-Valueブロックをリング形状で巡回させながらアテンションを計算します。

Device 0: [Seq chunk 0] ←→ KVブロックが巡回
Device 1: [Seq chunk 1] ←→ KVブロックが巡回
Device 2: [Seq chunk 2] ←→ KVブロックが巡回
Device 3: [Seq chunk 3] ←→ KVブロックが巡回

→ 各デバイスは自身のシーケンスチャンクに対してアテンション計算
KVブロックがリング形状で巡回し、全シーケンスアテンションを完成
→ デバイス数に比例してコンテキスト長を拡張可能

主な利点

  • 単一GPUメモリの限界を超えた超長文コンテキスト処理
  • N台のデバイスでN倍の長さのシーケンスを処理可能
  • 通信コストを計算とオーバーラップさせて効率を最大化

適用事例:Googleの内部モデル学習、学術研究段階

参考論文:Liu et al. (2023), "Ring Attention with Blockwise Transformers for Near-Infinite Context"

モデル別コンテキストウィンドウ比較

主要LLMコンテキストウィンドウサイズ(2026年3月時点)

モデルコンテキストウィンドウKV Cache最適化リリース時期
GPT-4 Turbo128KMQA + 内部最適化2023.11
GPT-4o128KMQA + 内部最適化2024.05
Claude 3 Opus/Sonnet200K非公開2024.03
Claude 3.5 Sonnet200K非公開2024.06
Gemini 1.5 Pro1M+(最大2M)Ring Attention系と推定2024.02
Gemini 2.01M+内部最適化2024.12
LLaMA 3.1 405B128KGQA-82024.07
Mistral Large128KGQA + SWA2024.02
Qwen 2.5128KGQA2024.09
Yi-Lightning200K+GQA + 内部最適化2024.05
DeepSeek-V3128KMLA (Multi-head Latent Attention)2024.12
Jamba 1.5256KSSM-Attentionハイブリッド2024.08

コンテキストウィンドウ拡張タイムライン

2020: GPT-3          2Kトークン
2022: GPT-3.5        4Kトークン
2023.03: GPT-4       8K / 32Kトークン
2023.07: Claude 2    100Kトークン
2023.11: GPT-4 Turbo 128Kトークン
2024.02: Gemini 1.5  1Mトークン
2024.03: Claude 3    200Kトークン
2024.07: LLaMA 3.1   128Kトークン
2024.12: Gemini 2.0  1M+トークン
2025+: 各種モデル    128K〜2M+トークン

ロングコンテキスト性能ベンチマーク

Needle-in-a-Haystack(NIAH)テスト

Needle-in-a-Haystackは、長い文脈の中に隠された特定の情報をモデルがどれだけ正確に見つけ出せるかを評価するベンチマークです。

テスト方法

  1. 長いテキスト(Haystack)を準備する(例:128Kトークンのエッセイ)
  2. 特定のファクト(Needle)をテキストの特定の位置に挿入する
  3. モデルにそのファクトに関する質問をする
  4. 挿入位置(先頭/中間/末尾)と全体長を変化させながら精度を測定する

主な発見事項

観察説明
"Lost in the Middle"現象シーケンス中間に挿入された情報の検索精度が先頭/末尾より低い
長さと精度の逆相関コンテキストが長くなるほど全体的な検索精度が低下
モデル間の差異Claude 3、Gemini 1.5 ProはNIAHでほぼ100%の精度を維持
マルチニードル検索複数の情報を同時に検索する必要がある場合、性能低下がより顕著

長さ別性能低下パターン

精度(%)
100 |████████████████████░░░░░░░░░░░░░░
 90 |████████████████████████████░░░░░░░
 80 |████████████████████████████████░░░
 70 |████████████████████████████████░░░
 60 |████████████████████████████████████
    +---+----+-----+------+------+-----+
    4K  16K   32K   64K   128K   256K
                コンテキスト長

    — 最高性能モデル(Claude 3、Gemini 1.5 Pro)
    --- 中間性能モデル
    ··· ロングコンテキスト非対応モデル

実務でのロングコンテキスト活用パターン

活用事例推奨コンテキスト長考慮事項
コードレビュー(単一ファイル)8〜32K大半のモデルで十分
コードレビュー(リポジトリ全体)64〜200KRAGとの併用を推奨
ドキュメント要約32〜128K品質低下のモニタリングが必要
会話履歴分析16〜64K要約ベースの圧縮を併用
法律文書分析128K〜1M最長コンテキストモデルが必要
コードベース全体分析200K〜1M+費用対効果の検討が必須

コスト・性能トレードオフ

ロングコンテキストのコストへの影響

コンテキスト長の増加に伴うコスト増加は線形ではなく超線形(super-linear)です:

項目4Kコンテキスト128Kコンテキスト倍率
KV Cacheメモリ1x32x32倍
Prefillレイテンシ約100ms約3〜5s30〜50倍
APIコスト(入力トークン)$0.01$0.3232倍
GPUメモリ占有低い非常に高い-
同時処理可能数高い非常に低い-

最適化手法の組み合わせによるメモリ削減

基準: LLaMA-70B, 128Kコンテキスト, batch=1, FP16
ベースKV Cache:      1,280 GB

+ GQA-8適用:           320 GB (75%削減)
+ INT8量子化:          160 GB (87.5%削減)
+ PagedAttention:128 GB (90%削減、実効ベース)
+ INT4量子化:           80 GB (93.75%削減)
+ スライディングウィンドウ: 限定的(タスク依存)

最新の研究動向

Multi-head Latent Attention(MLA)

DeepSeek-V2で導入されたMLAは、KV Cacheを低次元潜在空間に圧縮する手法です。KeyとValueを結合された潜在ベクトルに圧縮保存し、推論時に再構築します。

従来のGQA: K, Vをグループ化して保存
MLA: K+Vを結合された低次元潜在ベクトルに圧縮
GQA比で追加5070%のメモリ削減が可能

StreamingLLM

KV Cacheを完全に破棄せずに無限ストリーミングを可能にします。「Attention Sink」現象を利用して、最初の数トークンのKV Cache+最近のウィンドウのみを維持します。

# StreamingLLMのKV Cache管理(概念的)
# 全シーケンス: [t1, t2, t3, ..., t100, ..., t10000]
# 実際に維持: [t1, t2, t3, t4] + [t9997, t9998, t9999, t10000]
#             ↑ Attention Sink    ↑ スライディングウィンドウ

Infini-Attention

Google Researchが提案した方式で、圧縮メモリとローカルアテンションを組み合わせます。過去の情報を圧縮メモリに累積保存しながら、ローカルアテンションで最近のコンテキストを処理します。

実務適用ガイド

シナリオ別推奨最適化戦略

単一GPU、短いコンテキスト(4〜8K)

  • GQA適用モデルを使用
  • FP16 KV Cacheで十分
  • vLLM + PagedAttentionデフォルト設定

単一GPU、中程度のコンテキスト(32〜64K)

  • GQA + KV Cache INT8量子化
  • PagedAttentionでメモリ効率化
  • gpu-memory-utilization=0.9設定

マルチGPU、長いコンテキスト(128K+)

  • GQA + KV Cache INT4/INT8量子化
  • テンソル並列化 + PagedAttention
  • Ring Attention(研究/実験段階)

超長文コンテキスト(1M+)

  • Gemini APIなどマネージドサービスを活用
  • RAG + ロングコンテキストのハイブリッドアプローチ
  • 費用対効果を綿密に検討

KV Cacheモニタリングチェックリスト

# GPUメモリ使用量のリアルタイムモニタリング
watch -n 1 nvidia-smi

# vLLMでのKV Cache使用率確認
# vLLMサーバーの/metricsエンドポイントで確認
curl http://localhost:8000/metrics | grep kv_cache

# 主要モニタリング指標
# - gpu_cache_usage_perc: KV Cache GPUメモリ使用率
# - num_running_requests: 同時処理中のリクエスト数
# - prompt_tokens_total: 処理されたプロンプトトークン数

FAQ

KV CacheがなければLLMは動作しませんか?

動作はしますが、実用的ではありません。KV Cacheがなければ、各トークン生成のたびにシーケンス全体を再計算する必要があり、1000トークンの生成でKV Cache使用時と比べて数十〜数百倍遅くなります。研究用の小規模モデルでない限り、本番環境では常にKV Cacheを使用します。

GQAとMQA、どちらを選ぶべきですか?

2024年以降にリリースされた主要モデルのほとんどはGQAを採用しています。GQAはMQAの極端なメモリ削減とMHAの品質の間で良いバランスを提供します。実務的には、すでにGQAが適用されているモデル(LLaMA 3、Mistralなど)を使用すれば問題ありません。

128Kコンテキストを使えば常により良い結果が得られますか?

いいえ。Needle-in-a-Haystackテストで示されるように、コンテキストが長くなると「Lost in the Middle」現象により、中間部分の情報検索性能が低下する可能性があります。また、コストが線形的に増加し、Prefillレイテンシも大幅に増加します。必要な分だけコンテキストを使用する方が効率的です。

PagedAttentionは推論品質に影響しますか?

いいえ。PagedAttentionはメモリ管理方式のみを変更するもので、アテンション計算そのものは変更しません。数学的に同一の結果を出力しながら、メモリ効率のみを改善します。

スライディングウィンドウアテンション使用時、遠い過去の情報を参照できますか?

直接的には参照できませんが、レイヤー数が十分であれば間接的に伝達されます。例えば、ウィンドウサイズが4096で32レイヤーの場合、理論上は4096 × 32 = 131,072トークン範囲の情報が間接的に伝達されます。ただし、実際には情報がレイヤーを通過するたびに希釈されるため、遠い過去の情報の正確な検索には限界があります。

KV Cache量子化とモデル重み量子化は同じですか?

異なります。モデル重み量子化(GPTQ、AWQ、GGUFなど)は学習済みパラメータを圧縮するもので、KV Cache量子化は推論時に動的に生成されるキャッシュデータを圧縮するものです。両方を同時に適用でき、その場合メモリ削減効果は累積されます。

参考資料

  • Shazeer, N. (2019). "Fast Transformer Decoding: One Write-Head is All You Need." arXiv:1911.02150
  • Ainslie, J. et al. (2023). "GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints." arXiv:2305.13245
  • Kwon, W. et al. (2023). "Efficient Memory Management for Large Language Model Serving with PagedAttention." arXiv:2309.06180
  • Liu, H. et al. (2023). "Ring Attention with Blockwise Transformers for Near-Infinite Context." arXiv:2310.01889
  • Xiao, G. et al. (2023). "Efficient Streaming Language Models with Attention Sinks." arXiv:2309.17453
  • Liu, Z. et al. (2024). "KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache." arXiv:2402.02750
  • DeepSeek-AI (2024). "DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model." arXiv:2405.04434
  • Munkhdalai, T. et al. (2024). "Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention." arXiv:2404.07143
  • Nelson, G. et al. (2024). "Needle In A Haystack - Pressure Testing LLMs." GitHub Repository
  • vLLM Project. "vLLM: Easy, Fast, and Cheap LLM Serving." GitHub Repository

まとめ

KV Cache最適化は、LLMのロングコンテキスト能力を実務で活用するための核心技術です。単一の手法だけでは限界があり、GQA + PagedAttention + KV Cache量子化の組み合わせが現在最も実用的なアプローチです。

要点まとめ:

  1. KV Cacheは推論速度の核心ですが、ロングコンテキストではメモリボトルネックの主因です。
  2. GQAが現在の業界標準です。MHAの品質とMQAの効率性の間で最適なバランスを提供します。
  3. PagedAttentionは必須です。vLLM、SGLangなどを通じて即座に適用可能です。
  4. KV Cache量子化は追加のメモリ削減のための効果的な手段です。
  5. ロングコンテキストが常に正解ではありません。コスト、レイテンシ、精度を総合的に考慮する必要があります。
  6. RAGとロングコンテキストのハイブリッドアプローチが、大半の実務シナリオで最適な選択です。

今後、MLA、Infini-Attentionなどの新しいアプローチが実用化されるにつれ、ロングコンテキストのコスト・性能トレードオフは継続的に改善されていくでしょう。技術動向の継続的な把握とベンチマーキングが重要です。