DSV4 논문 Figure 1 은 DSV3.2 가 1m 컨텍스트에서 약 50GB 를, DSV4 가 약 5GB 를 사용한다고 암시하는 것으로 보입니다:
https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/DeepSeek_V4.pdf
vllm 의 KV 캐시 분해로 숫자 업데이트
https://vllm.ai/blog/deepseek-v4
제 own 계산에 따르면, 1m 컨텍스트에서의 정확한 FP16 KV 캐시는 다음과 같습니다:
| Model | Params | 128k | 160k | 1m | KV% |
|---|
| V3/3.1 | 671B | 8.58GiB | 10.72GiB | 68.63GiB | 5.11% |
| ... | | | | | |
따라서 KV 캐시 절감은 9.5 배가 아니라 7.879 배입니다. 그래도 매우 인상적입니다. KV% 지표를 보면 약 20 배의 향상을 볼 수 있습니다. 이는 현재 모든 transformer-SSM 하이브리드 모델의 KV 캐시 사용을 완전히 무너뜨립니다. 하지만 transformer-SSM 커뮤니티는 DSV4 의 CSA 와 HCA 를 자신의 transformer 레이어에 적용하여 추격할 수 있습니다.
이러한 KV 캐시 사용량에서, DSV4 가 llama.cpp 에서 지원되면 DSV4 Flash 는 256GB RAM 과 3090 에서 1m 컨텍스트를, DSV4 Pro 는 1.5TB RAM 과 RTX 6000 Blackwell 에서 쉽게 실행할 수 있습니다. 논문에서 언급된 다양한 속도 향상이 이를 가능하게 할 것이라고 추측합니다.
DSV4 Pro 가 인공 분석에서는 잘 작동하지 않습니다. Kimi 와 Zhipu 가 이를 기반으로 파생작품을 만들 것으로 예상되므로, 매우 적은 KV 캐시를 사용하는 괴물이 나올 것입니다.
전반적으로 DS 는 중국 AI 의 연구 백본으로서 여전히 매우 잘 수행하고 있습니다.
PS 관심 있는 분들을 위한 더 자세한 계산입니다. 제가 수학에 실수가 있는지 알려주세요:
제대로 V3.2 를 llama.cpp 로 실행한 결과, DSV3.2 의 실제 FP16 KV 캐시 사용량은 160k 컨텍스트에서 10.72GiB, 가상의 1m 컨텍스트에서 68.625GiB 입니다.
이 숫자는 per token per layer MLA KV 캐시 공식 (kv_lora_rank + qk_rope_head_dim) * precision = (512 + 64) * 2 = 1152 bytes 으로 검증할 수 있습니다. 따라서 61 레이어와 1m 토큰의 경우, 1152611024*1024 = 68.625GiB 가 되며 이는 50GB 가 아닙니다.
하지만 이 68.625GiB 는 V3 와 V3.1 에만 유효하며 llama.cpp 는 DSA 와 V3.2 에서 도입된 Lightning indexer 를 구현하지 않기 때문입니다. 실제로 V3.2 는 인덱스를 저장하는 추가 128 bytes 를 사용합니다. 따라서 V3.2 의 per token per layer KV 캐시는 (512+64+128)2 = 1408 입니다. 1m 토큰의 경우 총합은 14086110241024 = 83.875GiB 가 됩니다.
반면, DSV4 Pro 는 30 개의 CSA 레이어와 31 개의 HCA 레이어 interleaved.My 이해는 CSA 가 DSA 의 파생물이므로 MLA 구성 요소와 Lightning Indexer 를 모두 가지지만 RoPE'd k 를 저장할 필요가 없습니다. CSA 는 한 번에 4 토큰을 처리하여 1 로 압축하므로, per token per layer KV 캐시는 (512+128)2/4 = 320 bytes 입니다. HCA 는 MLA 의 파생물이지만 RoPE'd k 를 저장할 필요가 없으므로, per token per layer KV 캐시 는 5122/128 = 8 bytes 입니다. 따라서 (32030+831)10241024 = ~9.62GiB 가 됩니다.
DSV4 Flash 에서는 첫 두 레이어가 128 토큰의 윈도우 크기를 가진 Sliding Window Attention 입니다. 일반적으로, 이러한 두 레이어에서 128 보다 긴 길이의 경우 per layer KV 캐시는 2n_head_kvhead_dimprecisionwindow = 211282128 = 65536 bytes 가 되어야 합니다. 현재 llama.cpp 구현은 더 나은 배치 위해 윈도우에 256 bytes 를 추가하여 211282(128+256) = 196608 bytes 가 됩니다.
DSV4 Flash 의 경우 CSA 레이어 21 개와 HCA 레이어 20 개가 있으므로, 1m 컨텍스트의 KV 캐시는 (32021+820)10241024+2*196608 = 6.72GiB 입니다. 이는 DSV3.2 에 비해 12.5 배 절감이며, 주장된 13.7 배가 아닙니다.