コンテキストウィンドウとKVキャッシュ
コンテキストウィンドウには値札があり、支払いはVRAMで行われる。コンテキストに保持される各トークンは、モデルにレイヤーごとに2つの小さなベクトルを覚えさせる。このメモリ——KVキャッシュ——はトークンごとに成長し、あると思っていた余裕を静かに食う。ローカルLLMの最も奇妙な失敗を説明する。40ターン目のOOM、チャットが伸びるにつれ遅くなるモデル、パンフレットの中でだけ「128kコンテキスト」を動かす8 GBカード。
キャッシュの内容
アテンションは、過去の各トークンに注目する前に、そのキーとバリューの射影を必要とする。これらはプリフィル中に一度計算され、リクエストの寿命の間保持される。レイヤーごと、トークンごとに、kv_heads × head_dim個の数からなるKベクトルとVベクトルが1つずつ。この保管庫がKVキャッシュで、サーブされるすべてのリクエストについて、コンテキストがメモリを線形に、永遠に食う理由。
式
トークンあたりバイト数 = 2 (KとV) × レイヤー数 × kv_heads × head_dim × 2バイト (fp16)
実例、llama-3-8B級GQA(32レイヤー、8 KVヘッド、head_dim 128)。
2 × 32 × 8 × 128 × 2 = 131,072バイト = トークンあたり128 KB。
32kコンテキストでは32,768 × 128 KB ≈ 4 GBのKVキャッシュ——隣に座るQ4重みに匹敵する。KVヘッド4個の無駄のない構成なら32kあたり約2 GB。fp16 KVの8B級モデルのオーダー:アーキテクチャに応じて32kあたり0.5〜4 GBを予算化。チェックポイントの正確な数値はconfig.jsonから直接得られる——num_key_value_heads、num_hidden_layers、ヘッドサイズ。
長いコンテキストが安くなった理由はGQA
グループ化クエリアテンションは、少数のKVヘッドを多数のクエリヘッドで共有する——たとえば32クエリヘッドを8 KVヘッドで賄う——完全なマルチヘッドアテンション比でキャッシュを4分の1に、品質コストは無視できるレベルで縮める。GQAがなければ下の表は4〜8倍大きく、24 GBカードでの長いコンテキストは夢物語。ローカルの長コンテキスト作業への最大級のアーキテクチャの贈り物であり、現代の7〜9Bモデルが32k〜128kウィンドウを搭載する理由そのもの。
成長の速さ
fp16 KVの8B級GQAモデル、トークンあたり128 KB。
| コンテキスト | KVキャッシュサイズ | 8 GBカードでは |
|---|---|---|
| 4k | 約0.5 GB | 見えない |
| 16k | 約2.1 GB | 重み5 GBの隣で気になり始める |
| 64k | 約8.4 GB | 収まらない、話はそれまで |
| 128k | 約16.8 GB | モデル自体の3倍 |
メモリはトークンごとに線形に増えるが、アテンションの計算量はコンテキストの2乗で増える——長いコンテキストはVRAMとトークンあたり時間を同時に要求する。
KVが爆発したときのレバー
- **キャッシュを量子化。**q8_0で半分、q4_0で4分の1。品質コストは控えめで、スタック全体で最良の容量トレードになり得る。llama.cppではKV量子化にフラッシュアテンションが必要。以下に示す。
- **短いコンテキストをサーブ。**プロンプトが2kなら
-c 8192は何も失わせない。うたい文句の128kを「念のため」確保すると、生産的に使われることのないVRAMを予約することになる。 - **スライディングウィンドウモデル。**一部のアーキテクチャは名目コンテキストに関係なくレイヤーごとのKVウィンドウに上限を設ける——線形の請求書なしの長コンテキスト挙動、古い素材の想起コストと引き換えに。
- **フラッシュアテンション。**本質的には計算とカーネル効率の利得——2乗的な活性化の爆発なしの正確なアテンション——であり、llama.cppではKV量子化を解錠する門でもある。
llama-server -m model-8b-q4_k_m.gguf -c 65536 -fa --cache-type-k q8_0 --cache-type-v q8_0
うたい文句と実効コンテキスト
128kをうたうモデルは128kで動く——キャッシュは収まり、計算も成立する。128kで考えられるかは別の主張。引き伸ばされたRoPEと長コンテキストファインチューニングは針探しスコアを高く保つ一方、より広い理解力は限界よりずっと手前で垂れることが多い。うたい文句のウィンドウは物理的上限とみなし、後半で品質が軟化すると仮定し、ワークフローを賭ける前にそのチェックポイントのコミュニティによる長コンテキスト評価を探すこと。
lost in the middleと衛生習慣
位置バイアスは実在する。モデルはプロンプトの始端と終端に最も強く注目し、中盤で垂れる。指示と重要な事実は最初か最後に。モデルが従うべき仕様を貼り付け文書の中に埋めてはいけない。コンテキストを小さく鋭く保つ習慣。