- LLMは1トークンずつ自己回帰生成するため、デコード段階はGPUの計算力でなくメモリ帯域幅がボトルネックになる構造的な特性がある
- KVキャッシュ・FlashAttention・PagedAttention(vLLM)は「メモリの無駄をなくす」アプローチ、投機的デコーディングは「並列検証で高速化する」という異なる切り口で推論を最適化する
- vLLMのPagedAttentionはKVキャッシュの無駄を60〜80%から4%未満に削減し、投機的デコーディングは出力品質を保ちながら2〜3倍の高速化を実現する
LLM推論はなぜ遅いのか
ChatGPTなどのLLMを使っていると、回答が一文字ずつ順番に表示されることに気づくでしょう。これは単なる演出ではなく、LLMの根本的な仕組みに起因しています。LLMは「次のトークン(単語や文字の断片)を予測する」を繰り返して文章を生成します。この方式を自己回帰生成と呼び、1000文字の文章を生成するには、1000回の予測ステップが必要です。
推論の処理は大きく2つのフェーズに分かれます。まずプリフィルフェーズでは、ユーザーの入力(プロンプト)をすべて一度に処理します。入力全体が既知なので並列計算が効き、GPUをフルに活用できます。続くデコードフェーズでは、トークンを1つずつ生成します。毎ステップで過去のすべてのトークンの情報を参照しながら計算するため、行列・ベクトル演算になり、GPUの計算能力を持て余してしまいます。
デコードフェーズの速度を左右するのは計算量ではなく、メモリからデータをGPUへ転送する速度(メモリ帯域幅)です。だからこそ「いかにメモリを賢く使うか」が、LLM推論高速化の核心テーマになります。

KVキャッシュとは何か
デコードフェーズの最も基本的な最適化がKVキャッシュ(Key-Value Cache)です。Transformerのアテンション機構では、すべてのトークンに対してKey(キー)とValue(バリュー)という中間値を計算します。デコードフェーズでは、新しいトークンを生成するたびに過去のすべてのトークンのKey・Valueを参照します。毎ステップ同じ値を再計算するのは無駄なので、それをGPUメモリに保存しておく仕組みがKVキャッシュです。
KVキャッシュのサイズは次の式で表せます。
KVキャッシュサイズ = バッチサイズ × シーケンス長 × 2 × レイヤー数 × 隠れ次元 × 精度バイト数具体例として、Llama 2 7B(32レイヤー、隠れ次元4096)をFP16精度でバッチサイズ1、シーケンス長4096で動かすと、KVキャッシュだけで約2GBを消費します。バッチサイズやシーケンス長に比例してメモリが増えるため、大量リクエストを捌くサービングでは深刻なメモリ不足を招きます。KVキャッシュによって再計算コストはなくなりますが、「このキャッシュをどう管理するか」という新たな課題が生まれました。それを解決したのが後述のPagedAttentionです。
FlashAttentionとは何か
KVキャッシュとは別の切り口で、アテンション計算そのものを高速化する技術がFlashAttentionです。標準的なアテンション計算では、クエリ・キー・バリューの行列をHBM(GPU上の高帯域幅メモリ)から読み出し、中間行列(ソフトマックス前のスコア行列など)をHBMに書き戻す操作を繰り返します。このHBMへの読み書き回数が速度の足を引っ張ります。
FlashAttentionは「タイリング」という手法を使い、行列を小さなブロックに分割してSRAM(GPUの高速な低レイテンシメモリ)上で計算を完結させます。中間行列をHBMに書き戻す回数を大幅に削減することで、アテンション計算のメモリI/O量を圧縮します。重要な点は、計算結果は標準アテンションと数学的に完全に同一であることです。既存のモデルの重みを変えることなく導入できるため、vLLMを含む多くのサービングエンジンが採用しています。FlashAttention 2、FlashAttention 3とバージョンが進むにつれ、特にH100/H200 GPU向けの最適化が深まり、長いシーケンスを扱う際の効果がさらに顕著になっています。
vLLMとPagedAttention
従来のKVキャッシュ管理の問題点
KVキャッシュには、メモリ管理上の大きな問題がありました。従来のシステムでは、各リクエストに対してシーケンスの最大長分のメモリをあらかじめ確保します。しかし実際の生成長はリクエストごとに異なるため、大量の未使用メモリが生まれます(内部フラグメンテーション)。また、固定ブロックを連続メモリ上に確保するため、断片的な空き領域が活用できない問題(外部フラグメンテーション)も起きます。これらにより、従来システムではKVキャッシュメモリの60〜80%が無駄になるとされていました。
PagedAttentionの仕組み
2023年にUCバークレーから登場したvLLMは、PagedAttentionという独創的な解法を提案しました。OSの仮想メモリ管理からヒントを得たアプローチです。PagedAttentionはKVキャッシュを固定サイズの「ページ(ブロック)」に分割します。各ブロックは固定数のトークン分のKey・Valueを保持し、ブロック同士はメモリ上で連続している必要がありません。必要なブロックだけを動的に割り当て、不要になったら解放することで、フラグメンテーションをほぼ解消します。vLLMではこの最適化により、KVキャッシュの無駄を4%未満に抑えることに成功しました。

連続バッチングとvLLMの全体像
vLLMはPagedAttentionに加え、連続バッチング(Continuous Batching)も実装しています。従来のバッチ処理では、バッチ内のすべてのリクエストが終了するまで次のリクエストを受け付けられませんでした。連続バッチングでは、あるリクエストの生成が終わり次第、即座に新しいリクエストを同じバッチに追加します。これによりGPU使用率が大幅に向上します。
vLLMはOpenAI API互換のインターフェースを提供するため、既存のアプリケーションからほぼコードを変えずに移行できます。NVIDIA GPU(H100最適化済み)のほかAMD GPU、Google TPU、AWS Inferentiaなど幅広いハードウェアをサポートしており、2025年1月にリリースされたvLLM V1ではコアアーキテクチャの全面再設計により1.7倍の高速化を達成しています。なお、100万トークンという超長文コンテキストでの推論最適化については、DeepSeek V4の100万トークンコンテキスト対応の取り組みも参考になります。長文処理ほどKVキャッシュ管理の効率が推論コストを大きく左右します。
投機的デコーディングとは
ここまでの技術は「メモリを賢く使う」ことで推論を高速化するアプローチでした。投機的デコーディング(Speculative Decoding)は、異なる発想で速度を引き上げます。
ドラフトと検証の2段階
投機的デコーディングでは、小型の「ドラフトモデル」と大型の「ターゲットモデル」の2つを組み合わせて使います。まずドラフトフェーズで、軽量なドラフトモデルが次の5〜8トークンを素早く予測します。Llama 3.1-70Bに対してLlama 3.2-1Bをドラフトとして使う構成が代表例です。続く検証フェーズで、ターゲットモデルがそれら複数のトークン候補を1回の並列フォワードパスで一括検証します。GPUの並列処理能力を活かし、K個のトークンを検証するコストは1個生成するのとほぼ同じです。
確率分布が一致するトークンは採用し、不一致のものは棄却して再サンプリングします。このアルゴリズムにより、出力品質はターゲットモデル単独と数学的に同一であることが保証されます。

実際の高速化効果
ドラフトモデルの承認率(ターゲットが採用する割合)が約60%以上あれば、1回の検証パスで複数トークンを確定でき、全体の処理速度が向上します。実際のベンチマークでは、vLLM上でLlama 3.1-70BとLlama 3.2-1Bの組み合わせが約2.3倍の高速化を達成しています。NVIDIAはH200 GPU上でFP8量子化と組み合わせて最大3.6倍のスループット向上を実証しています。投機的デコーディングはレイテンシ(応答速度)に敏感な用途で特に効果的です。一方、高スループットのバッチ処理ではGPUがすでに計算でフル活用されているため、恩恵は小さくなります。
量子化でさらに効率化
推論高速化のもう1つの柱が量子化です。モデルの重みやアクティベーションの数値精度をFP32/FP16からINT8(8ビット整数)やINT4、FP8へ圧縮します。精度を下げることでGPUメモリ消費量が減り、より大きなバッチを扱えるようになり、スループットが向上します。vLLMはGPTQ・AWQ・FP8などの量子化方式をサポートしており、量子化と投機的デコーディングを組み合わせることで相乗効果が得られます。完全な精度のモデルと比べるとわずかな品質劣化が生じる可能性がある点は、用途に応じて評価が必要です。
主要技術の比較
技術 | 解決する問題 | 高速化の仕組み | 出力品質への影響 |
|---|---|---|---|
KVキャッシュ | デコード時の再計算コスト | Key・Value値を保存して流用 | 変化なし |
FlashAttention | HBMへのI/O回数 | タイリングでSRAM内完結 | 数学的に同一 |
PagedAttention(vLLM) | KVキャッシュのフラグメンテーション | OSページング的な動的ブロック管理 | 変化なし |
投機的デコーディング | 逐次生成の待ち時間 | ドラフト→並列検証で複数トークンを一度に確定 | 数学的に同一 |
量子化 | モデル重みのメモリ使用量 | 重みを低精度に圧縮してメモリと転送量を削減 | わずかな劣化あり |
どの技術を選ぶべきか
これらの技術は排他的なものではなく、組み合わせて使うのが標準的です。自分でLLMをデプロイする場合の指針を示します。
- まずvLLMを選ぶ: PagedAttention・連続バッチング・FlashAttention統合がデフォルトで有効。ほとんどのユースケースでベースラインとして最適
- レイテンシが最優先なら投機的デコーディングを追加: 同一ファミリーの小型ドラフトモデルと組み合わせ、承認率60%以上を目指す
- メモリが不足するなら量子化を検討: GPTQ・AWQはモデル品質とのバランスが良く、実運用で広く採用されている
- NVIDIA GPU特化で最高性能を求めるならTensorRT-LLM: カスタムカーネルによる細かな最適化が可能だが、ハードウェアが限定される
LLMの推論最適化は現在も活発に研究が進む分野です。vLLM V1のアーキテクチャ再設計やEAGLE方式の投機的デコーディングなど、実装レベルの改善が年を追うごとに積み重なっています。基本的な仕組みを理解しておくことで、新しい技術の要点を素早くつかめるようになります。
