跳转至

六十一:DeepSeek-V3:MLA、DeepSeekMoE 与多 Token 预测

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484903&idx=1&sn=84519a78828338246bc41f759d18b8bd&chksm=f01eb69ec7693f882f43d955b849033e38802ad344840384983de583f0ebb199c3ce40ba2516#rd

1. 学习范围

img

本日围绕 DeepSeek-V3 的三项核心结构展开: - Multi-head Latent Attention,MLA通过联合低秩压缩 Key 和 Value,大幅降低自回归推理的 KV cache。

  • DeepSeekMoE通过细粒度路由专家和共享专家,在控制每 token 激活参数量的同时扩展总参数容量。

  • Multi-Token Prediction,MTP训练时让每个位置顺序预测多个未来 token,增加监督密度,并可复用于推测解码。

学习重点包括它们各自解决的问题、完整公式、V3 的具体参数、训练与推理数据流、常见误区和工程失败模式。

2. DeepSeek-V3 总览

DeepSeek-V3 是基于 Transformer 的 Mixture-of-Experts 语言模型。官方技术报告披露的关键数据如下: 项目 DeepSeek-V3 配置 主模型总参数量 671B 每个 token 激活参数量 37B Transformer 层数 61 隐藏维度 7168 上下文长度 128K 预训练 token 数 14.8T 预训练算力消耗 2.664M H800 GPU hours 完整训练算力消耗(预训练 + 上下文扩展 + 后训练) 2.788M H800 GPU hours 官方 Hugging Face 权重总大小对应约 685B 参数,其中包括 671B 主模型和约 14B MTP 模块参数。MTP 模块可以在普通推理时丢弃,因此不能把 685B 全部视为每次推理都必须参与的主模型参数。

img

V3 的主要架构关系可以概括为:

token embedding
  -> Transformer blocks,共 61 层
       attention: MLA
       FFN: 前 3 层为 dense FFN,其余层为 DeepSeekMoE
  -> main output head,预测 next token

训练时额外连接 1-depth MTP module,预测再下一个 token

img

MLA 和 DeepSeekMoE 已在 DeepSeek-V2 中验证;V3 在此基础上引入无辅助损失为主的负载均衡策略,并设置 MTP 训练目标。

3. 三项技术对应的系统瓶颈

三个模块解决的瓶颈不同: 技术 主要瓶颈 核心方法 主要收益 MLA 长上下文解码的 KV cache 容量占用与显存带宽压力 联合压缩 KV,仅缓存隐表征 latent 与位置 Key 显著减少 KV 缓存显存占用、降低显存读写开销 DeepSeekMoE 稠密模型单 Token 计算量随总参数量同步增长 每个 Token 动态路由激活少量专家子网络 扩充模型参数量与知识容量,同时约束推理 FLOPs MTP 单步 Next-Token 监督信号稀疏,表征仅适配单步预测 同时预测多个时序未来 Token 丰富训练监督信号;可用于投机解码加速推理 MLA 主要优化 attention 的推理状态,MoE 主要优化 FFN 的容量-计算关系,MTP 主要改变训练目标。三者不能互相替代。

4. 自回归推理中的 KV Cache

标准因果自注意力在生成第 t 个 token 时,需要让当前 Query 访问此前所有位置的 Key 和 Value。若每一步都重新计算历史 token,会产生大量重复计算,因此推理系统缓存每层历史 K/V。详细见五十一:KV cache。 对 L 层、序列长度 S、KV 头数 H_kv、每头维度 D_h 和每元素字节数 B,单请求 KV cache 近似为:

KV_bytes ~= 2 * L * S * H_kv * D_h * B
前面的 2 分别代表 Key 和 Value。批量、beam、多并发请求还会继续放大缓存。 长上下文解码通常不是只受矩阵 FLOPs 限制,还受显存容量和从 HBM 读取历史 KV 的带宽限制。减少每 token、每层需要缓存和读取的元素数,可以提高可服务并发并改善 decode 吞吐。

5. MHA、MQA、GQA 与 MLA 的缓存演进

5.1 Multi-Head Attention

MHA 为每个 Query 头保留独立 K/V 头。若有 H 个头,每个历史 token 每层缓存:

MHA elements = 2 * H * D_h
表达能力强,但 KV cache 最大。详细见二:Transformer 与 Decoding。 img

5.2 Multi-Query Attention

MQA 让所有 Query 头共享一组 K/V:

MQA elements = 2 * D_h
缓存显著降低,但过强共享可能影响质量或模型容量。

img

5.3 Grouped-Query Attention

GQA 使用少于 Query 头数的 H_kv 个 K/V 头,每组 Query 共享一个 K/V 头:

GQA elements = 2 * H_kv * D_h
它在 MHA 与 MQA 之间做离散折中。详细见五十一:KV cache。

img

5.4 Multi-head Latent Attention

MLA 不直接缓存展开后的各头 K/V,而是把 Key 和 Value 联合压缩到一个低维 latent,并额外保存用于 RoPE 的位置 key。各头内容 K/V 可从 latent 还原,或者在推理 kernel 中通过矩阵吸收直接在 latent 空间计算。

img

MLA 仍能形成每头不同的内容表示,但缓存不再正比于完整 H * D_h,是一种可学习的连续低秩压缩方案。

6. MLA 的符号与 V3 维度

设某一 attention 层第 t 个 token 的输入为:

h_t in R^d
DeepSeek-V3 的主要 MLA 配置为: 符号 含义 V3 数值 d模型隐藏维度 7168 nhQuery 头总数 128 dh单头总维度 128 dhR单头 RoPE 位置编码维度 64 dcKV 隐表征压缩维度 512 dc′Query 侧压缩维度 1536 最终 Query/Key 每头用于打分的维度为 d_h + d_h^R = 192,Value 每头维度为 128。

7. MLA 的 KV 联合压缩

先把隐藏状态压缩成共享的 KV latent:

c_t^KV = W^DKV h_t

img

形状为:

W^DKV: [d_c, d] = [512, 7168]
c_t^KV: [d_c] = [512]
再通过两个上投影分别恢复所有头的内容 Key 和 Value:

k_t^C = W^UK c_t^KV
v_t^C = W^UV c_t^KV

img

形状为:

W^UK, W^UV: [n_h * d_h, d_c] = [16384, 512]
k_t^C, v_t^C: [16384]
将结果切成 128 个头后,每个 k_t,i^Cv_t,i^C 都是 128 维。 这里的“联合压缩”指 K 和 V 共享同一个 c_t^KV,但使用不同的上投影矩阵恢复。它不是简单地令 K=V

本设计的目的是为了大幅降低 KV Cache 显存占用(这也是长上下文最痛的瓶颈)。 但是这样子做,RoPE无法进行矩阵吸收了,所以又设计了下面的方法:

8. 解耦 RoPE

矩阵吸收(Projection Absorption)成立的前提:整条路径上只有固定权重矩阵,不能混入随位置变化的算子。RoPE 每个位置 pos 的旋转矩阵都不一样,是位置相关变换;只要 W_UK 外面包着 RoPE,W_UK 就没法被合并进 Query 投影。 直接把 RoPE 应用于从 latent 恢复出的完整 Key,会使旋转矩阵依赖位置,从而妨碍把上投影矩阵吸收到 Query 侧。MLA 把内容子空间和位置子空间分开。标准的RoPE方法见四:位置编码与 RoPE。

img

img

位置 Key 为:

k_t^R = RoPE(W^KR h_t)
其维度为 d_h^R=64,并被所有 attention heads 共享。每头完整 Key 为:

k_t,i = [k_t,i^C ; k_t^R] in R^192
这种设计称为 decoupled RoPE: - 内容部分 k^C 不施加 RoPE,适合低秩压缩和矩阵吸收。

  • 位置部分 k^R 单独施加 RoPE,保留相对位置信息。

  • 解码时除了 KV latent,还需缓存每个位置的 k^R

位置 Key 跨头共享不代表 Query 的位置部分也共享;每个 Query 头有自己的 q_t,i^R

这样子,一个完整的K就被分成了这么两个部分:

img

前半部分代表语义的部分,不加入RoPE,不会对矩阵吸收有影响;而后半部分的带RoPE部分的,由于后面这部分是一个维度很小(论文64维)的部分,所以这部分的开销还是可控的。 总结就是:矩阵吸收是 MLA 为了弥补「升降维带来的额外算力」专门设计的优化手段,所以它才必须解决 RoPE 冲突。

9. Query 的低秩压缩

V3 也对 Query 做低秩压缩:

c_t^Q = W^DQ h_t
q_t^C = W^UQ c_t^Q
q_t^R = RoPE(W^QR c_t^Q)
q_t,i = [q_t,i^C ; q_t,i^R]

img

对应形状:

W^DQ: [d_c', d] = [1536, 7168]
c_t^Q: [1536]
W^UQ: [n_h * d_h, d_c'] = [16384, 1536]
W^QR: [n_h * d_h^R, d_c'] = [8192, 1536]
q_t,i^C: [128]
q_t,i^R: [64]
q_t,i: [192]
Query 压缩主要减少训练时保存 Query 投影相关激活的内存。自回归解码时只需要当前 token 的 Query,因此 c_t^Q 不像历史 KV 那样长期缓存。

10. MLA 的注意力输出

每个头的注意力为:

o_t,i = sum_{j<=t} softmax_j(
  q_t,i^T k_j,i / sqrt(d_h + d_h^R)
) * v_j,i^C

img

V3 的缩放分母是:

sqrt(128 + 64) = sqrt(192)
拼接所有头后通过输出投影:

u_t = W^O [o_t,1; ...; o_t,n_h]
W^O: [d, n_h * d_h] = [7168, 16384]
因果 mask 仍然存在。MLA 改变的是 Q/K/V 参数化与缓存形式,不改变因果 attention 的基本语义。

11. MLA 的缓存量估算

V3 的 MLA 每个历史 token、每层只需缓存:

c_t^KV: 512 elements
k_t^R:   64 elements
total:  576 elements
若用相同的 128 个 K/V 头、每头 128 维构造 MHA 基线,则每 token、每层需要:

MHA = 2 * 128 * 128 = 32768 elements
MLA = 512 + 64 = 576 elements
ratio = 576 / 32768 ~= 1.76%
理论元素数约减少 56.9 倍。这个比值只比较逻辑 KV 元素,不等于端到端吞吐一定提升 56.9 倍;实际收益还受数据类型、页管理、kernel、量化、并行和通信影响。

12. MLA 的矩阵吸收

若每次 decode 都把 c_j^KV 上投影成完整 K/V,会重新引入大量计算与内存流量。MLA 可以利用线性运算结合律,把部分上投影吸收到 Query 和输出投影中。 内容打分可改写为:

(q_t,i^C)^T (W_i^UK c_j^KV)
= ((W_i^UK)^T q_t,i^C)^T c_j^KV

img

于是可以先把当前 Query 投到 KV latent 空间,再直接与缓存的 c_j^KV 点积。 Value 路径也可把 W^UV 与各头输出投影的相关部分组合,避免为每个历史位置显式恢复完整 Value。实际系统通常为 prefill 和 decode 选择不同 kernel,因为两阶段的算术强度和序列形态不同。

13. MLA 的收益与边界

MLA 的主要收益是: - 显著减少长上下文 KV cache。

  • 降低 decode 读取历史状态的显存带宽。

  • 提升单卡或单实例可容纳的并发数。

  • Query 低秩压缩可减少训练激活内存。

主要代价和风险包括: - 参数化和高性能 kernel 比 MHA/GQA 更复杂。

  • latent 维度太小会形成信息瓶颈。

  • 解耦 RoPE 与矩阵吸收需要专门实现。

  • 量化 latent 和位置 key 时需要分别验证精度。

  • 端到端效果依赖推理框架是否真正使用 MLA 优化路径。

MLA 的低秩投影属于模型架构,不是 LoRA 参数高效微调。两者都出现低秩矩阵,但训练目标、参数角色和使用阶段不同。

14. 稠密 FFN 与 MoE FFN

Transformer 层通常由 attention 和 FFN 组成。稠密 FFN 对每个 token 激活同一组参数,因此增加 FFN 宽度会同步增加每 token FLOPs。 img

MoE 把 FFN 替换成多个专家,通过 router 为每个 token 选择少量专家:

total capacity: all experts
per-token compute: shared experts + selected routed experts
这使模型总参数量可以很大,而每 token 激活参数和计算量相对受控。代价是路由、跨设备 all-to-all、负载不均与部署复杂度。

15. DeepSeekMoE 的两项核心设计

DeepSeekMoE 相对传统 MoE 强调: - 细粒度专家分割把大专家拆成更多较小专家,并让每个 token 选择多个,以产生更丰富的专家组合。

  • 共享专家隔离保留始终激活的共享专家,学习跨领域通用知识;路由专家更专注于差异化知识。

共享专家不是 router 的保底候选,而是每个 token 都执行。路由专家才参与 Top-K 选择。

16. DeepSeek-V3 的 MoE 配置

V3 的前 3 层使用稠密 FFN,其余 FFN 替换为 MoE。每个 MoE 层包含: - 1 个共享专家。

  • 256 个路由专家。

  • 每个 token 选择 8 个路由专家。

  • 每个专家中间维度为 2048。

  • 每个 token 最多发送到 4 个节点。

因此每个 token 在 MoE 层会执行共享专家和 8 个路由专家,但总模型仍保存所有 256 个路由专家的参数。这是 671B 总参数与 37B 激活参数差距的主要来源。 前几层保持 dense 可以让低层通用表示稳定形成,也避免在输入分布尚未充分抽象时过早路由;这是一种架构选择,不表示所有 MoE 都必须保留 3 个 dense 层。

17. Router 打分与 Top-K 选择

img

设 token 表示为 u_t,第 i 个路由专家的中心向量为 e_i。V3 使用 sigmoid 计算亲和度:

s_i,t = sigmoid(u_t^T e_i)

img

选择 Top-K 专家后,未选专家权重置零,选中专家按原始亲和度归一化:

g'_i,t = s_i,t, if i is selected; otherwise 0
g_i,t = g'_i,t / sum_j g'_j,t

img

MoE 输出可写为:

h'_t = u_t
     + sum_{i=1}^{N_s} FFN_i^(shared)(u_t)
     + sum_{i=1}^{N_r} g_i,t * FFN_i^(routed)(u_t)

img

Sigmoid 分数彼此独立,Top-K 后再对选中分数归一化。不能把它直接等同于在 256 个专家上先做全局 softmax。

18. MoE 负载不均问题

如果 router 长期偏好少数专家,会出现: - 热门专家超载,其他专家空闲。

  • all-to-all 通信和计算等待最慢设备,形成 straggler。

  • 容量受限实现可能丢弃 token。

  • 专家缺少训练样本,产生路由坍塌。

  • 总参数很多,但有效容量没有被利用。

传统方案在语言建模损失之外增加 load-balancing auxiliary loss。辅助损失把每个专家的路由频率和平均概率推向均匀,但权重过大时会干扰语言建模目标,强迫本应专业化的领域 token 平均分散。

img

19. 无辅助损失负载均衡

DeepSeek-V3 为每个路由专家维护一个动态 bias b_i。选择专家时使用:

selection_score_i,t = s_i,t + b_i
但最终门控权重仍来自原始 s_i,t

g'_i,t = s_i,t, if s_i,t + b_i is in Top-K

img

每个训练 step 结束后,根据整个 batch 的专家负载更新 bias:

overloaded expert:  b_i <- b_i - gamma
underloaded expert: b_i <- b_i + gamma

img

这相当于一个闭环负载控制器。bias 只影响路由选择,不直接乘到专家输出,也不通过语言建模梯度学习,从而减少平衡目标对模型能力目标的干扰。 V3 的 gamma 在前 14.3T token 设为 0.001,最后 500B token 设为 0,使训练末期路由分布固定下来。

20. “Auxiliary-Loss-Free”的准确边界

V3 主要依靠动态 bias 做 batch-wise 负载平衡,但仍保留一个权重极小的 sequence-wise balance loss,用于防止单条序列内部出现极端不均:

L_bal = alpha * sum_i f_i * P_i
alpha = 0.0001

img

其中 f_i 是按原始 affinity 的 Top-K 统计得到的序列级归一化代理负载,P_i 表示该专家在序列上的平均归一化亲和度。由于主要路由还会加入动态 bias,f_i 不应与 bias 调整后的实际发送计数机械等同。

img

因此严谨表述是“主要负载均衡策略不依赖辅助损失”或“auxiliary-loss-free routing balance with a tiny complementary sequence-wise loss”,而不是“训练目标中绝对没有任何平衡辅助项”。

21. Batch-Wise 与 Sequence-Wise 平衡

动态 bias 根据整个训练 batch 更新,属于 batch-wise 平衡。它允许不同领域的序列选择不同专家,只要整体负载接近均衡,因此更有利于专家专业化。 强 sequence-wise 辅助损失要求每条序列内部都接近均匀。若一条序列属于代码领域,它仍被迫把 token 分散到所有专家,可能削弱领域专家形成。

img

论文消融显示,在实现相近 batch-wise 负载平衡时,batch-wise auxiliary loss 与无辅助损失方法可得到相近验证损失;关键优势很大程度来自更灵活的平衡粒度,而不只是“有没有 loss”这一名称差异。

22. 节点受限路由与通信

MoE 专家跨 GPU、跨节点部署后,一个 token 的 8 个专家可能分散在很多设备,触发昂贵 all-to-all 通信。V3 使用 node-limited routing,把每个 token 限制在最多 M=4 个节点。 节点选择依据每个节点上最高 K_r/M 个专家分数之和。V3 中 K_r=8M=4,因此可理解为按每节点最高 2 个候选专家的分数聚合后选择节点。 训练时路由专家均匀部署在 64 个 GPU、8 个节点上。限制节点数能减少跨节点 InfiniBand 流量,并配合 DualPipe 与通信 kernel 隐藏 all-to-all 延迟。

23. No Token Dropping 与容量管理

部分 MoE 系统为每个专家设置固定 capacity,专家超载时丢弃或旁路部分 token。这样能保持静态张量形状,却可能损伤模型质量。 V3 报告由于负载均衡有效,训练和推理都不丢 token。其含义是每个 token 的路由计算都被执行,不是“不限制专家负载”。系统仍需通过动态 bias、调度和推理时冗余专家部署控制热点。

24. DeepSeekMoE 的收益与代价

收益包括: - 总参数容量远大于每 token 激活参数。

  • 共享专家吸收共性知识,路由专家形成专业化。

  • 细粒度专家组合比少数大专家有更丰富的组合空间。

  • 无辅助损失为主的平衡减少能力损失。

代价包括: - Router 和 Top-K 引入离散、动态执行路径。

  • Expert parallelism 需要 all-to-all 通信。

  • 负载、节点故障和请求领域偏移会影响尾延迟。

  • 总权重仍需存储,单机部署并不会因为只激活 37B 就只需存 37B 参数。

“激活参数少”主要意味着每 token 计算量较低,不意味着模型下载体积和总显存自动等于激活参数量。

25. Next-Token Prediction 的监督结构

标准语言模型在位置 i 的隐藏状态 h_i^0 上预测下一 token t_{i+1}

P(t_{i+1} | t_1, ..., t_i) = OutHead(h_i^0)
长度为 T 的序列提供约 T 个 next-token 标签。每个隐藏状态只被直接要求预测一步未来,较远未来的约束需要通过多层表示和后续位置间接传递。

26. Multi-Token Prediction 的目标

MTP 把每个位置的预测范围扩展到多个未来 token。论文给出两个直觉: - 增加每段训练文本提供的监督信号,提高数据效率。

  • 迫使当前表示考虑更远未来,形成一定的预规划能力。

img

DeepSeek-V3 与“多个独立 head 并行预测不同未来位置”的方案不同。它使用串行 MTP 模块,并为每个预测深度保留完整因果链。

27. V3 的串行 MTP 模块

k 个 MTP 深度包含: - 与主模型共享的 embedding。

  • 与主模型共享的 output head。

  • 独立 Transformer block TRM_k

  • 投影矩阵 M_k in R^[d, 2d]

在位置 i,先组合上一深度表示和当前已知真值 token 的 embedding:

h_i'^k = M_k [
  RMSNorm(h_i^(k-1));
  RMSNorm(Emb(t_(i+k)))
]
拼接结果是 2d 维,经 M_k 投回 d 维。随后:

h_1:T-k^k = TRM_k(h_1:T-k'^k)
P_(i+k+1)^k = OutHead(h_i^k)
k 层 MTP 模块在获得到 t_(i+k) 为止的因果信息后,预测 t_(i+k+1),没有偷看目标 token。

img

28. MTP 损失

每个深度计算独立交叉熵:

L_MTP^k = -1/T * sum_i log P_i^k[t_i]
所有深度平均并乘权重:

L_MTP = lambda / D * sum_{k=1}^D L_MTP^k
L_total = L_NTP + L_MTP
V3 中: - D=1

  • 前 10T 训练 token 使用 lambda=0.3

  • 后 4.8T token 使用 lambda=0.1

后期降低 MTP 权重,可以让最终优化更聚焦主模型 next-token 目标。lambda 太高可能使附加目标压制主任务,太低则难以形成有效远期监督。

29. MTP 对主模型的影响

即使普通推理时丢弃 MTP 模块,训练阶段的 MTP loss 仍通过 h_i^0 反向传播到主模型,要求主模型隐藏状态包含足以预测更远未来的信息。 共享 embedding 和 output head 还让主模型与 MTP 使用一致的 token 表示和词表映射,并节省额外参数。论文消融在小型和大型 MoE 基线上都观察到多数 benchmark 改善,而且丢弃 MTP 后比较模型的普通推理成本相同。 MTP 改善主模型是训练效应,不意味着部署时必须保留额外模块。

30. MTP 与推测解码

MTP 模块可以作为 draft mechanism 提出额外 token,再由主模型验证。标准推测解码的关键是: - 草稿模块快速提出候选 token。

  • 目标模型并行计算候选位置的概率。

  • 按接受规则保留候选;拒绝后从目标分布修正采样。

在正确实现接受-拒绝算法时,推测解码不应改变目标模型输出分布;MTP 预测越准,接受率越高,加速越明显。 V3 报告额外 token 接受率约为 85% 到 90%,并在其实验配置中达到约 1.8 倍 TPS。这个数字依赖任务、batch、硬件、kernel 和服务负载,不能视为所有部署的固定收益。

31. MTP 的边界与失败模式

主要风险包括: - 训练使用真值前序 token,推测阶段使用候选 token,存在分布差异。

  • MTP loss 与主 next-token loss 可能产生梯度冲突。

  • 额外模块增加训练参数、激活和计算。

  • 接受率低时,验证开销可能抵消加速。

  • 共享 output head 节省参数,但也限制不同深度完全独立建模。

  • 未实现严格接受校正时,所谓“推测解码”可能改变输出质量或分布。

评估时要同时报告主模型质量、训练开销、MTP 接受率、每轮接受长度、TPS、时延和输出一致性。

32. 三项技术的协同关系

MLA、MoE 和 MTP 的协同可以从训练与推理两侧理解:

训练:
DeepSeekMoE 扩大参数容量但引入 all-to-all
MLA 压缩 attention 表示并节省激活
MTP 增加额外监督,但增加约 14B 训练模块
FP8、DualPipe 和通信优化承接系统成本

推理:
DeepSeekMoE 每 token 只算共享 + Top-8 routed experts
MLA 只缓存 512-d latent + 64-d RoPE key
MTP 可丢弃,或作为 draft 加速 decode
算法创新必须与 kernel、并行和硬件拓扑共同实现。只在模型定义里复刻公式,不一定能得到论文中的成本与吞吐。

33. 关键消融与证据边界

V3 论文报告: - 在 15.7B 总参数小型 MoE 和 228.7B 总参数大型 MoE 基线上,加入 1-depth MTP 后多数 benchmark 提升;测试时丢弃 MTP,因此普通推理成本相同。

  • 将纯辅助损失平衡替换为无辅助损失动态 bias 后,多数 benchmark 改善。

  • Batch-wise auxiliary loss 与动态 bias 在相近整体平衡下可得到相近验证损失,支持“平衡粒度更灵活”是重要原因。

  • MTP 额外 token 在多类生成任务上接受率约 85% 到 90%,报告约 1.8 倍 TPS。

这些是论文配置下的经验结果。不同模型规模、数据、专家数、并行拓扑和推理框架都需要重新消融。

34. 实现与调试指标

34.1 MLA 指标

  • 每层每 token 实际 KV cache bytes。

  • Prefill 与 decode 分阶段 latency。

  • latent reconstruction 或吸收路径的数值误差。

  • 不同上下文长度下的 attention 正确性。

  • KV cache 量化后的困惑度和长上下文回归。

34.2 MoE 指标

  • 每专家 token count、均值、最大值、变异系数。

  • Top-K 路由熵、专家利用率和专家专业化。

  • 每节点发送/接收 token 数与 all-to-all 时间。

  • 热点专家、尾部延迟和 token dropping 数。

  • 动态 bias 的分布、漂移速度和冻结后的稳定性。

34.3 MTP 指标

  • L_NTP、各深度 L_MTP^k 和梯度范数。

  • 丢弃 MTP 后主模型 benchmark。

  • 候选 token 接受率和平均接受长度。

  • 开启/关闭 MTP 的 TPS、P50/P99 延迟和成本。

  • 严格验证输出分布与质量是否保持。

35. 常见概念误区

35.1 MLA 等同于 MQA

不准确。MQA 让所有 Query 头共享一组显式 K/V;MLA 缓存共享 latent,但可通过不同上投影恢复每头内容表示,并另有解耦位置子空间。

35.2 37B 激活参数等于只需存储 37B 权重

错误。每 token 只计算部分专家,但路由可能选择任意专家,部署仍需保存或分布式承载 671B 主模型权重。

35.3 Auxiliary-loss-free 表示没有任何平衡辅助项

不严谨。主要 batch-wise 平衡使用动态 bias,但 V3 仍有 alpha=0.0001 的极小 sequence-wise balance loss 防止极端情况。

35.4 MTP 在 V3 中有两个额外预测模块

错误。V3 的 D=1,主模型预测下一 token,唯一附加模块预测再下一个 token,总计覆盖未来两个 token。

35.5 推测解码接受率高就可以跳过验证

错误。严格验证和拒绝修正是保持目标模型分布的关键。MTP 候选是草稿,不是未经检查的最终输出。

36. 紧凑知识总结

DeepSeek-V3:
671B total / 37B activated / 61 layers / d=7168 / 14.8T tokens

MLA:
h -> c^KV(512) -> per-head content K/V
h -> decoupled RoPE key(64)
cache per token per layer = 512 + 64 = 576 elements
Q 另压缩到 1536,128 heads,content 128 + RoPE 64

DeepSeekMoE:
前 3 层 dense,后续为 1 shared + 256 routed,Top-8
sigmoid affinity,selected score normalization
selection 用 s_i+b_i,gate weight 仍用原始 s_i
过载减 bias、欠载加 bias;每 token 最多到 4 nodes;no token dropping

MTP:
D=1
main h_i -> t_(i+1)
[h_i; Emb(t_(i+1))] -> one MTP block -> t_(i+2)
L = L_NTP + lambda * L_MTP
lambda: 前 10T 为 0.3,后 4.8T 为 0.1
普通推理可丢弃;推测解码可复用,论文报告 85%-90% 接受率、约 1.8x TPS

37. 参考资料

  • DeepSeek-V3 技术报告:https://arxiv.org/abs/2412.19437

  • DeepSeek-V3 官方仓库:https://github.com/deepseek-ai/DeepSeek-V3

  • DeepSeek-V3 官方模型卡:https://huggingface.co/deepseek-ai/DeepSeek-V3-Base

  • DeepSeek-V2 与 MLA:https://arxiv.org/abs/2405.04434

  • DeepSeekMoE 原论文:https://arxiv.org/abs/2401.06066

  • Better & Faster Large Language Models via Multi-token Prediction:https://arxiv.org/abs/2404.19737

  • 苏剑林 MLA 讲解:https://spaces.ac.cn/archives/10091

  • MoE 讲解:https://zhuanlan.zhihu.com/p/15797610465

  • MTP 讲解:https://zhuanlan.zhihu.com/p/15823898951

            预览时标签不可点
    

    <div class="