DeepSeek V4のKVキャッシュ使用量を正確に算出する

Reddit r/LocalLLaMA / 2026/4/26

💬 オピニオンSignals & Early TrendsIdeas & Deep AnalysisModels & Research

要点

  • この投稿は、DeepSeek V4(DSV4)論文が示す極端に長いコンテキスト(最大100万トークン)でのKVキャッシュ必要量を分析し、DSV3.2とDSV4の見積もりがどう解釈されるかを論じています。
  • 著者自身のFP16 KVキャッシュ計算によれば、DSV3.2は1Mコンテキストで約68.6GiB(約50GBではない)と推定され、DSV4 FlashとDSV4 Proはそれぞれ約6.08GiBと約8.71GiBと見積もられています。
  • DSV3.2と比べたKVキャッシュ削減倍率は約7.88×(9.5×ではない)とされますが、KV%の観点では依然として約20×に近い改善が示されると主張しています。
  • 投稿者は、DSV4がllama.cppでサポートされれば、長コンテキスト実行が実用化に近づき(例:Flashは3090+256GB RAM、Proはより大きなRAM/GPUが必要)、さらに他チームの派生によってKVキャッシュがより削減される可能性にも触れています。

DSV4論文の図1は、DSV3.2が1mコンテキストで約50GBを使用し、DSV4は

約5GB:

https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/DeepSeek_V4.pdf

ということを示唆しているように見えます。

私自身の計算では、1mコンテキストにおける正しいFP16のKVキャッシュは次のはずです:

モデル パラメータ 128k 160k 1m KV%
V3.x 671B 8.58GiB 10.72GiB 68.63GiB 5.11%
V4 Flash 284B 0.76GiB 0.95GiB 6.08GiB 1.07%
V4 Pro 1600B 1.09GiB 1.36GiB 8.71GiB 0.272%

つまり、KVキャッシュの削減は9.5倍ではなく7.879倍です。それでも非常に印象的です。KV%メトリクスを見ると、約20倍の向上が見えてきます。これは基本的に、現在のあらゆるTransformer-SSMハイブリッドモデルのKVキャッシュ使用量を完全に打ちのめします。ですが、Transformer-SSM陣営は、Transformer層にDSV4のCSAとHCAを使うだけで追いつけます。

このKVキャッシュ使用量なら、llama.cppでDSV4がサポートされたとき、DSV4 Flashなら256GB RAMと3090で1mコンテキストを簡単に実行でき、DSV4 Proなら1.5TB RAMとRTX 6000 Blackwellで実行できるはずです。論文中に言及されているさまざまな速度向上によって、それが現実的になるのだと思います。

DSV4 Proは人工的な解析(Artificial analysis)ではあまり良くないようです。ですが、KimiやZhipuがそこから派生させて、KVキャッシュが非常に少ない“怪物”を作ることを期待できます。

総じて、DSは中国のAIシーンにおける研究の中核(バックボーン)として、依然としてとても好調です。

PS 興味のある人向けに、もう少し詳しい計算です。計算で何か間違いがあれば教えてください:

llama.cppで実際にV3.2を動かして見えているものに基づくと、DSV3.2の実際のFP16 KVキャッシュ使用量は、160kコンテキストで10.72GiB、仮想的な1mコンテキストで68.625GiBです。

この数値は、トークンごと・層ごとのMLA KVキャッシュの式で検証できます:(kv_lora_rank + qk_rope_head_dim) * precision = (512 + 64) * 2 = 1152バイト。したがって、61層で1mトークンなら 1152*61*1024*1024 = 68.625GiBとなり、これは50GBではありません。

一方で、DSV4 Proの場合は、30のCSA層と31のHCA層が交互に入っています。私の理解では、CSAはMLAのKVキャッシュの1/4だけを保存するので、1トークンあたり・層あたりは288バイト、HCAはMLAのKVキャッシュの1/128だけを保存するので、1トークンあたり・層あたりは9バイトです。したがって、KVキャッシュは (288*30+9*31)*1024*1024 ≒ 8.70996GiB になります。よって、KVキャッシュの削減は9.5倍ではなく7.879倍です。

DSV4 Flashでは、最初の2層はウィンドウサイズ128トークンのSliding Window Attentionです。通常、この2層における、任意の長さが128を超える場合の層ごとのKVキャッシュは 2*n_head_kv*head_dim*precision*window = 2*1*128*2*128 = 65536バイトになります。現在のllama.cppの実装では、より良いバッチ処理のためにウィンドウに256バイトを追加しており、2*1*128*2*(128+256) = 196608バイトになります。

DSV4 Flashには21のCSA層と20のHCA層があるため、1mコンテキストでのKVキャッシュは (288*21+9*20)*1024*1024+2*196608 = 6.0824GiBです。これはDSV3.2に比べて11.3倍の削減であり、主張されている13.7倍ではありません。

submitted by /u/Ok_Warning2146
[link] [comments]