news 2026/6/6 12:58:49

(四)Deepseek v3 原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(四)Deepseek v3 原理

论文标题:DeepSeek-V3 Technical Report
发布时间:2024 年 12 月
论文地址:https://arxiv.org/abs/2412.19437
https://github.com/LRriver/DeepSeek-V3/blob/main/DeepSeek_V3.pdf
Github地址:https://github.com/deepseek-ai/DeepSeek-V3

一、基础架构

与DeepSeek V2一致,采用MLA和DeepSeek Moe框架。

区别: 与DeepSeek‐V2略有不同, DeepSeek‐V3使用Sigmoid函数计算亲和度分数,并对所有选定的亲和度分数进行归一化以生成门控值。

采用 Sigmoid 是为了让路由决策能够更容易地与动态偏置项结合,实现无损性能的负载均衡;而归一化则是为了确保门控权重的数值稳定性。

1.1 无辅助损失负载均衡(Auxiliary-Loss-Free Load Balancing.)

在 DeepSeek-V3 中,无辅助损失负载均衡(Auxiliary-Loss-Free Load Balancing)是一项重大的架构创新。它的核心思想是:不再通过强制性的损失函数(Loss)来“惩罚”模型,而是通过动态调整每个专家的“门槛”来平衡流量。

1.1.1 为什么需要它?(背景)

传统的 MoE 模型(如 DeepSeek-V2)会加入一个专门的“平衡损失函数”。如果模型把太多 token 发给同一个专家,Loss 就会变大。虽然这能强迫平衡,但却像是在训练时加了“枷锁”,会损害模型的最终性能,因为路由决策不再完全基于 token 与专家的匹配度(Affinity) 。

1.1.2 核心公式解析:路由决策

DeepSeek-V3 修改了专家选择(Routing)的逻辑。请看公式

这个公式可以拆解为三步来理解:

  • 第一步:计算原始亲和力 ()这是 token t 与专家 i 之间的匹配分,计算方式是 token 的隐藏状态与专家中心向量的点积再过 Sigmoid。这代表了“最理想”的选择。
  • 第二步:加上偏置项 (bi​) 进行“海选”这是最关键的一步。系统为每个专家 i 维护一个偏置项​​。在决定哪个 token 该去哪个专家时,看的不是原始分,而是加上偏置后的总分​ +​。
    • 如果专家 i 太闲了(负载低),系统会增大​,相当于给它“加分”,让更多 token 被顶进它的 Top-K 列表里。
    • 如果专家 i 太忙了(过载),系统会减小​,相当于调高它的准入门槛,把 token 挤到别的专家那里。
  • 第三步:保留原分作为权重注意:虽然选专家时参考了​,但一旦专家被选定,计算门控值(Gating Value)时,仍然使用原始亲和力得分。这意味着只决定“谁被选中”,不干预选中后的“分配权重”。

1.1.3. 偏置项是如何更新的?

不是通过反向传播(BP)学习的,而是根据每一步训练的实际情况实时调整的:

  • 监测负载:在每个训练步结束时,系统会统计当前 batch 中每个专家的实际工作量。
  • 动态步进
    • 如果专家过载(Overloaded),则 bi​←bi​−γ。
    • 如果专家闲置(Underloaded),则 bi​←bi​+γ。
    • 其中 γ 是一个超参数,叫“偏置更新速度”(Bias Update Speed)。

1.1.4. 总结:这样做的好处是什么?

  1. 性能更强:因为它取消了训练目标中的大额辅助损失,模型可以更专注于学习语言规律。
  2. 更灵活的专业化(Expert Specialization):实验证明,这种策略允许专家在不同领域(如数学、代码)进行更深度的专业化,而不是被迫在每个序列内都保持死板的平衡。
  3. 计算高效:它确保了专家并行的负载均衡,避免了计算资源的浪费

1.2补充序列级辅助损失(Complementary Sequence-Wise Auxiliary Loss)

类似于((二)DeepSeekMoE 原理-CSDN博客专家级平衡损失.

虽然 DeepSeek-V3 主要通过动态调整偏置项(Bias)在**批次(Batch)层面实现均衡,但为了防止在单个序列(Sequence)**内部出现极端的负载不均(例如一个长句子里的所有 token 全都挤向某几个专家),模型保留了这个极小权重的辅助损失。

以下是结合论文公式(见源文件第 9 页)的详细解释:

1.2.1 核心公式解析

总损失公式:

  • α(平衡因子):这是一个超参数。在 DeepSeek-V3 中,它的值被设置得极其小(α=0.0001),其目的仅仅是作为兜底,而不干扰主模型的性能学习。
  • fi​(实际负载):代表专家 i 在当前序列中被实际选中的频率。
  • Pi​(预期负载):代表专家 i 在当前序列中被倾向选中的概率。

1.2.2 参数拆解:它们到底在算什么?

1.2.3 为什么要让 fi​ 和 Pi​ 相乘?

这个公式的数学原理是利用了向量点积的特性:

  • 如果某些专家被模型高度偏好(大),且在实际路由中也被频繁选中(大),那么这两个大数相乘再相加,会导致显著升高
  • 为了降低这个 Loss,模型在训练时会被迫学会**“雨露均沾”**:把那些本来想挤在一起的 token 分散到不同的专家身上。

1.3 节点受限路由

确保每个token最多被发送至 M 个节点,这些节点根据分布在各节点上专家的前 Kr/M个最高亲和度得分总和进行选择。(Kr 表示激活的路由专家数量)

如果把专家比作分散在 8 间办公室(节点)的顾问,传统的路由是让你满大楼跑去找最强的那 8 个人;而节点限制路由则是要求你:“你最多只能选 4 间办公室进去,请在这 4 间办公室里找到对你最有帮助的 8 个顾问”

1.4无 Token 丢弃”(No Token-Dropping)

该模型在训练和推理过程中,不会因为专家负载不均而舍弃任何 token 的计算.

这与 DeepSeek-V2 有显著不同,以下是详细解释:

1. 为什么 V3 可以做到“不丢弃”?

在之前的 MoE 模型(如 DeepSeek-V2)中,为了防止某些专家由于分配了太多 token 而导致计算瓶颈,系统会设置一个“计算预算”。如果发往某个专家的 token 超过了预算,多出来的 token 就会被丢弃掉,不参与该层的 FFN 计算,从而保证训练速度。

DeepSeek-V3 取消这一机制的原因在于:

  • 训练阶段:得益于 V3 采用了创新的**“无辅助损失负载均衡策略”**(通过动态调整偏置项来平衡流量),模型在整个训练过程中都能保持非常出色的负载均衡。既然流量已经分得很均匀了,自然就不再需要通过丢弃 token 来保住计算效率。
  • 推理阶段:DeepSeek-V3 采用了专门的部署策略来确保推理时的负载平衡,因此同样不需要丢弃任何 token。

2. 与 DeepSeek-V2 的对比

  • DeepSeek-V2:存在 Token 丢弃现象。当设备过载时,会根据亲和力分数对 token 进行排序,丢弃得分最低的 token,以确保计算资源不被浪费。
  • DeepSeek-V3:完全不丢弃。每一个 token 都会经过完整的专家网络计算,这保证了模型性能的完整性,不会因为某些 token 被跳过而产生性能损失。

3. 这种设计的意义

  • 计算更完整:每个 token 都得到了应有的处理,模型对信息的利用率更高。
  • 训练更稳定:无需处理丢弃 token 带来的数值不连续性。
  • 架构更自信:敢于承诺“不丢弃”,本质上是因为其负载均衡算法(Auxiliary-Loss-Free Strategy)已经足够强大,从源头上解决了专家忙闲不均的问题

二、多token预测( MTP)

采用MTP训练目标,经观察可提升模型在评估基准上的整体表现。

DeepSeek‐V3研究并设定了多token预测(MTP)目标, 该目标将预测范围扩展到每个位置的多个未来词元。一方面,多token预测目标能强化训练信号, 可能提升数据效率。另一方面,MTP可使模型预先规划其表征,从而更好地预测未来词元。


三、FP8分块量化训练

为加速模型训练,核心计算内核(即GEMM操作)大多以FP8精度实现。

这些 GEMM操作接收FP8张量作为输入,并输出BF16或FP32格式的结果。如上图所示,与 Linear 算子相关的三个GEMM操作—— Fprop (前向传播)、 Dgrad (激活反向传播)和 Wgrad (权重反向传播)——均以FP8执行。该设计理论上使计算速度较原BF16方法提升一倍。此外, FP8 WgradGEMM允许将激活值以FP8格式存储供反向传播使用,从而显著降低内存消耗。

上图具体细节:fp8分块量化计算

精度下溢: 精度一网打尽


四、流水线(DualPipe)

Dispatch(派发):标记首先通过 all-to-all 通信从原始设备发送到目标专家所在的设备

Combine(聚合):计算完成后,必须将分布在各个设备上的专家输出结果重新发送回该标记最初所在的设备。只有这样,系统才能根据门控值(gating value)对多个专家的输出进行加权求和,从而得到该层最终的隐藏状态(hidden state)

流水线:流水线


五、配置

DeepSeek‐V3采用16路流水线并行(PP)

跨8节点的64路专 家并行(EP)

ZeRO‐1数据并行

高效流 水线并行的DualPipe算法

重叠前向与反向过程中的计算与通信阶段,解决了跨节点专家并行带来的高通信开销难 题。其次,开发了高效的跨节点全对全通信内核,以充分利用InfiniBand和NVLink带宽,并 保留专用于通信的流式多处理器(SMs)资源


参考:

1. https://zhuanlan.zhihu.com/p/16323685381

2. https://www.bilibili.com/video/BV18zcme1ELC?spm_id_from=333.788.videopod.sections&vd_source=d822e911a2ea10d2b0720afa70f0c357


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 12:58:26

Protel 99 SE功能锁机制详解与授权解锁完整指南

1. 问题现象与根源剖析刚装好Protel 99 SE,兴冲冲地想打开软件自带的示例图纸学习一下,结果一点开文件,软件不是直接加载,而是弹出一个“查找网络”的对话框。等它查找完,紧接着就跳出一个要求输入“锁码”的界面。我当…

作者头像 李华
网站建设 2026/6/6 12:57:20

VxWorks组件配置实战:从编译错误到稳定工控系统的构建指南

1. 项目概述:从“编译不通”到“配置通顺”的VxWorks组件配置实战刚接触VxWorks那会儿,最让人头疼的莫过于组件配置。辛辛苦苦写好的BSP(板级支持包)或者应用,一编译就是满屏的错误,根源往往就出在那些密密…

作者头像 李华
网站建设 2026/6/6 12:55:44

机器人行业的真正瓶颈,中美谁能率先攻克?

人形机器人的"数据战争":中美已经初见分晓 从跳舞到干活的距离:机器人到底缺了什么? 机器人,不该再跳舞 今年四月的北京亦庄,一场马拉松改写了机器人速度的边界。 一台名为"闪电"的人形机器人…

作者头像 李华
网站建设 2026/6/6 12:55:29

Godot资源解包终极指南:3分钟快速提取PCK文件内容

Godot资源解包终极指南:3分钟快速提取PCK文件内容 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 如果你正在寻找一款简单高效的Godot游戏资源解包工具,那么godot-unpacker绝…

作者头像 李华
网站建设 2026/6/6 12:55:26

一篇搞定C++基础语法与核心机制

个人专栏:《数据结构-初阶》《经典OJ题目》《C语言》《小白算法成长录》 欢迎大佬交流 本文代码已同步GitHub:GitHub - Stellen-z/DailyCode: pracetice GitHub 一、从C语言到C 1、为什么学习C C是在C语言基础上发展出来的语言,它不仅保留…

作者头像 李华