KVキャッシュとは?LLM推論を高速化する仕組みとメモリ削減・実装判断を実装者向けに解説【2026年版】
KVキャッシュ(KV Cache)は、Transformer系のLLMがテキストを1トークンずつ生成する際に、過去のトークンから計算したAttentionのKey・Valueをメモリに保存し、次のトークン生成でそのまま再利用する内部機構です。これがないと、モデルは新しいトークンを出すたびに全文脈のKey・Valueを一から計算し直すことになり、生成が長くなるほど処理が重くなります。半面、KVキャッシュはコンテキスト長に比例して膨らみ、GPUのVRAMを圧迫する主因でもある——ここが表裏の関係です。この記事では、KVキャッシュが自己回帰生成のどこで効くのかという仕組みから、消費メモリの概算の立て方、GQA・MQA・PagedAttention・量子化による削減手法、API層のプロンプトキャッシュとの違い、そして推論基盤を設計するときの採用・見送りの判断基準までを、実際にLLM推論を実装する解像度で整理します。
目次
まとめ:KVキャッシュはK・Vの再利用でLLMの逐次生成を高速化する内部機構
KVキャッシュは、Transformerの自己注意で使うKey・Valueを一度計算したらメモリに置き、後続のトークン生成で使い回す仕組みです。これによって、生成のたびに過去全文脈を計算し直す無駄が消え、出力が長い応答ほど高速化の効き目が大きくなります。生成速度を支える土台であり、現在のLLM推論エンジンはほぼ例外なくこの機構を前提に組まれています。
裏返しの課題がメモリです。KVキャッシュのサイズはコンテキスト長・バッチ数・モデルの層数に正比例して増え、長文処理や多重リクエストではVRAMを食い尽くして同時処理数を下げ、レイテンシとコストを押し上げます。だからこそ実務では、キャッシュを消すのではなく「いかに小さく持つか」が設計の焦点になります。ヘッドを共有するGQA・MQA、断片化を防ぐPagedAttention、精度を落として容量を削る量子化が主な打ち手です。長い入出力を多重で捌く用途ほどこれらの削減策が効き、短い単発処理では素の実装で十分——この見極めが推論基盤のコストを大きく左右します。
KVキャッシュの定義と自己回帰生成で計算結果を再利用する役割
KVキャッシュを理解する入口は、LLMが文章を「まとめて」ではなく「1トークンずつ」作っているという生成の性質です。ここに再利用の余地が生まれます。
自己回帰生成が1トークンずつ過去の全文脈を再参照する処理構造
GPTに代表されるデコーダ型のLLMは、次の1トークンを予測しては出力に付け足す、という動作を繰り返して文章を作ります。これが自己回帰生成です。各ステップでは、それまでに並んだ全トークンを文脈として見て次を決めるため、素朴に実装すると新しいトークンを1つ足すたびに「先頭から現在まで」の計算をやり直すことになります。生成の後半になるほど参照する文脈が伸び、1トークンあたりの計算量が膨らんでいく構造です。LLMそのものの仕組みは大規模言語モデルの解説で全体像を押さえておくと、この逐次生成の位置づけがつかみやすくなります。
計算済みのKey・Valueをメモリへ保存して再計算を省く仕組み
自己注意では、各トークンをQuery・Key・Valueという3つのベクトルに変換し、Queryと過去のKeyの類似度で重みを作ってValueを混ぜ合わせます。ここで効くのが、過去トークンのKeyとValueは一度計算すれば以降のステップでも変わらない、という点です。KVキャッシュは、計算済みのKey・Valueをメモリに保存しておき、次のステップでは新しく増えた1トークン分だけKey・Valueを計算してキャッシュに追記します。結果として各ステップの計算は「全文脈」から「新規1トークン+保存済みキャッシュの参照」に縮み、これが生成全体の速度を左右する肝です。Attentionそのものの計算過程はTransformerと自己注意の仕組みの解説と合わせて追うと、どの中間結果を保存しているのかが具体的に見えてきます。
KVキャッシュがVRAMを圧迫する仕組みとメモリ消費量の見積もり
KVキャッシュは速度を稼ぐ代わりにメモリを消費します。どれだけ食うのかを式で見積もれると、GPU選定やバッチ設計の見通しが立ちます。
KVキャッシュのサイズがコンテキスト長に正比例して増える理由
キャッシュにはトークンごとのKeyとValueが積み上がるため、そのサイズは扱うトークン数、すなわちコンテキスト長に正比例して伸びます。入力プロンプトが長いほど、そして生成する出力が長いほど、キャッシュは一方向に膨らむ一方です。さらに複数リクエストを同時に処理するときは、リクエストごとに別々のキャッシュを持つため、バッチ数の分だけメモリ消費が掛け算で膨らみます。長文を多重で捌く用途では、モデル本体の重みよりもKVキャッシュがVRAMの主役になっていくのが実態です。
KVキャッシュの消費量を左右する層数・ヘッド数・精度と概算式
消費量の概算は、次の掛け算で見積もれます。KVキャッシュ量 = 2(KとVの2種)× 層数 × Key/Valueの次元数 × トークン数 × バッチ数 × 1要素のバイト数、という形です。たとえば32層・隠れ次元4,096・FP16(1要素2バイト)のモデルなら、1トークンあたり 2×32×4,096×2 = 約52万バイト、およそ0.5MBを消費します。4,096トークンの文脈を1本持つだけで約2GB、これを同時8本走らせれば16GBに達し、モデル重みとは別枠でVRAMを奪う計算です。
| 要素 | 消費量への効き方 |
|---|---|
| コンテキスト長 | 正比例で増加 |
| バッチ数 | 本数分だけ掛け算 |
| 層数・ヘッド数 | モデル構造で固定 |
| 数値精度 | FP16→FP8で半減 |
式のうちモデル側で動かせないのは層数とヘッド数です。逆に、精度とヘッドの持ち方は後述の削減手法で圧縮でき、実務ではここを詰めます。
KVキャッシュのメモリ圧迫が同時処理数の低下とコスト増を招く影響
VRAMをKVキャッシュが埋めると、同時に処理できるリクエスト数(バッチサイズ)が頭打ちになります。バッチが伸ばせなければGPU1枚あたりの処理本数が減り、同じ負荷をさばくのに必要なGPU台数が増え、そのままインフラ費に跳ね返る構図です。加えて、キャッシュの読み書きはメモリ帯域を消費するため、長文脈では計算そのものより帯域がボトルネックになり、1トークンあたりの生成が遅くなります。速度・スループット・コストの3つが、いずれもKVキャッシュのメモリの使い方に握られているわけです。
KVキャッシュのメモリを削減するGQA・PagedAttention・量子化の手法
KVキャッシュの削減は、大きく「持つ量を減らす」「置き方を工夫する」「精度を落とす」の3方向に分かれます。それぞれ効き所と副作用が違います。
GQA・MQAでKey・Valueのヘッドを共有してキャッシュを削減
通常の自己注意(MHA)は、Queryと同じ数だけKey・Valueのヘッドを持ちます。ここを削るのがMQA(Multi-Query Attention)とGQA(Grouped-Query Attention)です。MQAはKey・Valueを1組に絞って全Queryヘッドで共有し、キャッシュ量を大幅に減らしますが、表現力が落ちて品質が下がりやすい弱点があります。GQAはその中間で、Queryヘッドをいくつかのグループに分け、グループごとに1組のKey・Valueを共有する方式です。品質をほぼ保ったままキャッシュを数分の1に減らせるため、Llama系やMistralなどここ数年の主要モデルはGQAを採る例が目立ちます。
| 方式 | K/Vヘッド | キャッシュ量 | 品質への影響 |
|---|---|---|---|
| MHA | Queryと同数 | 最も大きい | 基準 |
| GQA | グループ単位で共有 | 中間 | 基準にほぼ並ぶ |
| MQA | 1組を全共有 | 最も小さい | 低下しやすい |
この方式はモデルの構造そのものに関わるため、学習時に決まります。推論側で後から選べる打ち手ではなく、モデル選定の段階でGQA採用かどうかを確認する対象です。
PagedAttentionがKVを仮想メモリ方式で断片化なく管理する方法
削減とは別に、キャッシュの「置き方」でメモリ効率を上げるのがPagedAttentionです。従来はリクエストごとに連続したメモリ領域を確保していたため、確保しすぎた余りや解放後の隙間が断片化し、実際には空いているのに使えない領域が生まれていました。PagedAttentionは、OSの仮想メモリのようにKVキャッシュを小さなページ単位で管理し、必要な分だけ非連続に割り当てます。これで断片化による無駄がほぼ消え、同じVRAMでより多くのリクエストを同居させられる仕組みです。推論エンジンのvLLM(2026年時点で1.x系)がこの方式を実装し、連続バッチングと組み合わせてスループットを引き上げる構成が広く使われています。
KVキャッシュ量子化でFP16をFP8・FP4へ下げVRAMを節約する手法
3つめの打ち手が、キャッシュを保存する数値の精度を落とす量子化です。KVキャッシュを既定のFP16から、FP8やFP4といった低精度形式で持てば、その分だけVRAMとメモリ帯域を直接削れます。FP8ならおおむね半分、FP4なら4分の1が目安です。精度を落とすと生成品質への影響が心配になりますが、NVIDIA Blackwell世代のFP4のように、条件次第でFP8に迫る品質を保てるとする報告もあり、Attentionの一部だけ高精度に残すハイブリッド運用で品質と容量を両立させる設計が進んでいます。VRAMが限られるローカル環境での長文推論では、この量子化がとりわけ効く場面です。手元GPUでモデルを回す前提はローカルLLMの解説や、小さいモデルでメモリを抑える選択肢としてSLM(小規模言語モデル)の解説も合わせて見ると、機種とモデルの落とし所を決めやすくなります。
KVキャッシュとプロンプトキャッシュの違いを推論階層で整理する観点
名前が似ているために混同されがちなのがプロンプトキャッシュです。両者は「どの階層で何を再利用するか」がまったく違います。
推論内部のKVキャッシュとAPI層のプロンプトキャッシュの階層差
KVキャッシュは推論エンジンの内部機構で、1回の生成セッションの中でAttentionのKey・Valueを再利用し、逐次生成を速くするものです。生存期間はそのリクエストの生成中に限られ、開発者が直接触るものではありません。対してプロンプトキャッシュは、API・アプリケーション層の機能で、複数リクエストにまたがって共通するプロンプト前方部分の計算結果をサーバ側に保持し、同じ前置きを何度も送るときの入力トークン料金と初回応答の遅延を削ります。技術的にはプロンプトキャッシュも内部でKVの再利用を土台にしていますが、開発者から見た使いどころは別物です。API層でのコスト削減の具体はプロンプトキャッシュの仕組みと主要APIの解説で扱っており、本記事の推論内部の話と役割分担しています。
KVとプロンプトの2キャッシュの管理主体・生存期間・削減対象の比較
2つのキャッシュを、実装で意識すべき軸で並べると棲み分けがはっきりします。
| 観点 | KVキャッシュ | プロンプトキャッシュ |
|---|---|---|
| 階層 | 推論エンジン内部 | API・アプリ層 |
| 管理主体 | 推論エンジン | 開発者が明示指定 |
| 生存期間 | 生成セッション内 | 数分など明示的 |
| 主な削減対象 | 逐次生成の計算量 | 入力再送のコスト |
| 効く場面 | 長い出力の生成 | 同一前置きの反復 |
両者は競合せず、重ねて効きます。長い応答を速く返すのがKVキャッシュ、同じシステムプロンプトを何度も送る費用を抑えるのがプロンプトキャッシュ、と役割で分けて設計するのが実務の筋です。
KVキャッシュを前提にLLM推論基盤を設計する実装判断の基準
ここまでを踏まえ、どこまで削減策に手を入れるかを言い切ります。原則は「長文脈・多重リクエストの用途では削減策を積極採用し、短い単発処理では素の実装で止める」です。
KVキャッシュ削減策を採用すべき長文脈・多重リクエストの条件
削減策が投資に見合うのは、KVキャッシュがVRAMの支配的な消費者になる用途です。具体的には、長い文書を丸ごと入れるRAGや要約、数千トークン規模の出力を返す生成、そして多数のユーザーを同時にさばくチャットサービスが典型で、いずれもキャッシュがバッチ数を頭打ちにします。こうした基盤では、まずGQA採用モデルを選び、次にPagedAttention対応の推論エンジンで断片化を潰し、それでもVRAMが足りなければKVキャッシュ量子化を重ねる、という順で効かせるのが費用対効果の高い手順です。次の順序で詰めると設計が破綻しにくくなります。
- 想定する最大コンテキスト長と同時リクエスト数から必要キャッシュ量を概算する
- GQA採用モデルを優先し、モデル構造の段階でキャッシュ量を抑える
- PagedAttention対応エンジンで断片化を除き、実効バッチ数を上げる
- VRAMがなお不足する場合にKVキャッシュ量子化で精度と容量を釣り合わせる
削減策が過剰になる場面とLLM推論基盤の設計を外部に相談する判断
逆に、削減策を持ち込むべきでない場面もはっきりしています。入力も出力も短い単発の分類・抽出タスクや、同時リクエストが少ない社内向けツールでは、KVキャッシュがVRAMを圧迫する前に処理が終わるため、量子化で品質を犠牲にする必要はありません。まず素の実装で回し、レイテンシやVRAMが実測で問題になってから削減策を足すのが順序です。判断が難しいのは、PoCで動いた後に本番の同時接続数・コンテキスト長・コスト目標をどう満たすかという段階で、モデル選定・GPU構成・量子化の可否が絡み合います。自社にLLM推論基盤の設計・運用の知見が薄い場合は、AIエンジン開発の支援のように、想定負荷からVRAMとGPU台数を逆算し、どこまで削減策を入れるかを棚卸しするところから入ると、過剰な量子化やGPUの過剰調達を避ける近道です。何を成果指標に置き、速度とコストと品質のどれを優先するかを外部の視点で詰めるだけでも、基盤設計の遠回りを減らせます。
KVキャッシュの実装と推論高速化の検討でよく挙がるよくある質問
KVキャッシュを実装・運用する現場で、よく挙がる疑問に答えます。
KVキャッシュとは何ですか?
KVキャッシュは、Transformer系のLLMが自己回帰的にテキストを生成する際、過去トークンから計算したAttentionのKey・Valueをメモリに保存し、次のトークン生成で再利用する内部機構です。これによって毎ステップで全文脈を計算し直す無駄が消え、生成が高速化します。現在のLLM推論エンジンはほぼ標準でこの仕組みを備えています。
KVキャッシュとプロンプトキャッシュの違いは何ですか?
KVキャッシュは推論エンジン内部で、1回の生成中にKey・Valueを再利用して逐次生成を速くする機構です。プロンプトキャッシュはAPI・アプリ層の機能で、複数リクエストにまたがる共通プロンプトの計算結果を保持し、入力トークン料金と初回遅延を削ります。前者は生成速度、後者は再送コストと、効く階層と目的が異なります。
KVキャッシュはどれくらいメモリを消費しますか?
消費量は 2×層数×Key/Value次元×トークン数×バッチ数×要素バイト数で概算できます。32層・隠れ次元4,096・FP16なら1トークンあたり約0.5MBで、4,096トークンの文脈1本で約2GBに達する計算です。コンテキスト長とバッチ数に正比例して増えるため、長文・多重処理ではモデル重みを超える主要な消費源になります。
KVキャッシュを無効にすると何が起きますか?
KVキャッシュを使わない場合、モデルは各生成ステップで過去の全トークンのKey・Valueを毎回計算し直します。VRAM消費は抑えられますが、生成が進むほど1トークンあたりの計算量が増え、出力が長くなるほど速度が急激に落ちます。実用的な速度を得るには、メモリを削る方向で対処し、キャッシュ自体は残す設計が基本です。
ローカルLLMでKVキャッシュのメモリを抑えるには?
限られたVRAMで長文を扱うローカル環境では、GQA採用モデルを選ぶ、PagedAttention対応の推論エンジンを使う、KVキャッシュをFP8やFP4へ量子化する、の3つが効きます。まずコンテキスト長を用途に見合う範囲へ絞ったうえで、品質への影響を見ながら量子化の精度を段階的に下げると、メモリと生成品質の釣り合いを取りやすくなります。
関連記事
- Transformerとは?自己注意の仕組みとBERT・GPTの違いを実装目線で解説:KVキャッシュが再利用するKey・Valueがどこで生まれるかを、自己注意の計算過程から追えます。
- プロンプトキャッシュ(Prompt Caching)とは|仕組みと主要APIの使い方:API層で入力再送コストを削る仕組みを押さえ、推論内部のKVキャッシュと役割を切り分けられます。
- LLMとは?大規模言語モデルの仕組み・生成AIとの違いと企業導入の判断基準を解説:自己回帰生成を含むLLMの全体像を俯瞰し、KVキャッシュの位置づけを掴めます。
- SLMとは?小規模言語モデルの仕組み・LLMとの違いと実装判断を解説:モデルを小さくしてキャッシュ量ごと抑える選択肢を、実装判断の材料にできます。
- ローカルLLMとは:VRAM制約下でKVキャッシュ量子化が効く前提となる、手元環境での推論を整理できます。