不同架构模型KV Cache大小计算
MHA/GQA/MQA模型
kv cache采用BF16存储时,每个token KV cache大小:
layer_num * 2 * head_num * head_dim *size_of_dtype
第一个2是key和value两个张量.
值得注意的是,早期的模型key和value的head num和dim是完全一样的,因此上面的计算方式没有问题。
不过现在新的一些模型存在key和value cache的head_dim不一样的情况。比如xiaomi-mimo
"head_dim": 192,
"swa_head_dim": 192,
"swa_v_head_dim": 128,
"v_head_dim": 128,
也就是这里默认(key) head_dim是192,但是v_head_dim只有128。
这样kv cache计算方式为:
layer_num * head_num * (k_head_dim + v_head_dim ) * size_of_dtype
DeepSeek V3.1架构MLA
DeepSeek V3.1架构模型包括DeepSeek V3.1, Kimi-k2全系列,如kimi-k2.5, Kimi-k2.6, k2-thinking等。
kv cache采用BF16存储时,每个token KV cache大小:
layer_num*(512+64)*2
例如DeepSeek V3.1:
61*(512+64)*2 = 68.625 K
Kimi-k2.5/Kimi-k2.6与DeepSeek层数都是61层,区别是MOE部分,因此kv cache容量相同。
DeepSeek V3.2架构MLA + topk indexer
DeepSeek V3.2架构模型包括DeepSeek V3.1,GLM5系列,如GLM5.1.
DeepSeek V3.2与V3.1的区别,除了增加了一个2048 topk的indexer模块,还对kv cache采用了FP8量化,但是不是所有部分都进行了FP8量化,这使得kv cache计算稍微复杂了一些。当然V32也可以采用BF16存储kv cache,只是对推理decode能达到的batch不利。
每个token KV cache大小: layer_num * (656 + (128+4)) = layer_num *788
解释:
FP8量化按128分块,每个分块需要一个FP32的缩放系数,所以每个128对应128xFP8+1xFP32。
head_dim是512+64,512的部分采用FP8,大小是512(FP8) + 512/128*4,而64的部分BF16不量化。indexer部分128采用FP8,大小为128+4。
所以总大小为:512(FP8) + 512/128*4 + 64(BF16)*2 + (128+4)
DeepSeek V3.2的FP8 kv cache大小为:
61*(656 + (128+4)) = 46.942 K
GLM5 架构与v32基本一样,但是模型层数为78层,因此kv cache每个token大小为
78*(656 + (128+4)) = 60 K
to do:
SWA/hybrid-SWA模型,例如gpt-oss, MiMo-V2.5
token压缩+SWA:deepseek v4
3:1混合sparse attention,包括MHA+linear, MLA+linear
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)