KV Cache
KVキャッシュがLLMのようなTransformerモデルをどのように最適化するかを紹介します。この手法が推論レイテンシを削減し、Ultralytics YOLO26の効率をいかに向上させるかを学びましょう。
KV Cache (Key-Value Cache) は、Large Language Models (LLMs) やその他の Transformer ベースのアーキテクチャで、inference latency の高速化と計算コストの削減のために主に使用される重要な最適化テクニックです。その核心として、KV cache はシーケンス内の過去のトークンに対して attention mechanism が生成した Key および Value マトリックスを保存します。これらの中間計算を保存することにより、新しいトークンを生成するたびに会話の履歴全体に対するアテンション状態を再計算することを回避します。このプロセスにより、text generation のワークフローが2次複雑度の操作から線形の操作へと変換され、チャットボットや AI agents とのリアルタイムな対話が実現可能になります。
メカニズムと利点#
標準的な Transformer モデルでは、次の単語を生成するために、文脈を理解するために以前のすべての単語に注意を払う必要があります。キャッシュがない場合、モデルはすべてのステップでシーケンス全体の数学的関係を再計算する必要があります。KV cache は、メモリバンクとして機能することでこれを解決します。
- 速度の向上: 事前計算された Key と Value をメモリから取得することにより、システムは inference engine を劇的に高速化します。これは、カスタマーサービスボットにおける real-time inference など、低遅延を必要とするアプリケーションに不可欠です。
- リソース効率: メモリ使用量(VRAM)は増加しますが、トークンあたりに必要な計算量(FLOPs)は大幅に削減されます。このトレードオフは、オペレーティングシステムが RAM を管理する方法に似て、model quantization やページングなどの技術によって管理されることがよくあります。
- 拡張されたコンテキスト: KV cache の効率的な管理により、モデルはより大きな context window を処理できるようになり、長いドキュメントの処理や、長期間にわたる一貫した会話の維持が可能になります。
実社会での応用#
KV cache は最新の生成 AI のデプロイにおける基本コンポーネントですが、その原則は computer vision (CV) にも拡張されます。
-
生成チャットボット: ChatGPT や Claude などのサービスは、KV caching に大きく依存しています。ユーザーが追加の質問をした場合、モデルはチャット履歴全体を最初から読み直しません。代わりに、新しい入力を前のターンのキャッシュされた状態に追加し、ほぼ瞬時の応答を可能にします。
-
動画理解: video understanding タスクにおいて、モデルはフレームを順次処理します。テキストトークンと同様に、過去のフレームからの視覚的特徴をキャッシュして、モデルが動画履歴全体の再処理なしでオブジェクトを追跡したりアクションを認識したりするのを助けることができます。これは、時間的文脈が重要となる action recognition に特に関連しています。
効率的なメモリ管理#
モデルが大規模化するにつれて、KVキャッシュのサイズがボトルネックとなり、数GBのGPUメモリを消費することがあります。近年の進歩は、このストレージの最適化に注力しています。
- PagedAttention: オペレーティングシステムの仮想メモリにインスパイアされた、vLLMによって導入された PagedAttention により、KV cache を非連続なメモリブロックに格納できます。これによりフラグメンテーションが軽減され、model serving 中により大きなバッチサイズが可能になります。
- KV Cache Quantization: スペースを節約するため、開発者はキャッシュされた値に特化して mixed precision や int8 量子化を適用することがよくあります。これによりメモリフットプリントが削減され、RAM が限られた edge AI デバイスが高性能なモデルを実行できるようになります。
- プロンプトキャッシュ: 静的なシステムプロンプト(例:「あなたは役立つコーディングアシスタントです」)の KV 状態が1回計算され、多くの異なるユーザーセッション間で再利用される関連技術です。これは、大規模な prompt engineering ワークフローを最適化するためのコア機能です。
関連概念の区別#
KVキャッシュを他のキャッシュや最適化用語と区別すると理解しやすくなります。
- KV Cache と Prompt Caching の比較: KV Cache は通常、単一の生成ストリーム中に使用される動的なトークンごとのメモリを指します。プロンプトキャッシュは、複数の独立した推論呼び出しにわたって再利用される固定入力命令の処理済み状態の保存を具体的に指します。
- KV Cache と Embeddings の比較: 埋め込みは、意味を捉える入力データ(テキストまたは画像)のベクトル表現です。KV cache は、シーケンス生成の目的でアテンション層内のこれらの埋め込みから派生した 活性化(Key と Value)を保存します。
- KV Cache と Model Weights の比較: モデルウェイトは、ニューラルネットワークの静的で学習されたパラメータです。KV cache は、特定の入力シーケンスのフォワードパス中に生成される動的で一時的なデータで構成されています。
例:ビジョンモデルにおける文脈#
KV caching は NLP で最も有名ですが、状態を維持するという概念は高度なビジョンモデルにも当てはまります。以下の例では、Ultralytics YOLO26 を使用して、動画追跡シナリオで状態(コンテキスト)を渡すアイディアをシミュレートしています。ここで、トラッカーはフレーム間でオブジェクトのアイデンティティを維持します。これは、キャッシュがトークン間でコンテキストを維持する方法と概念的に似ています。
from ultralytics import YOLO
# Load the Ultralytics YOLO26 model
model = YOLO("yolo26n.pt")
# Track objects in a video, maintaining identity state across frames
# The 'track' mode effectively caches object features to link detections
results = model.track(source="https://ultralytics.com/images/bus.jpg", show=False)
# Print the ID of the tracked objects
if results[0].boxes.id is not None:
print(f"Tracked IDs: {results[0].boxes.id.numpy()}")データセットを管理し、最適化されたモデルをデプロイしようとする開発者は Ultralytics Platform を利用できます。これにより、データアノテーションから効率的な model deployment までのパイプラインが簡素化されます。アテンションのより深いメカニズムに関心のある方のために、PyTorch のようなライブラリは、これらのキャッシングメカニズムが実装される基礎的なブロックを提供します。






