网上很多文章一般只提到 DeepSeek V3 模型的总参数量,很少有人分析各子模块的参数量。我试着让各 AI 根据配置计算一下,没有一个靠谱的,只能自己算了。(也许本文的内容后续会变成 AI 回答本问题的 RAG 养料)
下面是根据 DeepSeek V3 开源仓库 https://huggingface.co/deepseek-ai/DeepSeek-V3,对 DeepSeek V3 各子模块参数量进行的精算,在计算复杂的 TP、DP、EP 拆分时可以用作基数参考。如有错误,烦请评论指出。
嵌入层 Embedding
"vocab_size": 129280, // Token 字典大小
"hidden_size": 7168,
DeepSeek V3 的嵌入层参数量是:
129280 * 7168 = 926,679,040 (~1B)
MLA
"hidden_size": 7168,
"num_key_value_heads": 128,
"v_head_dim": 128,
"kv_lora_rank": 512,
"num_attention_heads": 128,
"q_lora_rank": 1536,
"qk_nope_head_dim": 128,
"qk_rope_head_dim": 64,
"num_hidden_layers": 61,
单层 MLA 中 Q 的 LoRA 参数量是:
7168 * 1536 + 1536 + 1536 * 128 * (128 + 64) = 48,760,320
单层 MLA 中 KV 的 LoRA 参数量是:
7168 * (512 + 64) + 512 + 512 * 128 * (128 + 128) = 20,906,496
单层 MLA 中 WO 的参数量是
128 * 128 * 7168 = 117,440,512
所以 DeepSeek V3 的 MLA 部分共 61 层的总参数量是:
(48,760,320 + 20,906,496 + 117,440,512 + 7168 * 2) * 61 = 11,414,421,504 (~11B)
MoE
"num_hidden_layers": 61,
"hidden_size": 7168,
"moe_intermediate_size": 2048, // 路由专家 MLP 的中间维度
"n_shared_experts": 1, // 共享专家数量
"n_routed_experts": 256, // 路由专家数量
"first_k_dense_replace": 3, // 前几层使用dense替换MoE
"intermediate_size": 18432, // 前3层 (9*moe_intermediate_size)
每个专家的参数量是:
7168 * 2048 * 3 = 44,040,192
路由 Gate 的参数量是:
256 * 7168 + 256 = 1,835,264
前 3 层 dense(固定激活 8 路由专家),前 3 层参数量是:
44,040,192 * 9 * 3 = 1,189,085,184
后 58 层稀疏(动态激活 8 路由专家),后 58 层参数量是:
(44,040,192 * 257 + 1,835,264) * 58 = 656,569,547,264
所以 DeepSeek V3 的 MoE 部分的总参数量是:
1,189,085,184 + 656,569,547,264 = 657,758,632,448 (~657B)
每次计算激活 1 个共享专家,8 个路由专家,所以 DeepSeek V3 MoE 部分的激活参数量是:
44,040,192 * 9 * 61 + 1,835,264 * 58 = 24,284,510,720 (~24B)
输出层
DeepSeek V3 输出层的 RMSNorm 和 Linear 参数量是:
7168 + 129280 * 7168 = 926,686,208 (~1B)
总参数量
核对一下总参数量是否为 671B:
926,679,040 + 11,414,421,504 + 657,758,632,448 + 926,686,208 = 671,026,419,200 (~671B)
核对一下激活参数量是否为 37B:
926,679,040 + 11,414,421,504 + 24,284,510,720 + 926,686,208 = 37,552,297,472 (~37B)
这个与 README_WEIGHT.md 中提到的 36.7B 不同,我还没找到计算错误的地方。