DeepSeek V4의 정확한 KV 캐시 사용량
The exact KV cache usage of DeepSeek V4
핵심 요약
DeepSeek V4의 혁신적인 KV 캐시 효율성을 분석하고 모델별 실제 사용량을 계산하여 검증함.
- KV 캐시 효율성 — DeepSeek V4가 이전 버전 대비 압도적인 KV 캐시 절감 효과를 보여줌.
- 기술적 검증 — MLA 및 CSA/HCA 구조를 바탕으로 실제 사용량을 계산하고 논문 수치와 비교함.
- 하드웨어 요구사항 — 효율적인 캐시 사용 덕분에 더 낮은 사양의 하드웨어에서도 1M 컨텍스트 구동이 가능해짐.
- 커뮤니티 분석 — 사용자들이 계산 방식의 오류를 지적하거나 FP8 혼합 정밀도 등 기술적 세부 사항을 논의함.
DeepSeek V4 논문의 Figure 1은 DSV3.2가 1m 컨텍스트에서 약 50GB를 사용하고 DSV4가 약 5GB를 사용하는 것처럼 암시하는 것 같음:
https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/DeepSeek_V4.pdf
내 계산에 따르면 1m 컨텍스트에서 정확한 FP16 KV 캐시 사용량은 다음과 같아야 함:
|Model|Params|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배의 이득을 보고 있음. 이는 현재의 모든 트랜스포머-SSM 하이브리드 모델의 KV 캐시 사용량을 압도함. 하지만 트랜스포머-SSM 진영도 트랜스포머 레이어에 DSV4의 CSA와 HCA를 사용하여 따라잡을 수 있을 것임.
이 정도의 KV 캐시 사용량이라면, llama.cpp에서 DSV4가 지원될 때 256GB RAM과 3090으로 DSV4 Flash를, 또는 1.5TB RAM과 RTX 6000 Blackwell로 DSV4 Pro를 1m 컨텍스트로 쉽게 구동할 수 있다는 의미임. 논문에서 언급된 다양한 속도 향상이 이를 실현 가능하게 만들 것이라 생각함.
DSV4 Pro는 인공 분석 작업에서 성능이 좋지 않지만, Kimi나 Zhipu가 이를 파생시켜 매우 적은 KV 캐시를 사용하는 괴물 같은 모델을 만들어낼 것으로 기대함.
결론적으로, DeepSeek는 여전히 중국 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 bytes. 따라서 61개 레이어와 1m 토큰의 경우, 1152611024*1024 = 68.625GiB가 되며 50GB가 아님.
반면, DSV4 Pro는 30개의 CSA 레이어와 31개의 HCA 레이어가 교차되어 있음. 내 이해로는 CSA는 MLA KV 캐시의 1/4만 저장하므로 토큰당 레이어당 288바이트이고, HCA는 MLA KV 캐시의 1/128만 저장하므로 토큰당 레이어당 9바이트임. 따라서 KV 캐시는 (28830+931)10241024 =~ 8.70996GiB임. 즉, KV 캐시 절감은 9.5배가 아니라 7.879배임.
DSV4 Flash의 경우, 처음 두 레이어는 윈도우 크기가 128 토큰인 Sliding Window Attention임. 일반적으로 이 두 레이어에 대해 128 토큰보다 긴 길이에 대한 레이어당 KV 캐시는 2n_head_kvhead_dimprecisionwindow = 211282128 = 65536 바이트여야 함. 현재 llama.cpp 구현은 더 나은 배칭을 위해 윈도우에 256바이트를 추가하므로 211282(128+256) = 196608 바이트가 됨.
DSV4 Flash에는 21개의 CSA 레이어와 20개의 HCA 레이어가 있으므로, 1m 컨텍스트에서의 KV 캐시는 (28821+920)1024+2*196608 = 6.0824GiB임. 이는 DSV3.2 대비 11.3배 절감된 것이며, 주장된 13.7배가 아님.


