KVキャッシュの隠れたコスト:推論サーバーが計算前にメモリ不足になる理由
大規模言語モデルの推論サービス向けVRAM予算の公式と、メモリ不足を引き起こす3つのトラフィックパターンに対応する3つの最適化戦略を紹介します。
背景と概要
大規模言語モデルの推論サービスを導入する際、エンジニアが最も頭を悩ませる現象がある。GPUの計算利用率が満杯になる前に、サービスがメモリ不足(OOM)でクラッシュしてしまうというのだ。計算力が足りなければリクエストは待機队列に入ればよい。しかしVRAMが不足するのは物理的な上限であり、その線を超えるとプロセスは即座に終了する。この背後にあるのが、長年見過ごされてきたKVキャッシュである。
デコード段階では、各Transformer層のキーとバリューテンソルを繰り返し読み込む必要がある。新しいトークンごとに再計算すると計算コストは指数級に膨らむ。そのため主要な推論フレームワークは、これらのテンソルをVRAMに一時的に保存する。つまりメモリと計算力の交換なのである。問題は、このKVキャッシュの占用がコンテキスト長と並行リクエスト数に比例して増大することだ。モデル重量化子化とは異なり、構造として圧縮できないため、VRAMが最も脆弱な要素となってしまう。
深掘り分析
この問題の規模は、VRAM予算の公式から明らかになる。バッチ内のKVキャッシュ総占用は、バッチサイズに序列長、モデル層数、各注意力ヘッドの次元とデータ型のバイト数を掛けたものに概等しい。ここから三つのレバーが見えてくる。並行バッチサイズ、序列長、そしてモデルのアーキテクチャパラメータである。 例えば70Bパラメータ、32層、128注意力頭のモデルをFP16で動作させると、単一序列がトークン1つ増えるごとに数百KBのVRAMを消費する。数十個の並行リクエストがそれぞれ数万トークンを持つと、KVキャッシュの占用は瞬時にモデル重みを超えてしまう。これが推論サーバーが計算尽きる前にOOMする根本的な理由なのだ。
メモリ不足を引き起こすトラフィックパターンは三つある。第一に長コンテキストモードだ。ドキュメント问答やコードベース分析で序列長が跳ね上がる。これには量子化が有効で、FP16からINT8、あるいはINT4へ圧縮することで占用をほぼ比例に削減できる。第二にバースト並行モードだ。セールやホットイベントでバッチサイズが一気に高まる。静的バッチングではバッチを小さくしすぎるとスループットが落ち、多すぎるとOOMする。 ここで有効なのが、vLLMが採用するPagedAttention技術であるページドKVキャッシュだ。各序列のKVキャッシュを固定サイズのページに分割し、必要に応じて割り当て、満杯で回収する。これで予約によるメモリ断片が解消し、VRAM利用率は50%未満から90%以上に向上する。
業界への影響
第三に混合モードだ。長コンテキストとバースト並行が共存する本番環境で、単一の戦略では対応できない。量子化とページングに加え、メモリ回収とリクエストスケジューリングを組み合わせる。アイドル状態のリクエストのKVキャッシュを換出したり、優先度に応じてバッチサイズを動的に調整したり、メモリが逼迫したら低優先度のリクエストを主动的に破棄する。こうした階層治理により、不確実な条件下でも安定したスループットを維持できる。
KVキャッシュのメモリ管理は、もはや単なる工程の詳細ではない。クラウド事業者にとって、単一カードの並行スループットを最大化できれば、従量課金市場でより低い価格提示が可能だ。これは推論事業の利益率に直結する。アプリケーション開発者にとって、KVキャッシュの法則を理解することは、単一カードが支えられる並行数を正確に見積もる助けになる。
特にエッジAIではこの問題が鋭くなる。エッジデバイスのメモリはデータセンター远比び制約が厳しい。そのため量子化やページングの恩恵は限られたハードウェアでさらに拡大する。このため最近の推論最適化研究は、単なるモデル精度の追求から、メモリ効率とスループットの均衡へと転換しているのである。
今後の展望
注目すべき信号が三つある。第一に量子化の継続的な低精度化だ。KVキャッシュの量子化はINT8からさらに細かい粒度へ進化し、品質損失を可控に保ちながらメモリ占用を圧縮する。第二にメモリ回収とスケジューリングの知能化だ。未来のスケジューラーはリアルタイムのトラフィックを予測し、メモリ圧力を事前に察知してリクエストの待機や換出を行う。OOMを受動的な応対から能動的な回避へと変える。
第三に、推論フレームワークがメモリ効率をアーキテクチャの第一級市民へと格上げすることだ。量子化やページング、回収といった能力が、後付けのパッチではなく原生に統合される。これは本質的に、メモリ管理を設計段階から考慮に入れることを意味する。
从业者が避けるべき認知の落とし穴は、推論パフォーマンスの問題を単純に計算力不足に帰することだ。実際には、GPUの計算速度が制限要因になることはめったにない。KVキャッシュで満たされたVRAMが、並行数を伸ばせなくしているのである。誰がメモリ予算を極限まで使い切れるかが、同じシリコン上でより高いスループットとより低いコストを実現し、大モデル推論の競争で真に差が生まれる場所なのだ。
Sources
FAQ
なぜ推論サーバーは計算資源を使い切る前にメモリ不足(OOM)で落ちるのでしょうか?
デコード時に KV キャッシュは計算量を節約するため各 Transformer 層の Key/Valueテンソスを保持しますが、使用量はコンテキスト長と並行リクエスト数に比例して増加し、モデル重みのように量子化できないため計算が尽きる前に VRAM を埋めます。
KV キャッシュのメモリ使用がなぜボトルネックになるのですか?
並行リクエストが増え、各リクエストが数万トークンを持つと、KV キャッシュの使用量はモデル重み自体を超え、限られた VRAM 下でスループットを制限する主要因になります。
KV キャッシュのメモリ圧力に対して、今後の最適化の方向性是什么?
量子化は INT8 からより低い精度へ進化し、メモリ回収とスケジューリングはリアルタイム流量で圧力を预判して主動的に排队や換出を行い、推論フレームワークもメモリ効率を第一の要素として原生に取り入れます。