KV Cache
KVキャッシュがLLMのようなTransformerモデルをどのように最適化するかを紹介します。この手法が推論レイテンシを削減し、Ultralytics YOLO26の効率をいかに向上させるかを学びましょう。
KV Cache(Key-Value Cache)は、主に**大規模言語モデル(LLM)やその他のTransformerベースのアーキテクチャにおいて、推論レイテンシを加速させ、計算コストを削減するために使用される重要な最適化手法です。KVキャッシュは本質的に、シーケンス内の過去のトークンに対してアテンションメカニズムによって生成されたKeyおよびValue行列を保存します。これらの計算結果を保存することで、新しいトークンを生成するたびにシーケンス履歴全体の計算を再実行することを回避できます。このプロセスにより、テキスト生成ワークフローは2次計算量の演算から線形計算量の演算へと変換され、チャットボットやAIエージェント**とのリアルタイムな対話が現実的なものとなります。
Link to this sectionメカニズムと利点#
標準的な**Transformer**モデルでは、次の単語を生成する際に文脈を理解するため、過去のすべての単語にアテンションを向ける必要があります。キャッシュがない場合、モデルはステップごとにシーケンス全体の数学的関係を再計算しなければなりません。KVキャッシュは、メモリバンクとして機能することでこれを解決します。
- **速度の向上:事前計算されたキーと値をメモリから取得することで、推論エンジンは大幅に高速化されます。これは、カスタマーサービスボットのリアルタイム推論**のように、低レイテンシが求められるアプリケーションにおいて不可欠です。
- **リソース効率:メモリ使用量(VRAM)は増加しますが、トークンごとに必要な計算量(FLOPs)は大幅に削減されます。このトレードオフは、オペレーティングシステムがRAMを管理する方法と同様に、モデル量子化**やページングといった手法によって管理されることが一般的です。
- **コンテキストの拡張:KVキャッシュを効率的に管理することで、モデルはより大きなコンテキストウィンドウ**を扱えるようになり、長文ドキュメントの処理や長期にわたる一貫した対話の維持が可能になります。
Link to this section実社会での応用#
KVキャッシュは現代の生成AIを展開する上で基本的なコンポーネントですが、その原則は**コンピュータビジョン(CV)**にも適用されます。
-
生成AIチャットボット: **ChatGPTやClaude**といったサービスは、KVキャッシュに大きく依存しています。ユーザーがフォローアップの質問をした際、モデルはチャット履歴全体を最初から読み直すことはしません。代わりに、新しい入力を以前のターンのキャッシュされた状態に追加することで、ほぼ瞬時の応答を可能にしています。
-
動画理解: **動画理解タスクにおいて、モデルはフレームを順番に処理します。テキストのトークンと同様に、過去のフレームからの視覚的特徴をキャッシュすることで、動画の履歴全体を再処理することなく、オブジェクトの追跡やアクションの認識を行うことができます。これは、時間的な文脈が極めて重要なアクション認識**において特に重要です。
Link to this section効率的なメモリ管理#
モデルが大規模化するにつれて、KVキャッシュのサイズがボトルネックとなり、数GBのGPUメモリを消費することがあります。近年の進歩は、このストレージの最適化に注力しています。
- PagedAttention:オペレーティングシステムの仮想メモリに着想を得たPagedAttention(vLLMで導入)は、KVキャッシュを非連続なメモリブロックに保存することを可能にします。これにより断片化が軽減され、**モデルサービング**時のバッチサイズを大きくできます。
- **KVキャッシュ量子化:容量を節約するため、開発者は多くの場合、キャッシュされた値に対して特に混合精度やint8量子化を適用します。これによりメモリフットプリントが削減され、RAMが限られたエッジAI**デバイスでも高性能なモデルを動作させることが可能になります。
- **プロンプトキャッシュ:静的なシステムプロンプト(例:「あなたは役立つコーディングアシスタントです」)のKV状態を一度計算し、複数の異なるユーザーセッション間で再利用する関連技術です。これは、プロンプトエンジニアリング**のワークフローを大規模に最適化するための主要な機能です。
Link to this section関連概念の区別#
KVキャッシュを他のキャッシュや最適化用語と区別すると理解しやすくなります。
- **KVキャッシュ vs プロンプトキャッシュ:**KVキャッシュは通常、単一の生成ストリーム中に使用される動的でトークンごとのメモリを指します。プロンプトキャッシュは、固定された入力指示の処理済み状態を保存し、独立した複数の推論呼び出しで再利用することを指します。
- **KVキャッシュ vs 埋め込み(Embeddings):**埋め込みは、意味論的な意味を捉えた入力データ(テキストまたは画像)のベクトル表現です。KVキャッシュは、シーケンス生成の目的のために、アテンション層内でこれらの埋め込みから導出されたアクティベーション(キーと値)を保存します。
- **KVキャッシュ vs モデルの重み:**モデルの重みは、ニューラルネットワークの静的な学習済みパラメータです。KVキャッシュは、特定の入力シーケンスのフォワードパス中に生成される動的で一時的なデータです。
Link to this section例:ビジョンモデルにおける文脈#
KVキャッシュは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を活用することで、データのアノテーションから効率的なモデルデプロイまでのパイプラインを簡素化できます。アテンションの深い仕組みに興味がある場合は、PyTorch**のようなライブラリが、これらのキャッシュメカニズムが実装される基礎的なブロックを提供しています。






