🧠 DeepSeek-R1 (=V3) 完整数据流架构

每层组件标记 · 参数 Shape · 完整前向传播链路 · 总量交叉校验
基于 DeepSeek-V3 Technical Report (arXiv:2412.19437)

一、全局超参数总览
超参符号说明
词表大小V129,280扩展 BPE 词表
隐藏层维度d7,168embedding / residual stream 维度
Transformer 层数N61MLA + MoE block 重复次数
注意力头数nₕ128每头维度 dₕ = 128
KV 压缩维度d_c512MLA 低秩 KV 隐向量
Q 压缩维度d'_c896MLA 低秩 Q 隐向量
RoPE 维度 (每头)dₕᴿ64解耦旋转位置编码
路由专家数Nᵣ256细粒度 MoE 路由专家
共享专家数Nₛ1始终激活的共享专家
激活路由数Kᵣ8Top-K 门控选择数
专家中间维度d_ff2,048每个专家的 SwiGLU FFN hidden
MTP 深度D1额外预测 token 数
总参数 (Main)≈671B官方公布 Main Model
每 token 激活参数≈37B稀疏推理时激活量
二、完整数据流图 — 从输入到输出(含所有组件)
STEP 0: 输入嵌入
Token → Embedding Lookup
输入 tokens [batch, seq_len] W_embed (129280, 7168) h₀ [batch, seq_len, 7168]

参数量:129,280 × 7,168 = 926,604,800 ≈ 926.6M

STEP 1: Layer ℓ — Attention 前 RMSNorm
RMSNorm (Pre-Attention)
h_ℓ [B, S, 7168] RMSNorm₁ γ ∈ ℝ⁷¹⁶⁸ h̃_ℓ [B, S, 7168]

归一化后送入 MLA。参数:7,168 (仅 scale γ, 无 bias)

STEP 2: Layer ℓ — MLA 多头潜在注意力(核心)
Multi-head Latent Attention nₕ=128 d_c=512 d'_c=896

① KV 低秩压缩(Down Projection)

h̃_ℓ [B,S,7168] × W_DKV (512, 7168) c_t^KV [B,S,512]

参数量:512 × 7,168 = 3,670,016 ≈ 3.67M

② KV 上投影(Up Projection)

c_t^KV [B,S,512] × W_UK (16384, 512) k^C [B,S,16384] 拆分为 128 头 × 128 维
c_t^KV [B,S,512] × W_UV (16384, 512) v^C [B,S,16384] 拆分为 128 头 × 128 维

W_UK 参数:16,384 × 512 = 8,388,608 ≈ 8.39M

W_UV 参数:16,384 × 512 = 8,388,608 ≈ 8.39M

③ 解耦 RoPE Key

h̃_ℓ [B,S,7168] × W_KR (64, 7168) RoPE(·) k^R [B,S,64]

参数量:64 × 7,168 = 458,752 ≈ 0.46M

最终 key: k_i = [k_i^C(128); k^R(64)] = 192 维/头

④ Q 低秩压缩(Down Projection)

h̃_ℓ [B,S,7168] × W_DQ (896, 7168) c_t^Q [B,S,896]

参数量:896 × 7,168 = 6,422,528 ≈ 6.42M

⑤ Q 上投影(Up Projection)

c_t^Q [B,S,896] × W_UQ (16384, 896) q^C [B,S,16384] 拆分为 128 头 × 128 维
c_t^Q [B,S,896] × W_QR (8192, 896) RoPE(·) q^R [B,S,8192] 拆分为 128 头 × 64 维

W_UQ 参数:16,384 × 896 = 14,680,064 ≈ 14.68M

W_QR 参数:8,192 × 896 = 7,340,032 ≈ 7.34M

最终 query: q_i = [q_i^C(128); q_i^R(64)] = 192 维/头

⑥ Attention 计算

q_i 192 · k_j 192 ÷ √(128+64) Softmax · v_j^C 128 o_i [B,S,128]

缩放因子:√(dₕ + dₕᴿ) = √(128 + 64) = √192 ≈ 13.86

⑦ 输出投影

[o₁;...;o₁₂₈] [B,S,16384] × W_O (7168, 16384) u_ℓ [B,S,7168]

参数量:7,168 × 16,384 = 117,440,512 ≈ 117.44M

⑧ 残差连接

h_ℓ [B,S,7168] + u_ℓ [B,S,7168] h_ℓ + u_ℓ [B,S,7168]

📊 MLA 单层参数汇总:

W_DKV(3.67M) + W_UK(8.39M) + W_UV(8.39M) + W_KR(0.46M) + W_DQ(6.42M) + W_UQ(14.68M) + W_QR(7.34M) + W_O(117.44M) = 166.79M

💡 KV Cache 仅缓存 c_t^KV(512) + k^R(64) = 576/token vs 标准 MHA 的 32,768/token → 压缩比 56.9×

STEP 3: Layer ℓ — MoE 前 RMSNorm
RMSNorm (Pre-MoE)
h_ℓ + u_ℓ [B,S,7168] RMSNorm₂ γ ∈ ℝ⁷¹⁶⁸ x_ℓ [B,S,7168]

归一化后送入 MoE FFN。参数:7,168

STEP 4: Layer ℓ — DeepSeekMoE FFN
Mixture-of-Experts Nᵣ=256 Nₛ=1 Kᵣ=8 d_ff=2048

① Gate Network(路由决策)

x_ℓ[t] [7168] · E (256, 7168) Sigmoid s ∈ ℝ²⁵⁶ + bias b (256,) Top-8 g ∈ ℝ²⁵⁶

Expert Centroids E: 256 × 7,168 = 1,835,008 ≈ 1.84M

Bias Terms b: 256 ≈ 0.0003M

路由逻辑:s_i = σ(x·e_i), Top-8(s+b) → 归一化得 g_i

② Shared Expert(1 个,始终激活,SwiGLU)

x_ℓ [B,S,7168] × W_gate (2048, 7168) σ(W_up·x) (2048, 7168) × W_down (7168, 2048) FFN_s(x) [B,S,7168]

Gate Proj: 2,048 × 7,168 = 14,680,064 ≈ 14.68M

Up Proj: 2,048 × 7,168 = 14,680,064 ≈ 14.68M

Down Proj: 7,168 × 2,048 = 14,680,064 ≈ 14.68M

Shared Expert 合计:44.04M

③ Routed Experts(256 个,选 Top-8,SwiGLU)

x_ℓ [B,S,7168] 8× FFN_r^(i)(x) 各 [B,S,7168] Σ g_i · FFN_r^(i)(x)

单专家参数:3 × (2,048 × 7,168) = 44,040,192 ≈ 44.04M

256 专家总计:256 × 44.04M = 11,274,289,152 ≈ 11,274.3M

每个专家结构:SwiGLU(x) = (SiLU(W_g·x) ⊙ W_u·x) · W_d

④ MoE 输出 + 残差

h_ℓ + u_ℓ [B,S,7168] + FFN_s(x_ℓ) [B,S,7168] + Σᵢ gᵢ·FFN_rⁱ(x_ℓ) [B,S,7168] h_{ℓ+1} [B,S,7168]

📊 MoE 单层参数汇总:

Gate(1.84M) + Shared(44.04M) + Routed_256×(11,274.3M) + Norm(0.007M×2) = ≈11,320.2M

每 token 实际激活: Gate(1.84M) + Shared(44.04M) + 8×Expert(8×44.04M=352.32M) + Norm(0.014M) = ≈398.2M

STEP 5: 最终输出(61 层之后)
Final RMSNorm → LM Head → Logits
h_N [B,S,7168] RMSNorm_final γ ∈ ℝ⁷¹⁶⁸ h̃_N [B,S,7168] × W_LM (129280, 7168) logits [B,S,129280] Softmax P(token)

LM Head 参数:129,280 × 7,168 = 926,604,800 ≈ 926.6M

通常与 Token Embedding 共享权重(tie),此时不额外增加参数量

三、单层参数明细汇总
#组件Shape参数量 (M)激活模式
1RMSNorm₁ (pre-attn)(7168,)0.007✅ 全部
2W_DKV(512, 7168)3.67✅ 全部
3W_UK(16384, 512)8.39✅ 全部
4W_UV(16384, 512)8.39✅ 全部
5W_KR(64, 7168)0.46✅ 全部
6W_DQ(896, 7168)6.42✅ 全部
7W_UQ(16384, 896)14.68✅ 全部
8W_QR(8192, 896)7.34✅ 全部
9W_O(7168, 16384)117.44✅ 全部
MLA 小计166.79
10RMSNorm₂ (pre-MoE)(7168,)0.007✅ 全部
11Gate Centroids E(256, 7168)1.84✅ 全部
12Gate Bias b(256,)~0✅ 全部
13Shared Expert (3×mat)3×(2048,7168)44.04✅ 全部
14Routed Experts (256×3×mat)256×3×(2048,7168)11,274.29⚡ 仅 8/256
MoE 小计11,320.18
单层总计≈11,487.0~565M 激活
四、全模型参数总量交叉校验
组件计算公式参数量占比
Token Embedding129,280 × 7,168926.6M0.13%
61 × MLA 全部矩阵61 × 166.79M10,174.2M1.45%
61 × Shared Expert61 × 44.04M2,686.4M0.38%
61 × Routed Experts (256)61 × 11,274.29M687,731.7M97.65%
61 × Gate Network61 × 1.84M112.2M0.02%
61 × 3 × RMSNorm61 × 3 × 7,1681.3M≈0%
Final RMSNorm7,1680.007M≈0%
LM Head7,168 × 129,280926.6M0.13%
总计 (LM Head 独立) ≈702.6B 100%
总计 (LM Head tie embedding) ≈701.7B 100%

📌 官方公布:671B (Main Model)

我们估算 ≈702B,差异约 ~4.6%。可能原因:

• 实际某些层的专家数可能不均匀(早期层更少专家)

• 671B 可能排除了 gate bias、norm 等极小参数

• HuggingFace checkpoint: Main Model 671B + MTP Module 14B = 685B

• 精确数字需以开源权重的 state_dict keys 为准

五、每 Token 激活参数量交叉校验
组件计算激活量
Token Embedding129,280 × 7,168926.6M
61 × MLA (全部激活)61 × 166.79M10,174.2M
61 × Shared Expert (全部激活)61 × 44.04M2,686.4M
61 × 8 Routed Experts61 × 8 × 44.04M21,491.5M
61 × Gate (全部激活)61 × 1.84M112.2M
61 × 3 × RMSNorm61 × 3 × 7,1681.3M
Final RMSNorm7,1680.007M
LM Head7,168 × 129,280926.6M
每 Token 激活总计 ≈36.3B

📌 官方公布:37B 激活参数

我们估算 ≈36.3B,差异 <2%,基本吻合 ✅

剩余差距来自:可能的额外 bias 项、未计入的小参数等。

六、参数分布可视化
Routed Experts (256×)97.65%
MLA 全部矩阵1.45%
Embedding + LM Head0.26%
Shared Experts0.38%
Gate + Norm0.02%
七、关键设计洞察

🔑 MLA 为何高效?

• 标准 MHA: KV cache = 2 × 128 × 128 = 32,768/step
• MLA: KV cache = 512 + 64 = 576/step
• 压缩比 56.9×,长上下文推理显存大幅降低
• 代价:增加了 8 个低秩投影矩阵 (166.79M/层)

🔑 MoE 为何经济?

• 总参数 671B,但每 token 只激活 ~37B (5.5%)
• 256 个专家中只选 8 个,稀疏度 96.9%
• 1 个共享专家保证基础能力不退化
• Aux-loss-free 策略避免负载均衡损害性能

🔑 参数分布特点

97.65% 的参数在 routed experts 中
• MLA 仅占 1.45%,embedding/output 各占 0.13%
• 绝大多数参数是"暗物质"——每次推理只用一小部分
• 这就是 MoE "大而不贵"的本质

🔑 训练精度

• 首个在超大规模模型上验证 FP8 混合精度 训练
• FP8 存储 optimizer states + gradients
• BF16/FP32 保留 master weights
• 节省显存 + 加速训练,不影响收敛

八、MTP (Multi-Token Prediction) 模块

MTP 模块用于预训练时同时预测后续 D=1 个额外 token,增加训练信号密度。

组件Shape参数量说明
MTP Embedding(129280, 7168)926.6M与主模型共享或独立
MTP Transformer Block≈11.5B/层≈11.5B1 层 MLA + MoE
MTP LM Head(7168, 129280)926.6M辅助输出头
MTP 总计≈13.4B官方报告 ≈14B ✅