Toc
  1. DeepSeek-V3 技术报告
    1. 摘要
    2. 目录
    3. 1. 引言
      1. 我们的主要贡献包括
        1. 架构:创新的负载均衡策略和训练目标
        2. 预训练:追求极致训练效率
        3. 后训练:从 DeepSeek-R1 中知识蒸馏
      2. 核心评估结果总结
        1. 知识
        2. 代码、数学和推理
    4. 2. 架构
      1. 2.1 基本架构
        1. 2.1.1 多头潜在注意力
      2. 2.1.2 采用无辅助损失负载均衡的 DeepSeekMoE
        1. DeepSeekMoE 的基本架构
        2. 无辅助损失的负载均衡
        3. 互补的序列级辅助损失
        4. 节点限制路由
        5. 无 token 丢弃
      3. 2.2 多 token 预测
        1. MTP 模块
        2. MTP 训练目标
        3. MTP 在推理中的应用
    5. 3. 基础设施
      1. 3.1 计算集群
      2. 3.2 训练框架
        1. 3.2.1 DualPipe 和计算 - 通信重叠
        2. 3.2.2 跨节点全对全通信的高效实现
        3. 3.2.3 极低的内存占用和最小开销
      3. 3.3 FP8 训练
        1. 3.3.1 混合精度框架
        2. 3.3.2 通过量化和乘法提高精度
        3. 3.3.3 低精度存储和通信
      4. 3.4 推理和部署
        1. 3.4.1 预填充
        2. 3.4.2 解码
      5. 3.5 硬件设计建议
        1. 3.5.1 通信硬件
        2. 3.5.2 计算硬件
    6. 4. 预训练
      1. 4.1 数据构建
      2. 4.2 超参数
      3. 4.3 长上下文扩展
      4. 4.4 评估
        1. 4.4.1 评估基准
        2. 4.4.2 评估结果
      5. 4.5 讨论
        1. 4.5.1 多 token 预测的消融实验
        2. 4.5.2 无辅助损失平衡策略的消融实验
        3. 4.5.3 批次级负载均衡与序列级负载均衡
      6. 5. 训练后优化
        1. 5.1. 监督微调
        2. 5.2. 强化学习
        3. 5.2.1. 奖励模型
        4. 5.2.2. 组相对策略优化
        5. 5.3. 评估
        6. 5.3.1. 评估设置
      7. 5.3.2. 标准评估
      8. 5.3.3. 开放式评估
      9. 5.3.4. DeepSeek-V3 作为生成式奖励模型
      10. 5.4. 讨论
        1. 5.4.1. 从 DeepSeek-R1 中提炼知识
        2. 5.4.2. 自奖励机制
        3. 5.4.3. 多令牌预测评估
      11. 6. 结论、局限性与未来方向
      12. 附录
        1. A. 贡献与致谢
        2. B. 低精度训练的消融实验
        3. B.1 FP8 与 BF16 训练对比
        4. B.2 关于分块量化的讨论
        5. C. 基于 160 亿参数的有辅助损失和无辅助损失模型的专家专业化模式
Toc
0 results found
DeepSeek-V3 技术报告
2025/02/13

原文地址:https://github.com/deepseek-ai/DeepSeek-V3/blob/main/DeepSeek_V3.pdf

DeepSeek-V3 github:https://github.com/deepseek-ai/DeepSeek-V3

本文使用豆包翻译

DeepSeek-V3 技术报告

DeepSeek-AI research@deepseek.com

摘要

我们推出 DeepSeek-V3,这是一款强大的混合专家(MoE)语言模型,总参数达 6710 亿,每个 token 激活 370 亿参数。为实现高效推理和经济高效的训练,DeepSeek-V3 采用多头潜在注意力(MLA)和 DeepSeekMoE 架构,这两种架构在 DeepSeek-V2 中已得到充分验证。此外,DeepSeek-V3 首创了无辅助损失的负载均衡策略,并设定了多 token 预测训练目标,以提升性能。我们在 14.8 万亿个多样且高质量的 token 上对 DeepSeek-V3 进行预训练,随后进行监督微调(Supervised Fine-Tuning)和强化学习,充分发挥其能力。综合评估显示,DeepSeek-V3 性能优于其他开源模型,与领先的闭源模型相当。尽管性能卓越,DeepSeek-V3 的完整训练仅需 278.8 万个 H800 GPU 小时,训练过程也非常稳定,在整个训练过程中未出现任何不可恢复的损失激增或进行任何回滚操作。模型检查点可在https://github.com/deepseek-ai/DeepSeek-V3获取。

image-20250212221516414

目录

  1. 引言 4
  2. 架构 6 2.1 基本架构 6 2.1.1 多头潜在注意力 7 2.1.2 采用无辅助损失负载均衡的 DeepSeekMoE 8 2.2 多 token 预测 10
  3. 基础设施 11 3.1 计算集群 11 3.2 训练框架 12 3.2.1 双管道和计算 - 通信重叠 12 3.2.2 跨节点全对全通信的高效实现 13 3.2.3 极低的内存占用和最小开销 14 3.3 FP8 训练 14 3.3.1 混合精度框架 15 3.3.2 通过量化和乘法提高精度 16 3.3.3 低精度存储和通信 18 3.4 推理和部署 18 3.4.1 预填充 19 3.4.2 解码 19 3.5 硬件设计建议 20 3.5.1 通信硬件 20 3.5.2 计算硬件 20
  4. 预训练 22 4.1 数据构建 22 4.2 超参数 22 4.3 长上下文扩展 24 4.4 评估 24 4.4.1 评估基准 24 4.4.2 评估结果 25 4.5 讨论 26 4.5.1 多 token 预测的消融研究 26 4.5.2 无辅助损失平衡策略的消融研究 27 4.5.3 批量负载均衡与序列负载均衡 27
  5. 后训练 28 5.1 监督微调 28 5.2 强化学习 28 5.2.1 奖励模型 29 5.2.2 组相对策略优化 30 5.3 评估 30 5.3.1 评估设置 30 5.3.2 标准评估 32 5.3.3 开放式评估 33 5.3.4 DeepSeek-V3 作为生成式奖励模型 33 5.4 讨论 34 5.4.1 来自 DeepSeek-R 的蒸馏 34 5.4.2 自奖励 34 5.4.3 多 token 预测评估 35
  6. 结论、局限性和未来方向 35 A. 贡献和致谢 45 B. 低精度训练的消融研究 47 B.1 FP8 与 BF16 训练 47 B.2 关于块级量化的讨论 47 C. 基于 160 亿参数辅助损失和无辅助损失模型的专家专业化模式 48

1. 引言

近年来,大语言模型(LLMs)经历了快速的迭代和演进(Anthropic, 2024; Google, 2024; OpenAI, 2024a),与通用人工智能(AGI)的差距逐渐缩小。除了闭源模型,包括 DeepSeek 系列(DeepSeek-AI, 2024a,b,c; Guo 等人,2024)、LLaMA 系列(AI@Meta, 2024a,b; Touvron 等人,2023a,b)、Qwen 系列(Qwen, 2023, 2024a,b)和 Mistral 系列(Jiang 等人,2023; Mistral, 2024)在内的开源模型也在取得重大进展,努力缩小与闭源模型的差距。为了进一步拓展开源模型的能力边界,我们扩大了模型规模,推出了 DeepSeek-V3,这是一个拥有 6710 亿参数的大型混合专家(MoE)模型,每个 token 激活 370 亿参数。

我们以前瞻性的视角,始终追求强大的模型性能和经济的成本。因此,在架构方面,DeepSeek-V3 仍然采用多头潜在注意力(MLA)(DeepSeek-AI, 2024c)实现高效推理,采用 DeepSeekMoE(Dai 等人,2024)进行经济高效的训练。这两种架构在 DeepSeek-V2 中已得到验证,证明了它们在实现高效训练和推理的同时,能够保持强大的模型性能。除了基本架构,我们还实施了两种额外的策略来进一步提升模型能力。首先,DeepSeek-V3 首创了无辅助损失的负载均衡策略(Wang 等人,2024a),旨在最小化因促进负载均衡而对模型性能产生的负面影响。其次,DeepSeek-V3 采用了多 token 预测训练目标,我们观察到这有助于提高评估基准上的整体性能。

为了实现高效训练,我们支持 FP8 混合精度训练,并对训练框架进行了全面优化。低精度训练已成为高效训练的一种有前景的解决方案(Dettmers 等人,2022; Kalamkar 等人,2019; Narang 等人,2017; Peng 等人,2023b),其发展与硬件能力的提升密切相关(Luo 等人,2024; Micikevicius 等人,2022; Rouhani 等人,2023a)。在这项工作中,我们引入了 FP8 混合精度训练框架,并首次在超大规模模型上验证了其有效性。通过支持 FP8 计算和存储,我们实现了训练加速和 GPU 内存使用的减少。在训练框架方面,我们设计了双管道(DualPipe)算法实现高效的管道并行,减少了管道气泡,并通过计算 - 通信重叠隐藏了训练过程中的大部分通信开销。这种重叠确保了随着模型规模的进一步扩大,只要我们保持恒定的计算与通信比率,就仍然可以在节点间采用细粒度的专家并行,同时实现近乎零的全对全通信开销。此外,我们还开发了高效的跨节点全对全通信内核,充分利用 InfiniBand(IB)和 NVLink 带宽。我们还对内存占用进行了精心优化,使得在不使用昂贵的张量并行的情况下也能训练 DeepSeek-V3。综合这些努力,我们实现了高训练效率。

在预训练阶段,我们在 14.8 万亿个高质量且多样的 token 上训练 DeepSeek-V3。预训练过程非常稳定,在整个训练过程中,我们没有遇到任何不可恢复的损失激增,也无需回滚。接下来,我们对 DeepSeek-V3 进行了两阶段的上下文长度扩展。在第一阶段,最大上下文长度扩展到 32K,在第二阶段,进一步扩展到 128K。之后,我们对 DeepSeek-V3 的基础模型进行后训练,包括监督微调(SFT)和强化学习(RL),使其符合人类偏好并进一步释放其潜力。在后训练阶段,我们从 DeepSeekR1 系列模型中提炼推理能力,同时仔细平衡模型准确性和生成长度。

image-20250212221621145

我们在一系列综合基准上对 DeepSeek-V3 进行评估。尽管训练成本经济,但综合评估显示,DeepSeek-V3 基础模型已成为目前最强的开源基础模型,尤其是在代码和数学方面。其聊天版本在一系列标准和开放式基准上也优于其他开源模型,性能与领先的闭源模型(包括 GPT-4o 和 Claude-3.5-Sonnet)相当。

最后,我们再次强调 DeepSeek-V3 经济的训练成本,如表 1 所示,这是通过我们对算法、框架和硬件的优化协同设计实现的。在预训练阶段,训练 DeepSeek-V3 每万亿个 token 仅需 18 万个 H800 GPU 小时,即在我们拥有 2048 个 H800 GPU 的集群上训练 3.7 天。因此,我们的预训练阶段在不到两个月的时间内完成,耗费 266.4 万个 GPU 小时。结合上下文长度扩展所需的 11.9 万个 GPU 小时和后训练所需的 5000 个 GPU 小时,DeepSeek-V3 的完整训练仅需 278.8 万个 GPU 小时。假设 H800 GPU 的租赁价格为每 GPU 小时 2 美元,我们的总训练成本仅为 557.6 万美元。需要注意的是,上述成本仅包括 DeepSeek-V3 的正式训练,不包括与架构、算法或数据的前期研究和消融实验相关的成本。

我们的主要贡献包括

架构:创新的负载均衡策略和训练目标

  • 在 DeepSeek-V2 的高效架构基础上,我们首创了无辅助损失的负载均衡策略,最大限度地减少了因促进负载均衡而导致的性能下降。
  • 我们研究了多 token 预测(MTP)目标,并证明它对模型性能有益。它还可用于推测解码以加速推理。

预训练:追求极致训练效率

  • 我们设计了 FP8 混合精度训练框架,并首次在超大规模模型上验证了 FP8 训练的可行性和有效性。
  • 通过算法、框架和硬件的协同设计,我们克服了跨节点 MoE 训练中的通信瓶颈,实现了近乎完全的计算 - 通信重叠。这显著提高了我们的训练效率,降低了训练成本,使我们能够在不增加额外开销的情况下进一步扩大模型规模。以仅 266.4 万个 H800 GPU 小时的经济成本,我们在 14.8 万亿个 token 上完成了 DeepSeek-V3 的预训练,打造出目前最强的开源基础模型。预训练后的后续训练阶段仅需 10 万个 GPU 小时。

后训练:从 DeepSeek-R1 中知识蒸馏

  • 我们引入了一种创新方法,将长思维链(CoT)模型(特别是 DeepSeek R1 系列模型之一)的推理能力蒸馏到标准 LLMs 中,尤其是 DeepSeek-V3。我们的流程巧妙地将 R1 的验证和反思模式融入 DeepSeek-V3,显著提高了其推理性能。同时,我们还控制了 DeepSeek-V3 的输出风格和长度。

核心评估结果总结

知识

(1)在 MMLU、MMLU-Pro 和 GPQA 等教育基准上,DeepSeek-V3 优于所有其他开源模型,在 MMLU 上得分为 88.5,在 MMLU-Pro 上为 75.9,在 GPQA 上为 59.1。其性能与 GPT-4o 和 Claude-Sonnet-3.5 等领先闭源模型相当,缩小了开源和闭源模型在该领域的差距。(2)在事实验证基准上,DeepSeek-V3 在 SimpleQA 和 Chinese SimpleQA 上均展现出优于开源模型的性能。虽然在英语事实知识(SimpleQA)方面落后于 GPT-4o 和 Claude-Sonnet-3.5,但在中文事实知识(Chinese SimpleQA)方面超过了这些模型,凸显了其在中文事实知识方面的优势。

代码、数学和推理

(1)DeepSeek-V3 在所有非长思维链的开源和闭源模型中,在数学相关基准上实现了最先进的性能。值得注意的是,它在特定基准(如 MATH-500)上甚至超过了 o1-preview,展示了其强大的数学推理能力。(2)在编码相关任务中,DeepSeek-V3 在编码竞赛基准(如 LiveCodeBench)中表现最佳,巩固了其在该领域的领先地位。在工程相关任务中,虽然 DeepSeek-V3 的表现略低于 Claude-Sonnet-3.5,但仍大幅领先其他所有模型,展示了其在各种技术基准上的竞争力。

在本文的其余部分,我们首先详细阐述 DeepSeek-V3 的模型架构(第 2 节)。随后,我们介绍我们的基础设施,包括计算集群、训练框架、对 FP8 训练的支持、推理部署策略以及对未来硬件设计的建议。接下来,我们描述预训练过程,包括训练数据的构建、超参数设置、长上下文扩展技术、相关评估以及一些讨论(第 4 节)。之后,我们讨论后训练工作,包括监督微调(SFT)、强化学习(RL)、相应的评估和讨论(第 5 节)。最后,我们总结这项工作,讨论 DeepSeek-V3 的现有局限性,并提出未来研究的潜在方向(第 6 节)。

2. 架构

我们首先介绍 DeepSeek-V3 的基本架构,其特点是采用多头潜在注意力(MLA)(DeepSeek-AI, 2024c)实现高效推理,采用 DeepSeekMoE(Dai 等人,2024)进行经济高效的训练。然后,我们提出多 token 预测(MTP)训练目标,我们观察到这有助于提高评估基准上的整体性能。对于其他未明确提及的细节,DeepSeek-V3 遵循 DeepSeekV2(DeepSeek-AI, 2024c)的设置。

2.1 基本架构

image-20250212222238020

DeepSeek-V3 的基本架构仍在 Transformer(Vaswani 等人,2017)框架内。为实现高效推理和经济高效的训练,DeepSeek-V3 还采用了 MLA 和 DeepSeekMoE,这两种架构已在 DeepSeek-V2 中得到充分验证。与 DeepSeek-V2 不同的是,我们为 DeepSeekMoE 引入了无辅助损失的负载均衡策略(Wang 等人,2024a),以减轻为确保负载平衡而对性能造成的下降。图 2 展示了 DeepSeek-V3 的基本架构,我们将在本节简要回顾 MLA 和 DeepSeekMoE 的细节。

2.1.1 多头潜在注意力

对于注意力机制,DeepSeek-V3 采用 MLA 架构。设$d$表示嵌入维度,$n_{h}$表示注意力头的数量,$d_{h}$表示每个头的维度,$h_{t} \in \mathbb{R}^{d}$表示给定注意力层中第$t$个 token 的注意力输入。MLA 的核心是对注意力键和值进行低秩联合压缩,以减少推理过程中的键值(KV)缓存:

$c_{t}^{K V}=W^{D K V} h_{t} \tag{1}$

$\left[k_{t, 1}^{C} ; k_{t, 2}^{C} ; \ldots ; k_{t, n_{h}}^{C}\right]=k_{t}^{C}=W^{U K} c_{t}^{K V} \tag{2}$

$k_{t}^{R}=RoPE\left(W^{K R} h_{t}\right) \tag{3}$

$k_{t, i}=\left[k_{t, i}^{C} ; k_{t}^{R}\right] \tag{4}$

$\left[v_{t, 1}^{C} ; v_{t, 2}^{C} ; \ldots ; v_{t, n_{h}}^{C}\right]=v_{t}^{C}=W^{U V} c_{t}^{K V} \tag{5}$

其中,$c_{t}^{K V} \in \mathbb{R}^{d_{c}}$是键和值的压缩潜在向量;$d_{c}(\ll d_{h} n_{h})$表示 KV 压缩维度;$W^{D K V} \in \mathbb{R}^{d_{c} \times d}$表示下投影矩阵;$WUK$,$W^{U V} \in \mathbb{R}^{d_{h} n_{h} \times d_{c}}$分别是键和值的上投影矩阵;$W^{K R} \in \mathbb{R}^{d_{h}^{R} \times d}$是用于生成携带旋转位置嵌入(RoPE)(Su 等人,2024)的解耦键的矩阵;RoPE 表示应用 RoPE 矩阵的操作;$[\because \cdot]$表示连接。注意,对于 MLA,在生成过程中仅需缓存蓝色框中的向量(即$c_{t}^{K V}$和$k_{t}^{R}$),这在保持与标准多头注意力(MHA)(Vaswani 等人,2017)相当性能的同时,显著减少了 KV 缓存。

对于注意力查询,我们也进行了低秩压缩,这可以减少训练过程中的激活内存:

$c_{t}^{Q}=W^{D Q} h_{t} \tag{6}$

$\left[q_{t, 1}^{C} ; q_{t, 2}^{C} ; \ldots ; q_{t, n_{h}}^{C}\right]=q_{t}^{C}=W^{U Q} c_{t}^{Q} \tag{7}$

$q_{t, i}=\left[q_{t, i}^{C} ; q_{t, i}^{R}\right] \tag{9}$

其中,$c_{t}^{Q} \in \mathbb{R}^{d_{c}’}$是查询的压缩潜在向量;$d_{c}’(\ll d_{h} n_{h})$表示查询压缩维度;$W^{D \bar{Q}} \in \mathbb{R}^{d_{c}’ \times d}$ 、$W^{U Q} \in \mathbb{R}^{d_{h} n_{h} \times d_{c}’}$分别是查询的下投影和上投影矩阵;$W^{Q R} \in R^{d_{h}^{R} n_{h} \times d_{c}’}$是用于生成携带 RoPE 的解耦查询的矩阵。

最终,注意力查询($(q_{t, i})$)、键($(k_{j, i})$)和值($(v_{j, i}^{C})$)相结合,产生最终的注意力输出$u_{r}$:

$o_{t, i}=\sum_{j=1}^{t} Softmax_{j}\left(\frac{q_{t, i}^{T} k_{j, i}}{\sqrt{d_{h}+d_{h}^{R}}}\right) v_{j, i’}^{C} \tag{10}$

$u_{t}=W^{O}\left[o_{t, 1} ; o_{t, 2} ; \ldots ; o_{t, n_{h}}\right] \tag{11}$

其中,$W^{O} \in \mathbb{R}^{d \times d_{h} n_{h}}$表示输出投影矩阵。

2.1.2 采用无辅助损失负载均衡的 DeepSeekMoE

DeepSeekMoE 的基本架构

对于前馈网络(FFNs),DeepSeek-V3 采用 DeepSeekMoE 架构(Dai 等人,2024)。与传统的 MoE 架构(如 GShard(Lepikhin 等人,2021))相比,DeepSeekMoE 使用更细粒度的专家,并将部分专家分离为共享专家。设$u_{t}$表示第$t$个 token 的 FFN 输入,我们按如下方式计算 FFN 输出$h_{t}’$:

$h_{t}’=u_{t}+\sum_{i=1}^{N_{s}} FFN_{i}^{(s)}\left(u_{t}\right)+\sum_{i=1}^{N_{r}} g_{i, t} FFN_{i}^{(r)}\left(u_{t}\right) \tag{12}$

$g_{i, t}=\frac{g_{i, t}’}{\sum_{j=1}^{N_{r}} g_{j, t}’} \tag{13}$ $g_{i, t}’= \begin{cases}s_{i, t}, & s_{i, t} \in Topk\left(\left{s_{j, t} | 1 \leq j \leq N_{r}\right}, K_{r}\right), \ 0, & otherwise \end{cases} \tag{14}$

$s_{i, t}=Sigmoid\left(u_{t}^{T} e_{i}\right) \tag{15}$

其中,$N_{s}$和$N_{r}$分别表示共享专家和路由专家的数量;$FFN_{i}^{(s)}(\cdot)$和$FFN_{i}^{(r)}(\cdot)$分别表示第$i$个共享专家和第$i$个路由专家;$K$表示激活的路由专家数量;$g_{i, t}$是第$i$个专家的门控值;$s_{i, t}$是 token 与专家的亲和度;$e_{i}$是第$i$个路由专家的质心向量;$Topk(\cdot, K)$表示在为第$t$个 token 和所有路由专家计算的亲和度分数中,包含$K$个最高分的集合。与 DeepSeek-V2 略有不同,DeepSeek-V3 使用 sigmoid 函数计算亲和度分数,并对所有选定的亲和度分数进行归一化以生成门控值。

无辅助损失的负载均衡

对于 MoE 模型,专家负载不均衡会导致路由崩溃(Shazeer 等人,2017),并降低专家并行场景下的计算效率。传统解决方案通常依赖辅助损失(Fedus 等人,2021; Lepikhin 等人,2021)来避免负载不均衡。然而,过大的辅助损失会损害模型性能(Wang 等人,2024a)。为了在负载平衡和模型性能之间实现更好的权衡,我们首创了无辅助损失的负载均衡策略(Wang 等人,2024a)以确保负载平衡。具体来说,我们为每个专家引入一个偏差项$b_{i}$,并将其添加到相应的亲和度分数$s_{i, t}$中,以确定前$K$路由:

$g_{i, t}’= \begin{cases}s_{i, t}, & s_{i, t}+b_{i} \in Topk\left(\left{s_{j, t}+b_{j} | 1 \leq j \leq N_{r}\right}, K_{r}\right), \ 0, & otherwise \end{cases} \tag{16}$

注意,偏差项仅用于路由。与 FFN 输出相乘的门控值仍从原始亲和度分数$s_{i, t}$导出。在训练过程中,我们持续监控每个训练步骤中整个批次的专家负载。在每个步骤结束时,如果相应专家过载,我们将偏差项减小$\gamma$;如果相应专家负载不足,则将其增加$\gamma$,其中$\gamma$是一个称为偏差更新速度的超参数。通过动态调整,DeepSeek-V3 在训练过程中保持专家负载平衡,并且比仅通过辅助损失促进负载平衡的模型表现更好。

互补的序列级辅助损失

尽管 DeepSeek-V3 主要依靠无辅助损失策略实现负载平衡,但为了防止单个序列内出现极端不平衡,我们还采用了互补的序列级平衡损失:

$\mathcal{L}{Bal}=\alpha \sum{i=1}^{N_{r}} f_{i} P_{i} \tag{17}$

$f_{i}=\frac{N_{r}}{K_{r} T} \sum_{t=1}^{T} \mathbb{1}\left(s_{i, t} \in Topk\left(\left{s_{j, t} | 1 \leq j \leq N_{r}\right}, K_{r}\right)\right) \tag{18}$

$s_{i, t}’=\frac{s_{i, t}}{\sum_{j=1}^{N_{r}} s_{j, t}} \tag{19}$

$P_{i}=\frac{1}{T} \sum_{t=1}^{T} s_{i, t’}’ \tag{20}$

其中,平衡因子$\alpha$是一个超参数,对于 DeepSeek-V3 将被赋予一个极小的值;$\mathbb{1}$表示指示函数;$T$表示序列中的 token 数量。序列级平衡损失促使每个序列上的专家负载保持平衡。

image-20250212224325793

节点限制路由

与 DeepSeek-V2 使用的设备限制路由类似,DeepSeek-V3 也采用受限路由机制来限制训练期间的通信成本。简而言之,我们确保每个 token 最多被发送到$M$个节点,这些节点根据分布在每个节点上的专家的最高$\frac{K_{r}}{M}$个亲和度分数之和来选择。在这种约束下,我们的 MoE 训练框架几乎可以实现完全的计算 - 通信重叠。

无 token 丢弃

由于有效的负载平衡策略,DeepSeek-V3 在整个训练过程中保持良好的负载平衡。因此,DeepSeek-V3 在训练期间不会丢弃任何 token。此外,我们还实施了特定的部署策略以确保推理负载平衡,所以 DeepSeek-V3 在推理期间也不会丢弃 token。

2.2 多 token 预测

受 Gloeckle 等人(2024)的启发,我们为 DeepSeek-V3 研究并设置了多 token 预测(MTP)目标,将预测范围扩展到每个位置的多个未来 token。一方面,MTP 目标使训练信号更加密集,可能提高数据效率。另一方面,MTP 可能使模型能够预先规划其表示,以便更好地预测未来 token。图 3 展示了我们的 MTP 实现方式。与 Gloeckle 等人(2024)使用独立输出头并行预测$D$个额外 token 不同,我们按顺序预测额外 token,并在每个预测深度保持完整的因果链。我们在本节介绍 MTP 实现的详细信息。

MTP 模块

具体来说,我们的 MTP 实现使用$D$个顺序模块来预测$D$个额外 token。第$k$个 MTP 模块由一个共享嵌入层$Emb$、一个共享输出头$OutHead$、一个 Transformer 块$TRM_{k}(\cdot)$和一个投影矩阵$M_{k} \in \mathbb{R}^{d \times 2 d}$组成。对于第$i$个输入 token $t_{i}$,在第$k$个预测深度,我们首先将第$i$个 token 在第$k - 1$深度的表示$h_{i}^{k - 1} \in \mathbb{R}^{d}$与第$(i + k)$个 token 的嵌入$Emb(t_{i + k}) \in \mathbb{R}^{d}$通过线性投影进行组合:

$h_{i}^{\prime k}=M_{k}\left[RMSNorm\left(h_{i}^{k - 1}\right) ; RMSNorm\left(Emb\left(t_{i + k}\right)\right)\right] \tag{21}$

其中,$[\because \cdot]$表示连接。特别地,当$k = 1$时,$h_{i}^{k - 1}$指的是主模型给出的表示。注意,对于每个 MTP 模块,其嵌入层与主模型共享。组合后的$h_{i}^{\prime k}$作为第$k$深度的 Transformer 块的输入,以产生当前深度的输出表示

$h_{i}^{k}$: $h_{1: T - k}^{k}=TRM_{k}\left(h_{1: T - k}^{\prime k}\right) \tag{22}$

其中,$T$表示输入序列长度,$i:j$表示切片操作(包括左右边界)。最后,以$h_{i}^{k}$为输入,共享输出头将计算第$k$个额外预测 token 的概率分布$P_{i + 1 + k}^{k} \in \mathbb{R}^{V}$,其中$V$是词汇表大小:

$P_{i + k + 1}^{k}= OutHead\left(h_{i}^{k}\right) \tag{23}$

输出头$OutHead(·)$将表示线性映射到 logits,然后应用 Softmax 函数计算第$k$个额外 token 的预测概率。此外,对于每个 MTP 模块,其输出头与主模型共享。我们保持预测因果链的原则与 EAGLE(Li 等人,2024b)类似,但 EAGLE 的主要目标是推测解码(Leviathan 等人,2023; Xia 等人,2023),而我们利用 MTP 来改进训练。

MTP 训练目标

对于每个预测深度,我们计算一个交叉熵损失$L_{MTP }^{k}$:

$\mathcal{L}{MTP }^{k}=CrossEntropy\left(P{2 + k: T + 1}^{k}, t_{2 + k: T + 1}\right)=-\frac{1}{T} \sum_{i=2 + k}^{T + 1} log P_{i}^{k}\left[t_{i}\right] \tag{24}$

其中,$T$表示输入序列长度,$t_{i}$表示第$i$个位置的真实 token,$P_{i}^{k}[t_{i}]$表示由第$k$个 MTP 模块给出的$t_{i}$的相应预测概率。最后,我们计算所有深度的 MTP 损失的平均值,并乘以一个加权因子$\lambda$,得到整体的 MTP 损失$L_{MTP }$,作为 DeepSeek-V3 的额外训练目标:

$\mathcal{L}{MTP}=\frac{\lambda}{D} \sum{k=1}^{D} \mathcal{L}_{MTP}^{k} \tag{25}$

MTP 在推理中的应用

我们的 MTP 策略主要旨在提高主模型的性能,因此在推理时,我们可以直接丢弃 MTP 模块,主模型可以独立正常运行。此外,我们还可以将这些 MTP 模块重新用于推测解码,以进一步提高生成速度。

3. 基础设施

image-20250212224510218

3.1 计算集群

DeepSeek-V3 在配备 2048 个 NVIDIA H800 GPU 的集群上进行训练。H800 集群中的每个节点包含 8 个通过 NVLink 和 NVSwitch 在节点内连接的 GPU。在不同节点之间,使用 InfiniBand(IB)互连来促进通信。

3.2 训练框架

DeepSeek-V3 的训练由 HAI-LLM 框架支持,这是一个由我们的工程师全新开发的高效轻量级训练框架。总体而言,DeepSeek-V3 采用 16 路管道并行(PP)(Qi 等人,2023a)、跨 8 个节点的 64 路专家并行(EP)(Lepikhin 等人,2021)和 ZeRO-1 数据并行(DP)(Rajbhandari 等人,2020)。

为了便于 DeepSeek-V3 的高效训练,我们进行了细致的工程优化。首先,我们设计了 DualPipe 算法实现高效的管道并行。与现有的 PP 方法相比,DualPipe 的管道气泡更少。更重要的是,它在正向和反向过程中重叠了计算和通信阶段,从而解决了跨节点专家并行带来的高通信开销挑战。其次,我们开发了高效的跨节点全对全通信内核,以充分利用 IB 和 NVLink 带宽,并节省用于通信的流式多处理器(SMs)。最后,我们对训练期间的内存占用进行了精心优化,从而使我们能够在不使用昂贵的张量并行(TP)的情况下训练 DeepSeek-V3。

3.2.1 DualPipe 和计算 - 通信重叠

对于 DeepSeek-V3,跨节点专家并行带来的通信开销导致计算与通信的比率约为 1:1,效率较低。为了应对这一挑战,我们设计了一种创新的管道并行算法 DualPipe,它不仅通过有效地重叠正向和反向计算 - 通信阶段来加速模型训练,还减少了管道气泡。

image-20250212224533438

DualPipe 的关键思想是在一对单独的正向和反向块内重叠计算和通信。具体来说,我们将每个块分为四个组件:注意力、全对全分发、MLP 和全对全组合。特别地,对于反向块,注意力和 MLP 都像在 ZeroBubble(Qi 等人,2023b)中一样进一步分为两部分:输入反向和权重反向。此外,我们还有一个 PP 通信组件。如图 4 所示,对于一对正向和反向块,我们重新排列这些组件,并手动调整用于通信与计算的 GPU SMs 的比例。在这种重叠策略中,我们可以确保在执行过程中全对全和 PP 通信都能被完全隐藏。鉴于这种高效的重叠策略,完整的 DualPipe 调度如图 5 所示。它采用双向管道调度,从管道的两端同时馈入微批次,并且大部分通信可以完全重叠。这种重叠还确保了随着模型进一步扩展,只要我们保持恒定的计算与通信比率,我们仍然可以在节点间采用细粒度的专家并行,同时实现近乎零的全对全通信开销。

此外,即使在没有高通信负担的更一般场景中,DualPipe 仍然具有效率优势。在表 2 中,我们总结了不同 PP 方法的管道气泡和内存使用情况。如表所示,与 ZB1P(Qi 等人,2023b)和 1F1B(Harlap 等人,2018)相比,DualPipe 显著减少了管道气泡,同时仅将峰值激活内存增加了$\frac{1}{P P}$倍 。虽然 DualPipe 需要保留两份模型参数,但由于我们在训练期间使用了较大的 EP 大小,这并不会显著增加内存消耗。与 Chimera(Li 和 Hoefler, 2021)相比,DualPipe 只要求管道阶段和微批次能被 2 整除,而不要求微批次能被管道阶段整除。此外,对于 DualPipe,随着微批次数量的增加,气泡和激活内存都不会增加。

3.2.2 跨节点全对全通信的高效实现

为了确保 DualPipe 有足够的计算性能,我们定制了高效的跨节点全对全通信内核(包括分发和组合),以节省用于通信的 SMs 数量。内核的实现与 MoE 门控算法和我们集群的网络拓扑协同设计。具体来说,在我们的集群中,跨节点 GPU 通过 IB 完全互连,节点内通信通过 NVLink 处理。NVLink 提供 160 GB/s 的带宽,大约是 IB(50 GB/s)的 3.2 倍。为了有效利用 IB 和 NVLink 的不同带宽,我们将每个 token 最多分发到 4 个节点,从而减少 IB 流量。对于每个 token,在做出路由决策时,它将首先通过 IB 传输到目标节点上具有相同节点内索引的 GPU。一旦到达目标节点,我们将努力确保它通过 NVLink 立即转发到承载其目标专家的特定 GPU,而不会被随后到达的 token 阻塞。通过这种方式,通过 IB 和 NVLink 的通信完全重叠,每个 token 可以在每个节点上平均高效地选择 3.2 个专家而不会产生 NVLink 的额外开销。这意味着,尽管 DeepSeek-V3 在实际中只选择 8 个路由专家,但在保持相同通信成本的情况下,它可以将这个数字扩大到最多 13 个专家(4 个节点 ×3.2 个专家 / 节点) 。总体而言,在这样的通信策略下,仅需 20 个 SM 就足以充分利用 IB 和 NVLink 的带宽。

详细来说,我们采用了 warp specialization 技术(Bauer 等人,2014),并将 20 个 SM 划分为 10 个通信通道。在分发过程中,(1)IB 发送、(2)IB 到 NVLink 的转发以及(3)NVLink 接收分别由各自的 warp 处理。分配给每个通信任务的 warp 数量会根据所有 SM 上的实际工作量动态调整。同样,在组合过程中,(1)NVLink 发送、(2)NVLink 到 IB 的转发和累加以及(3)IB 接收和累加也由动态调整的 warp 处理。此外,分发和组合内核都与计算流重叠,因此我们还考虑了它们对其他 SM 计算内核的影响。具体来说,我们采用了定制的 PTX(Parallel Thread Execution)指令,并自动调整通信块的大小,这显著减少了 L2 缓存的使用以及对其他 SM 的干扰。

3.2.3 极低的内存占用和最小开销

为了减少训练期间的内存占用,我们采用了以下技术。

  • RMSNorm 和 MLA 上投影的重计算:我们在反向传播过程中重新计算所有 RMSNorm 操作和 MLA 上投影,从而无需持久存储它们的输出激活。通过极小的开销,该策略显著降低了存储激活所需的内存。
  • CPU 中的指数移动平均:在训练期间,我们保留模型参数的指数移动平均(EMA),以便在学习率衰减后对模型性能进行早期估计。EMA 参数存储在 CPU 内存中,并在每个训练步骤后异步更新。这种方法使我们能够在不产生额外内存或时间开销的情况下维护 EMA 参数。
  • 多 token 预测的共享嵌入和输出头:通过 DualPipe 策略,我们将模型的最浅层(包括嵌入层)和最深层(包括输出头)部署在相同的 PP 等级上。这种安排使得 MTP 模块和主模型之间可以物理共享共享嵌入和输出头的参数和梯度。这种物理共享机制进一步提高了我们的内存效率。

3.3 FP8 训练

image-20250212224606310

受近期低精度训练进展(Dettmers 等人,2022; Noune 等人,2022; Peng 等人,2023b)的启发,我们提出了一种利用 FP8 数据格式训练 DeepSeek-V3 的细粒度混合精度框架。虽然低精度训练前景广阔,但它常常受到激活、权重和梯度中的异常值的限制(Fishman 等人,2024; He 等人;Sun 等人,2024)。尽管在推理量化方面已经取得了显著进展(Frantar 等人,2022; Xiao 等人,2023),但相对较少的研究展示了低精度技术在大规模语言模型训练中的成功应用(Fishman 等人,2024)。为了应对这一挑战并有效扩展 FP8 格式的动态范围,我们引入了一种细粒度量化策略:采用$1×N_{c}$元素的 tile-wise 分组或$N_{c}$元素的 block-wise 分组。在我们提高精度的累加过程中,相关的反量化开销在很大程度上得到了缓解,这是实现准确的 FP8 通用矩阵乘法(GEMM)的关键。此外,为了进一步减少 MoE 训练中的内存和通信开销,我们以 FP8 格式缓存和分发激活,并以 BF16 格式存储低精度优化器状态。我们在两个与 DeepSeek-V2-Lite 和 DeepSeekV2 相似规模的模型上验证了所提出的 FP8 混合精度框架,训练约 1 万亿个 token(详见附录 B.1)。值得注意的是,与 BF16 基线相比,我们的 FP8 训练模型的相对损失误差始终保持在 0.25% 以下,这一水平完全在训练随机性的可接受范围内。

3.3.1 混合精度框架

image-20250212231309109

基于在低精度训练中广泛采用的技术(Kalamkar 等人,2019; Narang 等人,2017),我们提出了一种用于 FP8 训练的混合精度框架。在这个框架中,大多数计算密集型操作以 FP8 精度进行,而一些关键操作则战略性地保持其原始数据格式,以平衡训练效率和数值稳定性。整体框架如图 6 所示。

首先,为了加速模型训练,大多数核心计算内核(即 GEMM 操作)以 FP8 精度实现。这些 GEMM 操作接受 FP8 张量作为输入,并生成 BF16 或 FP32 的输出。如图 6 所示,与线性算子相关的所有三个 GEMM 操作,即前向传播(Fprop)、激活反向传播(Dgrad)和权重反向传播(Wgrad),均以 FP8 执行。这种设计理论上比原始的 BF16 方法的计算速度提高了一倍。此外,FP8 的 Wgrad GEMM 允许以 FP8 格式存储激活,以供反向传播使用,这显著降低了内存消耗。

尽管 FP8 格式具有效率优势,但某些算子由于对低精度计算敏感,仍然需要更高的精度。此外,一些低成本算子也可以使用更高的精度,且对整体训练成本的影响可忽略不计。因此,经过仔细研究,我们对以下组件保持原始精度(例如 BF16 或 FP32):嵌入模块、输出头、MoE 门控模块、归一化算子和注意力算子。这些有针对性的高精度保留确保了 DeepSeek-V3 的训练动态稳定。为了进一步保证数值稳定性,我们以更高的精度存储主权重、权重梯度和优化器状态。虽然这些高精度组件会带来一些内存开销,但通过在我们的分布式训练系统中跨多个 DP 等级进行高效分片,它们的影响可以降至最低。

3.3.2 通过量化和乘法提高精度

基于我们的 FP8 混合精度框架,我们引入了几种策略来提高低精度训练的准确性,重点关注量化方法和乘法过程。

  • 细粒度量化:在低精度训练框架中,由于 FP8 格式的动态范围有限(受其减少的指数位限制),溢出和下溢是常见的挑战。作为一种标准做法,通过将输入张量的最大绝对值缩放到 FP8 的最大可表示值,使输入分布与 FP8 格式的可表示范围对齐(Narang 等人,2017)。这种方法使得低精度训练对激活异常值高度敏感,这会严重降低量化精度。为了解决这个问题,我们提出了一种细粒度量化方法,在更细的粒度上应用缩放。如图 7(a)所示,(1)对于激活,我们以 1x128 的 tile 为基础对元素进行分组和缩放(即每个 token 每 128 个通道);(2)对于权重,我们以 128x128 的块为基础对元素进行分组和缩放(即每 128 个输入通道每 128 个输出通道)。这种方法确保量化过程能够根据较小的元素组调整缩放比例,从而更好地适应异常值。在附录 B.2 中,我们进一步讨论了如果像权重量化那样以块为基础对激活进行分组和缩放时的训练不稳定性问题。

我们方法的一个关键修改是在 GEMM 操作的内维度上引入了每组缩放因子。标准的 FP8 GEMM 并不直接支持此功能,但结合我们精确的 FP32 累加策略,可以高效地实现。值得注意的是,我们的细粒度量化策略与微缩放格式(Rouhani 等人,2023b)的思想高度一致,而 NVIDIA 下一代 GPU(Blackwell 系列)的张量核心已宣布支持具有更细量化粒度的微缩放格式(NVIDIA, 2024a)。我们希望我们的设计能够为未来的工作提供参考,以跟上最新的 GPU 架构。

  • 提高累加精度:低精度 GEMM 操作经常受到下溢问题的困扰,其准确性在很大程度上依赖于高精度累加,通常以 FP32 精度进行(Kalamkar 等人,2019; Narang 等人,2017)。然而,我们观察到 NVIDIA H800 GPU 上 FP8 GEMM 的累加精度仅限于保留约 14 位,这明显低于 FP32 累加精度。当内维度$K$较大时(Wortsman 等人,2023),这个问题会更加突出,这是大规模模型训练中增加批量大小和模型宽度时的典型场景。以两个$K = 4096$的随机矩阵的 GEMM 操作为例,在我们的初步测试中,张量核心中有限的累加精度导致最大相对误差接近 2%。尽管存在这些问题,有限的累加精度在一些 FP8 框架中仍然是默认选项(NVIDIA, 2024b),严重限制了训练精度。

为了解决这个问题,我们采用了提升到 CUDA 核心以获得更高精度的策略(Thakkar 等人,2023)。过程如图 7(b)所示。具体来说,在张量核心上执行矩阵乘法累加(MMA)时,中间结果使用有限的位宽进行累加。一旦达到$N_{C}$的间隔,这些部分结果将被复制到 CUDA 核心的 FP32 寄存器中,在那里进行全精度的 FP32 累加。如前所述,我们的细粒度量化在内维度$K$上应用每组缩放因子。这些缩放因子可以在 CUDA 核心上作为反量化过程高效地相乘,且额外计算成本最小。值得注意的是,此修改降低了单个 warp 组的 WGMMA(Warpgroup-level Matrix Multiply-Accumulate)指令发出率。然而,在 H800 架构中,通常两个 WGMMA 可以同时持续执行:当一个 warp 组执行提升操作时,另一个可以执行 MMA 操作。这种设计使得两个操作可以重叠,保持张量核心的高利用率。根据我们的实验,将$N_{C}$设置为 128 个元素(相当于 4 个 WGMMA)是能够显著提高精度且不会引入大量开销的最小累加间隔。

  • 尾数优先于指数:与先前工作(NVIDIA, 2024b; Peng 等人,2023b; Sun 等人,2019b)采用的混合 FP8 格式(在前向传播中使用 E4M3,即 4 位指数和 3 位尾数,在 Dgrad 和 Wgrad 中使用 E5M2,即 5 位指数和 2 位尾数)不同,我们在所有张量上采用 E4M3 格式以获得更高的精度。我们将这种方法的可行性归因于我们的细粒度量化策略,即 tile 和 block-wise 缩放。通过对较小的元素组进行操作,我们的方法有效地在这些分组元素之间共享指数位,减轻了有限动态范围的影响。
  • 在线量化:张量级量化框架(NVIDIA, 2024b; Peng 等人,2023b)采用延迟量化,它保留先前迭代中的最大绝对值历史以推断当前值。为了确保准确的缩放并简化框架,我们为每个 1x128 的激活 tile 或 128x128 的权重块在线计算最大绝对值。基于此,我们导出缩放因子,然后在线将激活或权重量化为 FP8 格式。

3.3.3 低精度存储和通信

结合我们的 FP8 训练框架,我们通过将缓存的激活和优化器状态压缩为更低精度的格式,进一步降低了内存消耗和通信开销。

  • 低精度优化器状态:我们采用 BF16 数据格式而不是 FP32 来跟踪 AdamW(Loshchilov 和 Hutter, 2017)优化器中的一阶和二阶矩,而不会导致可观察到的性能下降。然而,主权重(由优化器存储)和梯度(用于批量大小累加)仍然保留为 FP32,以确保整个训练过程中的数值稳定性。

  • 低精度激活

    :如图 6 所示,Wgrad 操作以 FP8 执行。为了减少内存消耗,自然的选择是以 FP8 格式缓存激活,以供线性算子的反向传播使用。然而,对于一些算子,为了实现低成本的高精度训练,我们进行了特殊考虑:

    • 注意力算子之后线性层的输入:这些激活也用于注意力算子的反向传播,因此对精度敏感。我们专门为这些激活采用定制的 E5M6 数据格式。此外,这些激活在反向传播中会从 1x128 的量化 tile 转换为 128x1 的 tile。为了避免引入额外的量化误差,所有缩放因子都进行舍入缩放,即 2 的整数次幂。
    • MoE 中 SwiGLU 算子的输入:为了进一步降低内存成本,我们缓存 SwiGLU 算子的输入,并在反向传播中重新计算其输出。这些激活也使用我们的细粒度量化方法存储为 FP8,在内存效率和计算精度之间取得平衡。
  • 低精度通信:通信带宽是 MoE 模型训练中的关键瓶颈。为了缓解这一挑战,我们在 MoE 上投影之前将激活量化为 FP8,然后应用分发组件,这与 MoE 上投影中的 FP8 Fprop 兼容。与注意力算子之后线性层的输入类似,这种激活的缩放因子是 2 的整数次幂。类似的策略也应用于 MoE 下投影之前的激活梯度。对于前向和反向组合组件,我们将它们保留为 BF16,以在训练管道的关键部分保持训练精度。

3.4 推理和部署

我们在 H800 集群上部署 DeepSeek-V3,集群内每个节点的 GPU 通过 NVLink 互连,整个集群的所有 GPU 通过 IB 完全互连。为了同时确保在线服务的服务级别目标(SLO)和高吞吐量,我们采用以下将预填充和解码阶段分开的部署策略。

3.4.1 预填充

预填充阶段的最小部署单元由 4 个节点和 32 个 GPU 组成。注意力部分采用 4 路张量并行(TP4)和序列并行(SP),结合 8 路数据并行(DP8)。其较小的 TP 大小 4 限制了 TP 通信的开销。对于 MoE 部分,我们使用 32 路专家并行(EP32),这确保每个专家处理足够大的批量大小,从而提高计算效率。对于 MoE 的全对全通信,我们使用与训练相同的方法:首先通过 IB 在节点间传输 token,然后通过 NVLink 在节点内的 GPU 之间转发。特别地,对于浅层的密集 MLP,我们使用 1 路张量并行以节省 TP 通信。

为了在 MoE 部分的不同专家之间实现负载平衡,我们需要确保每个 GPU 处理的 token 数量大致相同。为此,我们引入了冗余专家的部署策略,即复制高负载专家并进行冗余部署。高负载专家根据在线部署期间收集的统计信息进行检测,并定期调整(例如每 10 分钟一次)。在确定冗余专家集之后,我们根据观察到的负载在节点内的 GPU 之间仔细重新排列专家,力求在不增加跨节点全对全通信开销的情况下尽可能平衡 GPU 之间的负载。对于 DeepSeek-V3 的部署,我们为预填充阶段设置了 32 个冗余专家。对于每个 GPU,除了原本承载的 8 个专家之外,还将承载一个额外的冗余专家。

此外,在预填充阶段,为了提高吞吐量并隐藏全对全和 TP 通信的开销,我们同时处理两个计算工作量相似的微批次,将一个微批次的注意力和 MoE 操作与另一个微批次的分发和组合操作重叠。

最后,我们正在探索专家的动态冗余策略,即每个 GPU 承载更多的专家(例如 16 个专家),但在每个推理步骤中仅激活 9 个。在每一层的全对全操作开始之前,我们动态计算全局最优路由方案。鉴于预填充阶段涉及大量计算,计算此路由方案的开销几乎可以忽略不计。

3.4.2 解码

在解码过程中,我们将共享专家视为路由专家。从这个角度来看,每个 token 在路由过程中会选择 9 个专家,其中共享专家被视为总是会被选择的高负载专家。解码阶段的最小部署单元由 40 个节点和 320 个 GPU 组成。注意力部分采用 TP4 和 SP,结合 DP80,而 MoE 部分使用 EP320。对于 MoE 部分,每个 GPU 仅承载一个专家,64 个 GPU 负责承载冗余专家和共享专家。分发和组合部分的全对全通信通过 IB 直接点对点传输实现低延迟。此外,我们利用 IBGDA(NVIDIA, 2022)技术进一步最小化延迟并提高通信效率。

与预填充类似,我们根据在线服务中的专家负载统计信息,在特定间隔内定期确定冗余专家集。然而,由于每个 GPU 仅承载一个专家,我们无需重新排列专家。我们也在探索解码阶段的动态冗余策略,但这需要更仔细地优化计算全局最优路由方案的算法,并与分发内核融合以降低开销。

此外,为了提高吞吐量并隐藏全对全通信的开销,我们也在探索在解码阶段同时处理两个计算工作量相似的微批次。与预填充不同,解码阶段注意力消耗的时间占比较大。因此,我们将一个微批次的注意力与另一个微批次的分发 + MoE + 组合操作重叠。在解码阶段,每个专家的批量大小相对较小(通常在 256 个 token 以内),瓶颈在于内存访问而非计算。由于 MoE 部分只需要加载一个专家的参数,内存访问开销最小,因此使用较少的 SM 不会显著影响整体性能。因此,为了避免影响注意力部分的计算速度,我们可以仅分配一小部分 SM 用于分发 + MoE + 组合操作。

3.5 硬件设计建议

基于我们对全对全通信和 FP8 训练方案的实现,我们向 AI 硬件供应商提出以下关于芯片设计的建议。

3.5.1 通信硬件

在 DeepSeek-V3 中,我们实现了计算和通信的重叠,以在计算过程中隐藏通信延迟。与串行计算和通信相比,这显著降低了对通信带宽的依赖。然而,当前的通信实现依赖于昂贵的 SM(例如,我们在H800 GPU 的 132 个 SM 中分配 20 个用于此目的),这会限制计算吞吐量。此外,使用 SM 进行通信会导致效率低下,因为张量核心会处于未充分利用的状态。

目前,SM 在全对全通信中主要执行以下任务:

  • 在 IB(InfiniBand)和 NVLink 域之间转发数据,同时聚合从单个 GPU 发往同一节点内多个 GPU 的 IB 流量。
  • 在 RDMA 缓冲区(已注册的 GPU 内存区域)和输入 / 输出缓冲区之间传输数据。
  • 执行全对全组合的归约操作。
  • 在通过 IB 和 NVLink 域将分块数据传输到多个专家的过程中,管理细粒度的内存布局。

我们期望未来的供应商开发能够将这些通信任务从宝贵的计算单元 SM 中卸载的硬件,例如作为 GPU 协处理器或类似 NVIDIA SHARP(Graham 等人,2016)的网络协处理器。此外,为了降低应用程序编程的复杂性,我们希望这种硬件从计算单元的角度统一 IB(横向扩展)和 NVLink(纵向扩展)网络。有了这个统一的接口,计算单元可以通过基于简单原语提交通信请求,轻松地在整个 IB-NVLink 统一域中完成读取、写入、多播和归约等操作。

3.5.2 计算硬件

  • 提高张量核心中 FP8 GEMM 的累加精度:在当前 NVIDIA Hopper 架构的张量核心实现中,FP8 GEMM(通用矩阵乘法)采用定点累加,在加法前根据最大指数对尾数乘积进行右移对齐。我们的实验表明,它在符号填充右移后仅使用每个尾数乘积的最高 14 位,并截断超出此范围的位。然而,例如,为了通过 32 次 FP8×FP8 乘法的累加获得精确的 FP32 结果,至少需要 34 位的精度。因此,我们建议未来的芯片设计增加张量核心中的累加精度,以支持全精度累加,或者根据训练和推理算法的精度要求选择合适的累加位宽。这种方法可确保在保持计算效率的同时,误差仍在可接受的范围内。
  • 支持按 tile 和按块量化:当前的 GPU 仅支持按张量量化,缺乏对我们这种按 tile 和按块量化的细粒度量化的原生支持。在当前的实现中,当达到$N_{C}$间隔时,部分结果会从张量核心复制到 CUDA 核心,与缩放因子相乘,然后添加到 CUDA 核心的 FP32 寄存器中。尽管结合我们精确的 FP32 累加策略,反量化开销已显著降低,但张量核心和 CUDA 核心之间频繁的数据移动仍然限制了计算效率。因此,我们建议未来的芯片通过使张量核心能够接收缩放因子并实现带分组缩放的 MMA 来支持细粒度量化。这样,整个部分和累加与反量化可以直接在张量核心内完成,直到产生最终结果,避免频繁的数据移动。
  • 支持在线量化:尽管在线量化在我们的研究中证明了其有效性,但当前的实现难以有效支持它。在现有过程中,我们需要从 HBM(高带宽内存)读取 128 个 BF16 激活值(上一次计算的输出)进行量化,量化后的 FP8 值再写回 HBM,之后又要再次读取用于 MMA。为了解决这种低效率问题,我们建议未来的芯片将 FP8 转换和 TMA(张量内存加速器)访问集成到单个融合操作中,以便在激活从全局内存传输到共享内存的过程中完成量化,避免频繁的内存读写。我们还建议支持 warp 级别的转换指令以提高速度,这进一步有助于更好地融合层归一化和 FP8 转换。或者,可以采用近内存计算方法,将计算逻辑放置在靠近 HBM 的位置。在这种情况下,BF16 元素在从 HBM 读入 GPU 时可以直接转换为 FP8,从而将片外内存访问减少约 50%。
  • 支持转置 GEMM 操作:当前的架构使得矩阵转置与 GEMM 操作的融合变得繁琐。在我们的工作流程中,前向传递中的激活被量化为 1x128 的 FP8 tile 并存储。在反向传递中,需要读出矩阵、反量化、转置、重新量化为 128x1 的 tile,然后存储在 HBM 中。为了减少内存操作,我们建议未来的芯片对于训练和推理所需的精度,能够在 MMA 操作前直接从共享内存中进行矩阵的转置读取。结合 FP8 格式转换和 TMA 访问的融合,这一增强将显著简化量化工作流程。

4. 预训练

4.1 数据构建

与 DeepSeek-V2 相比,我们优化了预训练语料库,提高了数学和编程样本的比例,同时将多语言覆盖范围扩展到英语和中文之外。我们还改进了数据处理流程,在保持语料库多样性的同时尽量减少冗余。受 Ding 等人(2024)的启发,我们采用文档打包方法来保证数据完整性,但在训练过程中不采用跨样本注意力掩码。最终,DeepSeek-V3 的训练语料库包含由我们的分词器处理的 14.8 万亿个高质量且多样的 token。

在 DeepSeekCoder-V2(DeepSeek-AI,2024a)的训练过程中,我们观察到 “Fill-in-Middle”(FIM)策略在不影响下一个 token 预测能力的同时,能使模型根据上下文线索准确预测中间文本。与 DeepSeekCoder-V2 一致,我们在 DeepSeek-V3 的预训练中也采用了 FIM 策略。具体来说,我们使用 “Prefix-Suffix-Middle”(PSM)框架来构建数据,如下所示:

<|fim_begin|> 𝑓pre<|fim_hole|> 𝑓suf<|fim_end|> 𝑓middle<|eos_token|>

这种结构在文档级别作为预打包过程的一部分应用。FIM 策略的应用率为 0.1,与 PSM 框架一致。

DeepSeek-V3 的分词器采用字节级 BPE(Shibata 等人,1999),词汇表扩展到 128K 个 token。我们对分词器的预分词器和训练数据进行了修改,以优化多语言压缩效率。此外,与 DeepSeek-V2 相比,新的预分词器引入了结合标点和换行符的 token。然而,当模型处理没有终端换行符的多行提示时,特别是在少样本评估提示中,这个技巧可能会引入 token 边界偏差(Lundberg,2023)。为了解决这个问题,我们在训练过程中随机拆分一定比例的此类组合 token,使模型接触到更广泛的特殊情况,从而减轻这种偏差。

4.2 超参数

  • 模型超参数:我们将 Transformer 层的数量设置为 61,隐藏维度设置为 7168。所有可学习参数均以 0.006 的标准差进行随机初始化。在 MLA 中,我们将注意力头的数量$n_{h}$设置为 128,每个头的维度$d_{h}$设置为 128。KV 压缩维度$d_{c}$设置为 512,查询压缩维度$d_{c}’$设置为 1536。对于解耦的查询和键,我们将每个头的维度$d_{h}^{R}$设置为 64。除了前三层,我们将所有的 FFN 替换为 MoE 层。每个 MoE 层由 1 个共享专家和 256 个路由专家组成,每个专家的中间隐藏维度为 2048。在路由专家中,每个 token 会激活 8 个专家,并且每个 token 最多会被发送到 4 个节点。多 token 预测深度$D$设置为 1,即除了准确预测下一个 token 外,每个 token 还会预测一个额外的 token。与 DeepSeek-V2 一样,DeepSeek-V3 也在压缩的潜在向量后使用额外的 RMSNorm 层,并在宽度瓶颈处乘以额外的缩放因子。在这种配置下,DeepSeek-V3 总共有 6710 亿个参数,每个 token 会激活 370 亿个参数。
  • 训练超参数:我们使用 AdamW 优化器(Loshchilov 和 Hutter,2017),超参数设置为$\beta_{1}=0.9$,$\beta_{2}=0.95$,权重衰减为 0.1。在预训练过程中,我们将最大序列长度设置为 4K,并在 14.8 万亿个 token 上对 DeepSeek-V3 进行预训练。关于学习率调度,在最初的 2K 步中,我们将学习率从 0 线性增加到$2.2×10^{-4}$。然后,我们将学习率保持在$2.2×10^{-4}$不变,直到模型消耗 10 万亿个训练 token。随后,我们在 4.3 万亿个 token 上按照余弦衰减曲线将学习率逐渐衰减到$2.2×10^{-5}$。在训练最后 5000 亿个 token 时,在前 3330 亿个 token 中,我们将学习率保持在$2.2×10^{-5}$,在剩余的 1670 亿个 token 中,将学习率切换到$7.3×10^{-6}$。梯度裁剪范数设置为 1.0。我们采用批量大小调度策略,在训练前 4690 亿个 token 时,批量大小从 3072 逐渐增加到 15360,在剩余的训练中保持 15360 不变。我们利用管道并行将模型的不同层部署在不同的 GPU 上,对于每一层,路由专家将均匀部署在属于 8 个节点的 64 个 GPU 上。对于节点限制路由,每个 token 最多会被发送到 4 个节点(即$M = 4$)。对于无辅助损失的负载均衡,在前 14.3 万亿个 token 的训练中,我们将偏差更新速度$\gamma$设置为 0.001,在剩余的 5000 亿个 token 训练中设置为 0.0。对于平衡损失,我们将$\alpha$设置为 0.0001,只是为了避免任何单个序列内出现极端不平衡。MTP 损失权重$\lambda$在前 10 万亿个 token 的训练中设置为 0.3,在剩余的 4.8 万亿个 token 训练中设置为 0.1。

image-20250212231358700

4.3 长上下文扩展

我们采用与 DeepSeek-V2(DeepSeek-AI,2024c)类似的方法,使 DeepSeek-V3 具备长上下文能力。在预训练阶段之后,我们使用 YaRN(Peng 等人,2023a)进行上下文扩展,并执行两个额外的训练阶段,每个阶段包含 1000 步,逐步将上下文窗口从 4K 扩展到 32K,然后再扩展到 128K。YaRN 的配置与 DeepSeek-V2 中使用的一致,仅应用于解耦的共享键$k_{t}^{R}$。两个阶段的超参数保持相同,缩放因子$s = 40$,$\alpha = 1$,$\beta = 32$,缩放系数$\sqrt{t}=0.1 \ln s + 1$。在第一阶段,序列长度设置为 32K,批量大小为 1920。在第二阶段,序列长度增加到 128K,批量大小减少到 480。两个阶段的学习率都设置为$7.3×10^{-6}$,与预训练阶段的最终学习率相匹配。

通过这两个阶段的扩展训练,DeepSeek-V3 能够处理长度高达 128K 的输入,同时保持强大的性能。图 8 表明,经过监督微调后,DeepSeek-V3 在 “Needle In A HayStack”(NIAH)测试中取得了显著的成绩,在高达 128K 的上下文窗口长度内都表现出稳定的稳健性。

4.4 评估

4.4.1 评估基准

DeepSeek-V3 的基础模型在以英语和中文为主的多语言语料库上进行预训练,因此我们主要在一系列英语、中文基准以及一个多语言基准上评估其性能。我们的评估基于集成在 HAI-LLM 框架中的内部评估框架。所考虑的基准分类如下,其中下划线标注的基准是中文的,双下划线标注的基准是多语言的:

  • 多学科多项选择数据集:包括 MMLU(Hendrycks 等人,2020)、MMLURedux(Gema 等人,2024)、MMLU-Pro(Wang 等人,2024b)、MMMLU(OpenAI,2024b)、C-Eval(Huang 等人,2023)和 CMMLU(Li 等人,2023)。
  • 语言理解和推理数据集:包括 HellaSwag(Zellers 等人,2019)、PIQA(Bisk 等人,2020)、ARC(Clark 等人,2018)和 BigBench Hard(BBH)(Suzgun 等人,2022)。
  • 闭卷问答数据集:包括 TriviaQA(Joshi 等人,2017)和 NaturalQuestions(Kwiatkowski 等人,2019)。
  • 阅读理解数据集:包括 RACE(Lai 等人,2017)、DROP(Dua 等人,2019)、C3(Sun 等人,2019a)和 CMRC(Cui 等人,2019)。
  • 指代消解数据集:包括 CLUEWSC(Xu 等人,2020)和 WinoGrande(Sakaguchi 等人,2019)。
  • 语言建模数据集:包括 Pile(Gao 等人,2020)。
  • 中文理解和文化数据集:包括 CCPM(Li 等人,2021)。
  • 数学数据集:包括 GSM8K(Cobbe 等人,2021)、MATH(Hendrycks 等人,2021)、MGSM(Shi 等人,2023)和 CMath(Wei 等人,2023)。
  • 代码数据集:包括 HumanEval(Chen 等人,2021)、LiveCodeBench-Base(0801 - 1101)(Jain 等人,2024)、MBPP(Austin 等人,2021)和 CRUXEval(Gu 等人,2024)。
  • 标准化考试:包括 AGIEval(Zhong 等人,2023)。请注意,AGIEval 包括英语和中文子集。

遵循我们之前的工作(DeepSeek-AI,2024b,c),对于包括 HellaSwag、PIQA、WinoGrande、RACE-Middle、RACE-High、MMLU、MMLU-Redux、MMLU-Pro、MMMLU、ARC-Easy、ARC-Challenge、C-Eval、CMMLU、C3 和 CCPM 在内的数据集,我们采用基于困惑度的评估;对于 TriviaQA、NaturalQuestions、DROP、MATH、GSM8K、MGSM、HumanEval、MBPP、LiveCodeBench-Base、CRUXEval、BBH、AGIEval、CLUEWSC、CMRC 和 CMath,我们采用基于生成的评估。此外,我们对 Pile-test 进行基于语言建模的评估,并使用 Bits-Per-Byte(BPB)作为指标,以确保在使用不同分词器的模型之间进行公平比较。

4.4.2 评估结果

image-20250212231420289

在表 3 中,我们将 DeepSeek-V3 的基础模型与最先进的开源基础模型进行比较,包括 DeepSeek-V2-Base(DeepSeek-AI,2024c)(我们之前的版本)、Qwen2.5 72B Base(Qwen,2024b)和 LLaMA-3.1 405B Base(AI@Meta,2024b)。我们使用内部评估框架对所有这些模型进行评估,并确保它们具有相同的评估设置。请注意,由于过去几个月我们评估框架的变化,DeepSeek-V2-Base 的性能与我们之前报告的结果略有差异。总体而言,DeepSeek-V3-Base 在综合性能上优于 DeepSeek-V2-Base 和 Qwen2.5 72B Base,并且在大多数基准上超过 LLaMA-3.1 405B Base,基本上成为了最强的开源模型。

从更详细的角度来看,我们将 DeepSeek-V3-Base 与其他开源基础模型逐个进行比较。(1)与 DeepSeek-V2-Base 相比,由于我们在模型架构上的改进、模型规模和训练 token 数量的增加以及数据质量的提升,DeepSeek-V3-Base 如预期般取得了显著更好的性能。(2)与目前最先进的中文开源模型 Qwen2.5 72B Base 相比,DeepSeek-V3-Base 的激活参数仅为其一半,但仍展现出显著优势,尤其是在英语、多语言、代码和数学基准上。在中文基准方面,除了中文多学科多项选择任务 CMMLU 外,DeepSeek-V3-Base 的表现也优于 Qwen2.5 72B。(3)与拥有 11 倍激活参数的最大开源模型 LLaMA-3.1 405B Base 相比,DeepSeek-V3-Base 在多语言、代码和数学基准上也表现得更好。在英语和中文语言基准方面,DeepSeek-V3-Base 表现出具有竞争力或更优的性能,在 BBH、MMLU 系列、DROP、C-Eval、CMMLU 和 CCPM 等基准上尤其出色。

由于我们采用了高效的架构和全面的工程优化,DeepSeek-V3 实现了极高的训练效率。在我们的训练框架和基础设施下,训练 DeepSeek-V3 每万亿个 token 仅需 18 万个 H800 GPU 小时,这比训练 720 亿或 4050 亿参数的密集型模型成本低得多。

4.5 讨论

image-20250212231433912

4.5.1 多 token 预测的消融实验

在表 4 中,我们展示了多 token 预测(MTP)策略的消融实验结果。具体来说,我们在两个不同规模的基线模型上验证了 MTP 策略。在小规模上,我们在 1.33 万亿个 token 上训练了一个总参数为 157 亿的基线混合专家(MoE)模型。在大规模上,我们在 540 亿个 token 上训练了一个总参数为 2287 亿的基线 MoE 模型。在它们的基础上,保持训练数据和其他架构不变,我们为其添加一个深度为 1 的 MTP 模块,并训练两个采用 MTP 策略的模型以作比较。需要注意的是,在推理时,我们直接舍弃 MTP 模块,因此对比模型的推理成本完全相同。从表中可以看出,MTP 策略在大多数评估基准上都持续提升了模型性能。

4.5.2 无辅助损失平衡策略的消融实验

image-20250212231722640

在表 5 中,我们展示了无辅助损失平衡策略的消融实验结果。我们在两个不同规模的基线模型上验证了该策略。在小规模上,我们在 1.33 万亿个 token 上训练了一个总参数为 157 亿的基线 MoE 模型。在大规模上,我们在 578 亿个 token 上训练了一个总参数为 2287 亿的基线 MoE 模型。这两个基线模型都单纯使用辅助损失来促进负载均衡,并使用带有前 K 亲和度归一化的 sigmoid 门控函数。它们控制辅助损失强度的超参数分别与 DeepSeek-V2-Lite 和 DeepSeek-V2 相同。在这两个基线模型的基础上,保持训练数据和其他架构不变,我们去除所有辅助损失并引入无辅助损失平衡策略进行比较。从表中可以看出,无辅助损失策略在大多数评估基准上都始终能实现更好的模型性能。

4.5.3 批次级负载均衡与序列级负载均衡

image-20250212231740951

无辅助损失平衡和序列级辅助损失之间的关键区别在于它们的平衡范围:批次级与序列级。与序列级辅助损失相比,批次级平衡施加的约束更为灵活,因为它并不强制每个序列在其内部实现负载均衡。这种灵活性使专家能够更好地在不同领域实现专业化。为了验证这一点,我们记录并分析了一个基于 160 亿参数且使用辅助损失的基线模型,以及一个 160 亿参数的无辅助损失模型在 Pile 测试集中不同领域上的专家负载情况。如图 9 所示,我们观察到无辅助损失模型如预期般展现出更强的专家专业化模式。

为了进一步研究这种灵活性与模型性能优势之间的相关性,我们额外设计并验证了一种批次级辅助损失,它促使每个训练批次而不是每个序列实现负载均衡。实验结果表明,当达到相似的批次级负载均衡水平时,批次级辅助损失也能实现与无辅助损失方法相近的模型性能。具体来说,在我们对 10 亿参数 MoE 模型的实验中,验证损失分别为:使用序列级辅助损失时为 2.258,使用无辅助损失方法时为 2.253,使用批次级辅助损失时为 2.253。在 30 亿参数 MoE 模型上,我们也观察到了类似的结果:使用序列级辅助损失的模型验证损失为 2.085,而使用无辅助损失方法或批次级辅助损失的模型验证损失均为 2.080。

此外,尽管批次级负载均衡方法展现出一致的性能优势,但它们在效率方面也面临两个潜在挑战:(1)某些序列或小批次内的负载不均衡;(2)推理过程中因领域转移导致的负载不均衡。第一个挑战可由我们的训练框架自然解决,该框架采用大规模的专家并行和数据并行,确保每个微批次的规模足够大。对于第二个挑战,我们还设计并实现了一种带有冗余专家部署的高效推理框架(如 3.4 节所述)来加以克服。

5. 训练后优化

5.1. 监督微调

我们精心整理了指令调整数据集,其中包含跨越多个领域的 150 万个实例,每个领域都根据其特定需求采用了不同的数据创建方法。

  • 推理数据:对于推理相关的数据集,包括数学、代码竞赛问题和逻辑谜题等,我们利用内部的 DeepSeek-R1 模型生成数据。具体来说,虽然 R1 生成的数据准确性很高,但存在过度思考、格式不佳和长度过长等问题。我们的目标是在 R1 生成的推理数据的高准确性与格式规范的推理数据的清晰简洁之间找到平衡。

为了确立我们的方法,我们首先使用监督微调(SFT)和强化学习(RL)相结合的训练流程,开发一个针对特定领域(如代码、数学或通用推理)的专家模型。这个专家模型作为最终模型的数据生成器。训练过程包括为每个实例生成两种不同类型的 SFT 样本:第一种是以 <问题,原始答案> 的格式将问题与其原始答案配对,第二种是在问题和 R1 答案的基础上加入系统提示,格式为 < 系统提示,问题,R1 答案 >。

系统提示经过精心设计,包含引导模型产生带有反思和验证机制的答案的指令。在 RL 阶段,模型利用高温采样生成答案,即使没有明确的系统提示,也能整合来自 R1 生成的数据和原始数据的模式。经过数百步的 RL 训练,中间的 RL 模型学会融入 R1 的模式,从而战略性地提高整体性能。

在完成 RL 训练阶段后,我们采用拒绝采样为最终模型筛选高质量的 SFT 数据,其中专家模型被用作数据生成源。这种方法确保最终的训练数据保留 DeepSeek-R1 的优势,同时产生简洁有效的答案。

  • 非推理数据:对于非推理数据,如创意写作、角色扮演和简单问答,我们利用 DeepSeek-V2.5 生成答案,并邀请人类注释者对数据的准确性和正确性进行验证。
  • SFT 设置:我们使用 SFT 数据集对 DeepSeek-V3 基础模型进行两轮微调,采用余弦退火学习率调度,从$5×10^{-6}$开始,逐渐降至$1×10^{-6}$ 。在训练过程中,每个单独的序列由多个样本打包而成。不过,我们采用样本掩码策略,以确保这些示例相互隔离、不可见。

5.2. 强化学习

5.2.1. 奖励模型

我们在 RL 过程中使用基于规则的奖励模型(RM)和基于模型的 RM。

  • 基于规则的 RM:对于可以使用特定规则验证的问题,我们采用基于规则的奖励系统来确定反馈。例如,某些数学问题有确定的答案,我们要求模型以指定格式(如框内)给出最终答案,这样我们就可以应用规则来验证其正确性。同样,对于力扣(LeetCode)上的问题,我们可以利用编译器根据测试用例生成反馈。尽可能地利用基于规则的验证,我们能确保更高的可靠性,因为这种方法不易被操纵或利用。
  • 基于模型的 RM:对于答案形式自由的问题,我们依靠奖励模型来判断答案是否符合预期。相反,对于没有明确答案的问题,如创意写作相关的问题,奖励模型根据问题和相应的答案作为输入来提供反馈。奖励模型从 DeepSeek-V3 SFT 的检查点开始训练。为了提高其可靠性,我们构建了偏好数据,这些数据不仅提供最终奖励,还包括获得奖励的推理过程。这种方法有助于降低特定任务中奖励被破解的风险。

5.2.2. 组相对策略优化

与 DeepSeek-V2(DeepSeek-AI,2024c)类似,我们采用组相对策略优化(GRPO)(Shao 等人,2024),该方法舍弃了通常与策略模型大小相同的评论家模型,而是从组分数中估计基线。具体来说,对于每个问题$q$,GRPO 从旧策略模型$\pi_{\theta_{old }}$中采样一组输出${o_{1}, o_{2}, \cdots, o_{G}}$,然后通过最大化以下目标来优化策略模型$\pi_{\theta}$:

$ \begin{align*} \mathcal{J}{GRPO }(\theta) & =\mathbb{E}\left[q \sim P(Q),\left{o{i}\right}{i=1}^{G} \sim \pi{\theta_{old }}(O | q)\right] \ & \frac{1}{G} \sum_{i=1}^{G}\left(min \left(\frac{\pi_{\theta}\left(o_{i} | q\right)}{\pi_{\theta_{old }}\left(o_{i} | q\right)} A_{i}, clip\left(\frac{\pi_{\theta}\left(o_{i} | q\right)}{\pi_{\theta_{old }}\left(o_{i} | q\right)}, 1-\varepsilon, 1+\varepsilon\right) A_{i}\right)-\beta \mathbb{D}{K L}\left(\pi{\theta} | \pi_{r e f}\right)\right), \end{align*} $

其中,$\mathbb{D}{K L}\left(\pi{\theta} | \pi_{r e f}\right)=\frac{\pi_{r e f}\left(o_{i} | q\right)}{\pi_{\theta}\left(o_{i} | q\right)}-log \frac{\pi_{r e f}\left(o_{i} | q\right)}{\pi_{\theta}\left(o_{i} | q\right)}-1$, $\beta$ 、 $\pi_{ref }$ 、 $A_{i}$是优势函数,由每组输出对应的奖励 ${r_{1}, r_{2}, …, r_{G}}$ 得出: $A_{i}=\frac{r_{i}-mean\left(\left{r_{1}, r_{2}, \cdots, r_{G}\right}\right)}{std\left(\left{r_{1}, r_{2}, \cdots, r_{G}\right}\right)} 。$

我们在 RL 过程中纳入了来自不同领域的提示,如编码、数学、写作、角色扮演和问答。这种方法不仅使模型更符合人类偏好,还提高了在基准测试中的性能,特别是在可用 SFT 数据有限的情况下。

5.3. 评估

image-20250212231842188

5.3.1. 评估设置

  • 评估基准:除了用于基础模型测试的基准外,我们还在 IFEval(Zhou 等人,2023)、FRAMES(Krishna 等人,2024)、LongBench v2(Bai 等人,2024)、GPQA(Rein 等人,2023)、SimpleQA(OpenAI,2024c)、CSimpleQA(He 等人,2024)、SWE-Bench Verified(OpenAI,2024d)、Aider 1、LiveCodeBench(Jain 等人,2024)(2024 年 8 月至 2024 年 11 月的问题)、Codeforces 2、中国国家高中数学奥林匹克竞赛(CNMO 2024)3 和美国数学邀请赛 2024(AIME 2024)(MAA,2024)上对指令调整后的模型进行了进一步评估。

  • 对比基线:我们将聊天模型与几个强大的基线模型进行了全面评估,包括 DeepSeek-V2-0506、DeepSeek-V2.5-0905、Qwen2.5 72B Instruct、LLaMA-3.1 405B Instruct、Claude-Sonnet-3.5-1022 和 GPT-4o-0513。对于 DeepSeek-V2 模型系列,我们选择了最具代表性的变体进行比较。对于闭源模型,则通过各自的 API 进行评估。

  • 5.3.2. 标准评估

    image-20250212231905746

    在表 6 中,我们将 DeepSeek-V3 的聊天版本与其他开源和闭源模型进行了比较。在知识相关的基准测试中,DeepSeek-V3 在 MMLU、MMLU-Pro 和 GPQA 等教育基准测试中优于所有其他开源模型,在 MMLU 上得分为 88.5,在 MMLU-Pro 上得分为 75.9,在 GPQA 上得分为 59.1。其性能与 GPT-4o 和 Claude-Sonnet-3.5 等领先的闭源模型相当,缩小了开源模型与闭源模型在该领域的差距。在事实性基准测试方面,DeepSeek-V3 在 SimpleQA 和 Chinese SimpleQA 上展示了在开源模型中的卓越性能。虽然在英语事实性知识(SimpleQA)方面落后于 GPT-4o 和 Claude-Sonnet-3.5,但在中文事实性知识(Chinese SimpleQA)方面超越了这些模型,突出了其在中文事实性知识方面的优势。

    在代码、数学和推理能力的基准测试中,DeepSeek-V3 在所有非长思维链(long-CoT)的开源和闭源模型中,在数学相关基准测试中达到了最先进的性能。值得注意的是,它在特定基准测试(如 MATH-500)上甚至超过了 o1-preview,展示了其强大的数学推理能力。在编码相关任务中,DeepSeek-V3 在编码竞赛基准测试(如 LiveCodeBench)中表现最佳,巩固了其在该领域的领先地位。在工程相关任务中,尽管 DeepSeek-V3 的表现略逊于 Claude-Sonnet-3.5,但仍大幅领先其他模型,展示了其在各种技术基准测试中的竞争力。

    5.3.3. 开放式评估

    除了标准评估外,我们还对 DeepSeek-V3 进行了开放式评估,以测试其在实际场景中的性能。我们使用了 Aider、Codeforces 和 CNMO 2024 等基准测试,这些测试涵盖了从编程帮助到数学竞赛等广泛的实际应用场景。在 Aider 基准测试中,DeepSeek-V3 展示了其理解和解决复杂编程问题的能力,提供了高质量的代码建议和解决方案。在 Codeforces 编码竞赛平台上,DeepSeek-V3 的表现优于大多数开源模型,在处理竞赛级别的编程问题时表现出强大的实力。在 CNMO 2024 数学竞赛基准测试中,DeepSeek-V3 展示了卓越的数学解题能力,能够处理极具挑战性的数学问题,进一步证明了其在数学推理方面的优势。

    5.3.4. DeepSeek-V3 作为生成式奖励模型

    我们还探索了将 DeepSeek-V3 用作生成式奖励模型的可能性。在这个实验中,我们使用 DeepSeek-V3 为其他模型的输出打分,以此评估其他模型生成内容的质量。具体来说,我们将 DeepSeek-V3 应用于评估文本生成任务中的输出,如创意写作和问答系统的答案。通过比较 DeepSeek-V3 给出的分数与人类标注的分数,我们发现 DeepSeek-V3 能够有效地捕捉到文本的质量差异,其评分与人类判断具有高度的一致性。这表明 DeepSeek-V3 不仅在传统的基准测试中表现出色,还可以作为一种有效的工具,用于评估和改进其他模型的生成结果,为未来的模型训练和优化提供了新的思路。

    image-20250212231945234

    5.4. 讨论

    5.4.1. 从 DeepSeek-R1 中提炼知识

    在训练后优化阶段,我们从 DeepSeek-R1 系列模型中提炼推理能力的方法被证明是有效的。通过将 R1 的验证和反思模式融入 DeepSeek-V3,我们显著提高了其推理性能。然而,在这个过程中,我们也发现了一些挑战。例如,如何更好地平衡从 R1 中继承的复杂推理模式与 DeepSeek-V3 自身的简洁性和效率,仍然是一个需要进一步研究的问题。此外,在将 R1 的知识转移到 DeepSeek-V3 时,如何确保知识的有效整合,避免出现知识冲突或过度拟合的情况,也是未来工作需要关注的重点。

    5.4.2. 自奖励机制

    虽然我们在强化学习过程中使用了基于规则和基于模型的奖励模型,但探索自奖励机制也是一个有趣的研究方向。自奖励机制可以让模型根据自身的内部状态和生成结果来评估奖励,从而更自主地进行学习和优化。然而,实现有效的自奖励机制面临着诸多挑战,如如何定义合适的自奖励信号,以及如何确保自奖励机制不会导致模型陷入局部最优解或产生不稳定的行为。未来的研究可以探索如何设计更加智能和稳定的自奖励机制,以进一步提高模型的性能和自主性。

    5.4.3. 多令牌预测评估

    在评估阶段使用多令牌预测(MTP)是我们研究的一个独特方面。MTP 不仅可以提高模型在训练过程中的数据效率,还可以潜在地提升模型的推理能力。然而,目前的 MTP 评估主要集中在基准测试上,未来的工作可以探索如何将 MTP 更广泛地应用于实际场景中,如在文本生成任务中提前规划输出,或者在问答系统中更好地理解问题的上下文。此外,如何进一步优化 MTP 的训练和评估方法,以充分发挥其潜力,也是未来研究的重要方向。

    6. 结论、局限性与未来方向

    在本文中,我们介绍了 DeepSeek-V3,这是一款强大的混合专家(MoE)语言模型,总参数达 6710 亿,每个 token 激活 370 亿参数。为实现高效推理和经济的训练成本,DeepSeek-V3 采用了多头潜在注意力(MLA)和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中已得到充分验证。此外,DeepSeek-V3 首创了无辅助损失的负载均衡策略,并设置了多 token 预测训练目标,以提升性能。我们在 14.8 万亿丰富多样的高质量 token 上对 DeepSeek-V3 进行预训练,随后通过监督微调(Supervised Fine-Tuning)和强化学习(Reinforcement Learning)阶段充分挖掘其能力。综合评估显示,DeepSeek-V3 超越了其他开源模型,性能与领先的闭源模型相当。尽管性能卓越,但 DeepSeek-V3 的完整训练仅需 278.8 万个 H800 GPU 小时,且训练过程极为稳定,在整个训练过程中,我们未遇到任何无法恢复的损失激增情况,也无需进行回滚操作。模型检查点可在https://github.com/deepseek-ai/DeepSeek-V3获取。

    DeepSeek-V3 的成功得益于多个关键创新。在架构方面,我们首创的无辅助损失负载均衡策略有效减少了鼓励负载均衡对模型性能造成的负面影响。同时,我们对多 token 预测(MTP)目标的研究证明了其对模型性能的提升作用,MTP 还可用于推测解码以加速推理过程。在预训练阶段,我们设计了 FP8 混合精度训练框架,首次在超大规模模型上验证了 FP8 训练的可行性和有效性。通过算法、框架和硬件的协同设计,我们克服了跨节点 MoE 训练中的通信瓶颈,实现了近乎完全的计算 - 通信重叠,显著提高了训练效率,降低了训练成本,从而能够在不增加额外开销的情况下进一步扩大模型规模。在训练后优化阶段,我们引入了创新方法,将来自长思维链(CoT)模型 DeepSeek R1 系列中一个模型的推理能力提炼到标准大语言模型中,特别是 DeepSeek-V3。我们的流程巧妙地将 R1 的验证和反思模式融入 DeepSeek-V3,显著提升了其推理性能,同时我们也对 DeepSeek-V3 的输出风格和长度进行了有效控制。

    尽管取得了这些进展,但 DeepSeek-V3 仍存在一些局限性。在模型架构方面,尽管无辅助损失的负载均衡策略在一定程度上解决了负载平衡与模型性能之间的权衡问题,但在处理高度不均衡的工作负载时,可能仍需要进一步优化。此外,虽然 MTP 目标显示出了潜力,但目前的实现方式可能未充分挖掘其在复杂任务中的全部能力。在训练过程中,尽管我们通过 FP8 混合精度训练和其他优化技术显著提高了训练效率,但低精度训练中的量化误差仍然是一个需要关注的问题,尤其是在处理大规模模型时,这些误差可能会累积并影响模型性能。在评估方面,虽然我们在多个基准测试中评估了 DeepSeek-V3,但现有的基准测试可能无法完全捕捉到模型在现实世界应用中的所有方面,例如模型在面对高度专业化领域的任务时的性能表现,以及在长时间对话场景中的稳定性和适应性。

    展望未来,有多个研究方向值得探索。在模型架构改进方面,我们计划进一步研究更高效的负载均衡策略,以适应更复杂的工作负载模式。对于 MTP,我们将探索更先进的实现方式,例如结合强化学习动态调整预测范围,以更好地适应不同的任务需求。在训练技术上,我们将致力于开发更精确的量化方法,减少低精度训练中的误差累积,同时探索新的训练算法,进一步提高训练效率和模型的收敛速度。在评估方法上,我们将开发新的基准测试,以更全面地评估模型在实际应用中的性能,包括模型在实际业务场景中的效果,以及与人类用户交互时的表现。此外,我们还计划探索如何更好地将外部知识整合到模型中,例如通过知识图谱或其他结构化数据源,以进一步提升模型的知识储备和推理能力。最后,随着硬件技术的不断发展,我们将持续优化模型与硬件的协同设计,充分利用新硬件的特性,实现更高的计算效率和性能表现。通过这些努力,我们期望在未来能够进一步提升大语言模型的能力,推动人工智能技术向通用人工智能(AGI)的目标迈进。

  • 附录

    A. 贡献与致谢

    我们衷心感谢 DeepSeek-AI 团队的所有成员,他们在 DeepSeek-V3 的研究、开发和训练过程中付出了辛勤努力。特别感谢那些参与模型架构设计、训练框架优化、数据处理和实验评估的研究人员,他们的专业知识和创新思维对本项目的成功起到了关键作用。我们也感谢 NVIDIA 公司提供的强大计算资源,尤其是 H800 GPU,这使得我们能够高效地训练 DeepSeek-V3 这样的大规模模型。此外,我们还要感谢开源社区的贡献,许多公开可用的数据集、模型和工具为我们的研究提供了宝贵的基础和参考。

    B. 低精度训练的消融实验

    image-20250212232023673

    B.1 FP8 与 BF16 训练对比

    在本附录中,我们详细比较了使用 FP8 和 BF16 数据格式进行训练的效果。我们在两个与 DeepSeek-V2-Lite 和 DeepSeek-V2 规模相似的模型上验证了所提出的 FP8 混合精度训练框架,每个模型均在约 1 万亿个 token 上进行训练。实验结果表明,与 BF16 基线相比,我们使用 FP8 训练的模型的相对损失误差始终保持在 0.25% 以下,这一误差水平处于训练随机性的可接受范围内。这一结果证明了 FP8 训练在大规模模型训练中的可行性和有效性,为未来进一步探索低精度训练提供了有力支持。

    B.2 关于分块量化的讨论

    在低精度训练中,量化方法对模型性能有着重要影响。我们提出的细粒度量化方法包括对激活值按 1x128 切片分组缩放,对权重按 128x128 块分组缩放。在本部分,我们讨论了如果像对权重量化那样按块对激活值进行分组缩放时可能出现的训练不稳定性问题。当对激活值进行块级分组缩放时,由于激活值的分布更为复杂,可能会导致某些块内的异常值对整体量化效果产生较大影响,从而使得训练过程中的梯度计算出现偏差,进而影响模型的收敛性和稳定性。相比之下,我们采用的 1x128 切片分组缩放策略能够更好地适应激活值的特性,减少异常值的影响,确保训练的稳定性。

    C. 基于 160 亿参数的有辅助损失和无辅助损失模型的专家专业化模式

    本附录展示了基于 160 亿参数的有辅助损失和无辅助损失模型在不同领域的专家负载情况,以研究专家专业化模式。我们记录并分析了 Pile 测试集中不同领域上这两种模型的专家负载。结果表明,无辅助损失模型展现出了更强的专家专业化模式,这意味着该模型的专家能够更好地专注于特定领域的任务。例如,在维基百科(英语)、Github 和离散数学(DM Mathematics)等领域,无辅助损失模型的专家负载分布更为集中,不同专家在各自擅长的领域表现出更高的活跃度。这一结果验证了无辅助损失策略在促进专家专业化方面的优势,为理解模型的行为和优化模型架构提供了有价值的见解,详细结果可在附录中的相关图表中查看。

打赏
支付宝
微信
本文作者:Parker Luxu
版权声明:本文首发于Parker Luxu的博客,转载请注明出处!