论文标题DeepSeek-V3 Technical Report发布时间2024 年 12 月论文地址https://arxiv.org/abs/2412.19437https://github.com/LRriver/DeepSeek-V3/blob/main/DeepSeek_V3.pdfGithub地址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. 总结这样做的好处是什么性能更强因为它取消了训练目标中的大额辅助损失模型可以更专注于学习语言规律。更灵活的专业化Expert Specialization实验证明这种策略允许专家在不同领域如数学、代码进行更深度的专业化而不是被迫在每个序列内都保持死板的平衡。计算高效它确保了专家并行的负载均衡避免了计算资源的浪费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分块量化计算精度下溢 精度一网打尽四、流水线DualPipeDispatch派发标记首先通过 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/163236853812. https://www.bilibili.com/video/BV18zcme1ELC?spm_id_from333.788.videopod.sectionsvd_sourced822e911a2ea10d2b0720afa70f0c357
(四)Deepseek v3 原理
论文标题DeepSeek-V3 Technical Report发布时间2024 年 12 月论文地址https://arxiv.org/abs/2412.19437https://github.com/LRriver/DeepSeek-V3/blob/main/DeepSeek_V3.pdfGithub地址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. 总结这样做的好处是什么性能更强因为它取消了训练目标中的大额辅助损失模型可以更专注于学习语言规律。更灵活的专业化Expert Specialization实验证明这种策略允许专家在不同领域如数学、代码进行更深度的专业化而不是被迫在每个序列内都保持死板的平衡。计算高效它确保了专家并行的负载均衡避免了计算资源的浪费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分块量化计算精度下溢 精度一网打尽四、流水线DualPipeDispatch派发标记首先通过 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/163236853812. https://www.bilibili.com/video/BV18zcme1ELC?spm_id_from333.788.videopod.sectionsvd_sourced822e911a2ea10d2b0720afa70f0c357