我们提出了 DeepSeek-V3,一个强大的 Mixture-of-Experts (MoE) 语言模型,总参数量为 671B,每个 token 激活的参数量为 37B。为了实现高效的推理和低成本的训练,DeepSeek-V3 采用了 Multi-head Latent Attention (MLA) 和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中已经得到了充分验证。此外,DeepSeek-V3 首次引入了 无辅助损失的负载均衡策略,并设置了 多 token 预测训练目标 以提升性能。我们在 14.8 万亿 个多样且高质量的 token 上对 DeepSeek-V3 进行了预训练,随后通过 监督微调 (SFT) 和 强化学习 (RL) 阶段来充分发挥其潜力。综合评估表明,DeepSeek-V3 在开源模型中表现优异,性能接近领先的闭源模型。尽管性能卓越,DeepSeek-V3 的完整训练仅需 2.788M H800 GPU 小时,训练过程非常稳定,未出现不可恢复的损失峰值或回滚。模型检查点可在 https://github.com/deepseek-ai/DeepSeek-V3 获取。
图 1 | DeepSeek-V3 及其对比模型的基准性能。
近年来,大语言模型 (LLMs) 经历了快速的迭代和演进(Anthropic, 2024; Google, 2024; OpenAI),逐步缩小了与 通用人工智能 (AGI) 的差距。除了闭源模型,开源模型也在取得显著进展,包括 DeepSeek 系列(DeepSeek-AI; Guo et al., 2024)、LLaMA 系列(Al@Meta; Touvron et al.)、Qwen 系列(Qwen, 2023)和 Mistral 系列(Jiang et al., 2023; Mistral, 2024),它们都在努力缩小与闭源模型的差距。为了进一步推动开源模型的能力边界,我们扩展了模型规模,并推出了 DeepSeek-V3,一个总参数量为 671B 的大型 Mixture-of-Experts (MoE) 模型,每个 token 激活的参数量为 37B。
我们始终以长远的视角追求强大的模型性能和经济的成本。因此,在架构方面,DeepSeek-V3 仍然采用 Multi-head Latent Attention (MLA) 以实现高效推理,并采用 DeepSeekMoE(Dai et al., 2024)以实现低成本训练。这两种架构在 DeepSeek-V2 中已经得到了验证,证明了它们在保持强大模型性能的同时,能够实现高效的训练和推理。除了基本架构外,我们还实施了两种额外策略以进一步提升模型能力。首先,DeepSeek-V3 首次引入了 无辅助损失的负载均衡策略(Wang et al.),旨在最小化因鼓励负载均衡而对模型性能产生的负面影响。其次,DeepSeek-V3 采用了 多 token 预测训练目标,我们观察到这可以提升评估基准的整体性能。
为了实现高效训练,我们支持 FP8 混合精度训练,并对训练框架进行了全面优化。低精度训练已成为高效训练的一种有前景的解决方案(Dettmers et al., 2022; Kalamkar et al., 2019; Narang et al., 2017; Peng et al.),其发展与硬件能力的进步密切相关(Luo et al., 2024; Micikevicius et al., 2022; Rouhani et al.)。在这项工作中,我们引入了 FP8 混合精度训练框架,并首次在超大规模模型上验证了其有效性。通过支持 FP8 计算和存储,我们实现了加速训练和减少 GPU 内存使用。对于训练框架,我们设计了 DualPipe 算法以实现高效的流水线并行,该算法减少了流水线气泡,并通过计算-通信重叠隐藏了大部分通信。这种重叠确保了随着模型的进一步扩展,只要我们保持恒定的计算-通信比,我们仍然可以在跨节点使用细粒度专家的同时,实现接近零的 all-to-all 通信开销。此外,我们还开发了高效的跨节点 all-to-all 通信内核,以充分利用 InfiniBand (IB) 和 NVLink 的带宽。我们还精心优化了内存占用,使得在不使用昂贵的张量并行的情况下训练 DeepSeek-V3 成为可能。结合这些努力,我们实现了高训练效率。
在预训练阶段,我们在 14.8 万亿 个高质量且多样化的 token 上训练了 DeepSeek-V3。预训练过程非常稳定,在整个训练过程中,我们没有遇到任何不可恢复的损失峰值或回滚。接下来,我们对 DeepSeek-V3 进行了两阶段的上下文长度扩展。在第一阶段,最大上下文长度扩展到 32K,在第二阶段进一步扩展到 128K。随后,我们对 DeepSeek-V3 的基础模型进行了微调,包括 监督微调 (SFT) 和 强化学习 (RL),以使其与人类偏好对齐,并进一步释放其潜力。在微调阶段,我们从 DeepSeek-R1 系列模型中蒸馏了推理能力,同时仔细保持了模型准确性和生成长度之间的平衡。
我们在广泛的基准测试中评估了 DeepSeek-V3。尽管训练成本经济,综合评估表明,DeepSeek-V3-Base 已成为当前最强的开源基础模型,尤其是在代码和数学任务上。其聊天版本也在开源模型中表现优异,并在标准和开放式基准测试中达到了与领先闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相当的性能。
最后,我们再次强调 DeepSeek-V3 的经济训练成本,总结在表 1 中,这是通过我们对算法、框架和硬件的优化协同设计实现的。在预训练阶段,训练 DeepSeek-V3 每万亿 token 仅需 180K H800 GPU 小时,即在我们配备 2048 个 H800 GPU 的集群上仅需 3.7 天。因此,我们的预训练阶段在不到两个月内完成,成本为 2664K GPU 小时。结合上下文长度扩展的 119K GPU 小时 和微调的 5K GPU 小时,DeepSeek-V3 的完整训练仅需 2.788M GPU 小时。假设 H800 GPU 的租赁价格为每小时 2∗∗,我们的总训练成本仅为∗∗2∗∗,我们的总训练成本仅为∗∗5.576M。需要注意的是,上述成本仅包括 DeepSeek-V3 的官方训练,不包括在架构、算法或数据上的前期研究和消融实验的成本。
我们的主要贡献包括:
架构:创新的负载均衡策略与训练目标
预训练:追求极致的训练效率
微调:从 DeepSeek-R1 蒸馏知识
核心评估结果总结
在本文的剩余部分,我们首先详细介绍了 DeepSeek-V3 的模型架构(第 2 节)。随后,我们介绍了我们的基础设施,包括计算集群、训练框架、FP8 训练支持、推理部署策略以及未来硬件设计的建议(第 3 节)。接下来,我们描述了预训练过程,包括训练数据的构建、超参数设置、长上下文扩展技术、相关评估以及一些讨论(第 4 节)。此后,我们讨论了微调工作,包括监督微调 (SFT)、强化学习 (RL)、相应的评估和讨论(第 5 节)。最后,我们总结了这项工作,讨论了 DeepSeek-V3 的现有局限性,并提出了未来研究的潜在方向(第 6 节)。
(由于篇幅限制,后续部分将逐步翻译。)
继续翻译
以下是论文的继续翻译:
我们首先介绍 DeepSeek-V3 的基本架构,其特点是采用 Multi-head Latent Attention (MLA) 以实现高效推理,以及 DeepSeekMoE 以实现低成本训练。然后,我们介绍了 多 token 预测 (MTP) 训练目标,我们观察到这可以提升评估基准的整体性能。对于其他未明确提及的细节,DeepSeek-V3 遵循 DeepSeek-V2 的设置(DeepSeek-AI)。
DeepSeek-V3 的基本架构仍然基于 Transformer(Vaswani et al., 2017)。为了实现高效推理和低成本训练,DeepSeek-V3 也采用了 MLA 和 DeepSeekMoE,这些架构在 DeepSeek-V2 中已经得到了充分验证。与 DeepSeek-V2 相比,一个例外是我们额外引入了 无辅助损失的负载均衡策略(Wang et al.),以减轻因确保负载均衡而对模型性能产生的负面影响。图 2 展示了 DeepSeek-V3 的基本架构,我们将在本节简要回顾 MLA 和 DeepSeekMoE 的细节。
在 attention 方面,DeepSeek-V3 采用了 MLA 架构。设 dd 为嵌入维度,nhnh 为 attention 头数,dhdh 为每个头的维度,ht∈Rdht∈Rd 为给定 attention 层的第 tt 个 token 的 attention 输入。MLA 的核心是对 attention 的 key 和 value 进行低秩联合压缩,以减少推理时的 KV 缓存:
[kt,1C;kt,2C;…;kt,nhC]=vtDKVht⏟=ktC=wUKctKV⏟=RoPE(wKRht),[kt,1C;kt,2C;…;kt,nhC]==ktCvtDKVht==RoPE(wKRht)wUKctKV,(1)
[vt,1C;vt,2C;…;vt,nhC]=vtC=wUVctKV,[vt,1C;vt,2C;…;vt,nhC]=vtC=wUVctKV,(5)
图 2:DeepSeek-V3 基本架构示意图。我们遵循 DeepSeek-V2,采用 MLA 和 DeepSeekMoE 以实现高效推理和低成本训练。
对于 Feed-Forward Networks (FFNs),DeepSeek-V3 采用了 DeepSeekMoE 架构(Dai et al., 2024)。与传统的 MoE 架构(如 CShard,Lepikhin et al., 2021)相比,DeepSeekMoE 使用了更细粒度的专家,并将部分专家隔离为共享专家。设 utut 为第 tt 个 token 的 FFN 输入,我们计算 FFN 输出 ht′ht′ 如下:
ht′=ut+∑i=1NtFFNi(s)(ut)+∑i=1Ntgi,t FFNi(r)(ut),ht′=ut+∑i=1NtFFNi(s)(ut)+∑i=1Ntgi,t FFNi(r)(ut),(12)
gi,t=gi,t′∑j=1Ntgj,t′,gi,t=∑j=1Ntgj,t′gi,t′,(13)
gi,t′={si,t,si,t∈Topk({sj,t∣1⩽j⩽Nr},Kr),0,otherwise,gi,t′={si,t,0,si,t∈Topk({sj,t∣1⩽j⩽Nr},Kr),otherwise,(14)
si,t=Sigmoid(utTet),si,t=Sigmoid(utTet),(15)
受 Gloeckle et al. (2024) 的启发,我们研究并设置了 多 token 预测 (MTP) 目标,扩展了每个位置的预测范围,使其能够预测多个未来的 token。一方面,MTP 目标增加了训练信号的密度,可能提高数据效率。另一方面,MTP 可能使模型能够预先规划其表示,以更好地预测未来的 token。图 3 展示了我们的 MTP 实现。与 Gloeckle et al. (2024) 不同,后者使用独立的输出头并行预测 DD 个额外的 token,而我们则顺序预测额外的 token,并在每个预测深度保持完整的因果链。
DeepSeek-V3 在配备了 2048 个 NVIDIA H800 GPU 的集群上进行训练。每个节点包含 8 个 GPU,通过 NVLink 和 NVSwitch 连接,节点之间通过 InfiniBand (IB) 进行通信。
DeepSeek-V3 的训练由 HAI-LLM 框架支持,这是一个由我们的工程师从头构建的高效且轻量级的训练框架。整体上,DeepSeek-V3 应用了 16 路流水线并行 (PP)、64 路专家并行 (EP) 和 ZeRO-1 数据并行 (DP)。
为了促进 DeepSeek-V3 的高效训练,我们实施了精细的工程优化。首先,我们设计了 DualPipe 算法以实现高效的流水线并行。与现有的 PP 方法相比,DualPipe 减少了流水线气泡。更重要的是,它重叠了前向和后向过程中的计算和通信阶段,从而解决了跨节点专家并行引入的沉重通信开销问题。其次,我们开发了高效的跨节点 all-to-all 通信内核,以充分利用 IB 和 NVLink 的带宽,并节省用于通信的 Streaming Multiprocessors (SMs)。最后,我们精心优化了训练期间的内存占用,从而使得在不使用昂贵的张量并行 (TP) 的情况下训练 DeepSeek-V3 成为可能。
(由于篇幅限制,后续部分将逐步翻译。)
继续翻译
以下是论文的继续翻译:
对于 DeepSeek-V3,跨节点专家并行引入的通信开销导致计算-通信比约为 1:1,效率较低。为了解决这一挑战,我们设计了一种创新的流水线并行算法,称为 DualPipe,它不仅通过有效重叠前向和后向计算-通信阶段加速了模型训练,还减少了流水线气泡。
DualPipe 的关键思想是在一对独立的前向和后向块中重叠计算和通信。具体来说,我们将每个块分为四个组件:attention、all-to-all 分发、MLP 和 all-to-all 合并。特别地,对于后向块,attention 和 MLP 进一步分为两部分,即输入的后向和权重的后向,类似于 ZeroBubble(Qi et al.)。此外,我们还有一个 PP 通信组件。如图 4 所示,对于一对前向和后向块,我们重新排列这些组件,并手动调整用于通信与计算的 GPU SMs 比例。在这种重叠策略中,我们可以确保 all-to-all 和 PP 通信在执行过程中完全隐藏。鉴于这种高效的重叠策略,完整的 DualPipe 调度如图 5 所示。它采用了双向流水线调度,同时从管道的两端输入微批次,并且大部分通信可以完全重叠。这种重叠还确保了随着模型的进一步扩展,只要我们保持恒定的计算-通信比,我们仍然可以在跨节点使用细粒度专家的同时,实现接近零的 all-to-all 通信开销。
图 4:一对独立前向和后向块的重叠策略(Transformer 块的边界未对齐)。橙色表示前向,绿色表示“输入的后向”,蓝色表示“权重的后向”,紫色表示 PP 通信,红色表示屏障。all-to-all 和 PP 通信都可以完全隐藏。
为了确保 DualPipe 的计算性能,我们定制了高效的跨节点 all-to-all 通信内核(包括分发和合并),以节省用于通信的 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 个 SMs 即可充分利用 IB 和 NVLink 的带宽。
详细来说,我们采用了 warp 专业化技术(Bauer et al., 2014),并将 20 个 SMs 划分为 10 个通信通道。在分发过程中,(1) IB 发送,(2) IB 到 NVLink 转发,以及 (3) NVLink 接收分别由各自的 warp 处理。分配给每个通信任务的 warp 数量根据所有 SMs 的实际工作负载动态调整。类似地,在合并过程中,(1) NVLink 发送,(2) NVLink 到 IB 转发和累加,以及 (3) IB 接收和累加也由动态调整的 warp 处理。此外,分发和合并内核与计算流重叠,因此我们还考虑了它们对其他 SM 计算内核的影响。具体来说,我们采用了定制的 PTX(Parallel Thread Execution)指令,并自动调整通信块大小,这显著减少了 L2 缓存的使用,并减少了对其他 SMs 的干扰。
为了减少训练期间的内存占用,我们采用了以下技术。
RMSNorm 和 MLA 上投影的重计算:我们在反向传播期间重计算所有 RMSNorm 操作和 MLA 上投影,从而消除了持久存储其输出激活的需求。通过较小的开销,这一策略显著减少了存储激活的内存需求。
CPU 中的指数移动平均:在训练期间,我们保留模型参数的指数移动平均 (EMA),以在学习率衰减后早期估计模型性能。EMA 参数存储在 CPU 内存中,并在每个训练步骤后异步更新。这种方法使我们能够在不增加额外内存或时间开销的情况下维护 EMA 参数。
多 token 预测的共享嵌入和输出头:通过 DualPipe 策略,我们将模型的最浅层(包括嵌入层)和最深层(包括输出头)部署在同一个 PP rank 上。这种安排使得 MTP 模块和主模型之间的共享嵌入和输出头的参数和梯度能够物理共享。这种物理共享机制进一步提高了我们的内存效率。
受低精度训练最新进展的启发(Dettmers et al., 2022; Noune et al., 2022; Peng et al.),我们提出了一个利用 FP8 数据格式的细粒度混合精度框架,用于训练 DeepSeek-V3。尽管低精度训练前景广阔,但它通常受到激活、权重和梯度中异常值的限制(Fishman et al., 2024; He et al.; Sun et al., 2024)。尽管在推理量化方面取得了显著进展(Frantar et al., 2022; Xiao et al., 2023),但在大规模语言模型预训练中成功应用低精度技术的研究相对较少(Fishman et al., 2024)。为了解决这一挑战并有效扩展 FP8 格式的动态范围,我们引入了一种细粒度的量化策略:1×Nc 元素的 tile-wise 分组 或 Nc×Nc 元素的 block-wise 分组。相关的反量化开销在我们的增加精度累加过程中得到了显著缓解,这是实现准确 FP8 通用矩阵乘法 (GEMM) 的关键方面。此外,为了进一步减少 MoE 训练中的内存和通信开销,我们以 FP8 缓存和分发激活,同时以 BF16 存储低精度优化器状态。我们在两个与 DeepSeek-V2-Lite 和 DeepSeek-V2 相似的模型规模上验证了所提出的 FP8 混合精度框架,训练了大约 1 万亿 token(更多细节见附录 B.1)。值得注意的是,与 BF16 基线相比,我们的 FP8 训练模型的相对损失误差始终低于 0.25%,这一水平在训练随机性的可接受范围内。
基于低精度训练中广泛采用的技术(Kalamkar et al., 2019; Narang et al., 2017),我们提出了一个用于 FP8 训练的混合精度框架。在该框架中,大多数计算密集型操作以 FP8 进行,而少数关键操作则战略性地保持其原始数据格式,以平衡训练效率和数值稳定性。整体框架如图 6 所示。
首先,为了加速模型训练,大多数核心计算内核(即 GEMM 操作)以 FP8 精度实现。这些 GEMM 操作接受 FP8 张量作为输入,并生成 BF16 或 FP32 输出。如图 6 所示,与 Linear 算子相关的所有三个 GEMM,即 Fprop(前向传播)、Dgrad(激活反向传播)和 Wgrad(权重反向传播),都以 FP8 执行。这一设计理论上比原始的 BF16 方法快一倍。此外,FP8 Wgrad GEMM 允许以 FP8 存储激活,以便在反向传播中使用。这显著减少了内存消耗。
尽管 FP8 格式具有效率优势,但某些算子由于对低精度计算的敏感性,仍然需要更高的精度。此外,一些低成本算子也可以以更高的精度运行,而对整体训练成本的影响可以忽略不计。因此,经过仔细研究,我们为以下组件保留了原始精度(例如 BF16 或 FP32):嵌入模块、输出头、MoE 门控模块、归一化算子和 attention 算子。这些有针对性的高精度保留确保了 DeepSeek-V3 的训练动态稳定性。为了进一步保证数值稳定性,我们以更高精度存储主权重、权重梯度和优化器状态。尽管这些高精度组件会带来一些内存开销,但通过在我们的分布式训练系统中跨多个 DP rank 高效分片,可以将其影响降至最低。
图 6:FP8 数据格式的混合精度框架。为清晰起见,仅展示了 Linear 算子。
基于我们的混合精度 FP8 框架,我们引入了多种策略来提升低精度训练的准确性,重点关注量化方法和乘法过程。
细粒度量化:在低精度训练框架中,由于 FP8 格式的动态范围有限,溢出和下溢是常见的挑战。作为标准做法,输入分布通过将输入张量的最大绝对值缩放到 FP8 的最大可表示值来对齐(Narang et al., 2017)。这种方法使得低精度训练对激活异常值高度敏感,这会严重降低量化精度。为了解决这个问题,我们提出了一种细粒度的量化方法,在更细粒度级别上应用缩放。如图 7 (a) 所示,(1) 对于激活,我们在 1×128 tile 基础上对元素进行分组和缩放(即每个 token 每 128 个通道);(2) 对于权重,我们在 128×128 block 基础上对元素进行分组和缩放(即每 128 个输入通道每 128 个输出通道)。这种方法确保量化过程能够更好地适应异常值,通过根据较小的元素组调整缩放比例。
(由于篇幅限制,后续部分将逐步翻译。)
继续翻译
以下是论文的继续翻译:
增加累加精度:低精度 GEMM 操作通常存在下溢问题,其精度在很大程度上依赖于高精度累加,通常以 FP32 精度进行(Kalamkar et al., 2019; Narang et al., 2017)。然而,我们观察到,在 NVIDIA H800 GPU 上,FP8 GEMM 的累加精度仅限于保留约 14 位,这显著低于 FP32 的累加精度。当内部维度 K 较大时,这一问题将更加明显(Wortsman et al., 2023),这是大规模模型训练中的典型场景,因为批次大小和模型宽度增加。以两个随机矩阵的 GEMM 操作为例,K = 4096,在我们的初步测试中,Tensor Cores 中有限的累加精度导致最大相对误差接近 2%。尽管存在这些问题,有限的累加精度仍然是少数 FP8 框架中的默认选项(NVIDIA),严重限制了训练精度。
为了解决这一问题,我们采用了 提升到 CUDA Cores 以获得更高精度 的策略(Thakkar et al., 2023)。该过程如图 7 (b) 所示。具体来说,在 Tensor Cores 上执行 MMA(矩阵乘加)时,中间结果使用有限的位宽累加。一旦达到 NCNC 的间隔,这些部分结果将被复制到 CUDA Cores 上的 FP32 寄存器中,在那里执行全精度的 FP32 累加。如前所述,我们的细粒度量化沿内部维度 K 应用每组的缩放因子。这些缩放因子可以在 CUDA Cores 上作为反量化过程高效地相乘,而额外的计算成本最小。
值得注意的是,这种修改降低了单个 warpgroup 的 WGMMA(Warpgroup-level Matrix Multiply-Accumulate)指令发出率。然而,在 H800 架构上,通常可以同时执行两个 WGMMA:当一个 warpgroup 执行提升操作时,另一个可以执行 MMA 操作。这种设计使得两个操作可以重叠,保持 Tensor Cores 的高利用率。根据我们的实验,设置 NC=128NC=128 个元素(相当于 4 个 WGMMA)是显著提高精度而不引入大量开销的最小累加间隔。
尾数优先于指数:与之前工作采用的混合 FP8 格式(NVIDIA; Peng et al.; Sun et al.)不同,后者在 Fprop 中使用 E4M3(4 位指数和 3 位尾数),在 Dgrad 和 Wgrad 中使用 E5M2(5 位指数和 2 位尾数),我们在所有张量上采用 E4M3 格式以获得更高的精度。我们将这种方法的可行性归功于我们的细粒度量化策略,即 tile 和 block-wise 缩放。通过在较小的元素组上操作,我们的方法有效地在这些分组元素之间共享指数位,从而减轻了有限动态范围的影响。
在线量化:在张量级量化框架中采用了延迟量化(NVIDIA; Peng et al.),它保留了先前迭代的最大绝对值历史记录以推断当前值。为了确保准确的缩放并简化框架,我们在线计算每个 1×128 激活 tile 或 128×128 权重块的最大绝对值。基于此,我们推导出缩放因子,然后将激活或权重在线量化为 FP8 格式。
结合我们的 FP8 训练框架,我们通过将缓存的激活和优化器状态压缩为低精度格式,进一步减少了内存消耗和通信开销。
低精度优化器状态:我们采用 BF16 数据格式而不是 FP32 来跟踪 AdamW 优化器(Loshchilov and Hutter, 2017)中的第一和第二时刻,而不会导致可观察到的性能下降。然而,主权重(由优化器存储)和梯度(用于批次大小累加)仍然以 FP32 保留,以确保整个训练过程中的数值稳定性。
低精度激活:如图 6 所示,Wgrad 操作以 FP8 执行。为了减少内存消耗,自然的选择是以 FP8 格式缓存激活以供 Linear 算子的反向传播使用。然而,对于几个算子,我们采取了特殊考虑以实现低成本的高精度训练:
(1) attention 算子后的 Linear 输入:这些激活也用于 attention 算子的反向传播,这使得它对精度敏感。我们为这些激活采用了定制的 E5M6 数据格式。此外,这些激活在反向传播中将从 1×128 量化 tile 转换为 128×1 tile。为了避免引入额外的量化误差,所有缩放因子都是 2 的整数幂。
(2) MoE 中 SwiGLU 算子的输入:为了进一步减少内存成本,我们缓存 SwiGLU 算子的输入,并在反向传播中重计算其输出。这些激活也以 FP8 存储,采用我们的细粒度量化方法,在内存效率和计算精度之间取得了平衡。
低精度通信:通信带宽是 MoE 模型训练的关键瓶颈。为了缓解这一挑战,我们在 MoE 上投影之前将激活量化为 FP8,然后应用分发组件,这与 MoE 上投影中的 FP8 Fprop 兼容。与 attention 算子后的 Linear 输入类似,此激活的缩放因子是 2 的整数幂。类似的策略应用于 MoE 下投影之前的激活梯度。对于前向和后向合并组件,我们以 BF16 保留它们,以确保训练管道关键部分的训练精度。
我们在 H800 集群上部署了 DeepSeek-V3,其中每个节点内的 GPU 通过 NVLink 互连,集群中的所有 GPU 通过 IB 完全互连。为了同时确保在线服务的 服务级别目标 (SLO) 和高吞吐量,我们采用了以下部署策略,将 预填充 和 解码 阶段分开。
预填充阶段的最小部署单元由 4 个节点和 32 个 GPU 组成。attention 部分采用 4 路张量并行 (TP4) 和序列并行 (SP),结合 8 路数据并行 (DP8)。其较小的 TP 大小(4)限制了 TP 通信的开销。对于 MoE 部分,我们使用 32 路专家并行 (EP32),确保每个专家处理足够大的批次大小,从而提高计算效率。对于 MoE all-to-all 通信,我们使用与训练相同的方法:首先通过 IB 跨节点传输 token,然后通过 NVLink 在节点内 GPU 之间转发。特别是,我们在浅层密集 MLP 中使用 1 路张量并行以节省 TP 通信。
为了在 MoE 部分实现不同专家之间的负载均衡,我们需要确保每个 GPU 处理大致相同数量的 token。为此,我们引入了 冗余专家 的部署策略,即复制高负载专家并冗余部署它们。高负载专家基于在线部署期间收集的统计数据进行检测,并定期调整(例如每 10 分钟)。在确定冗余专家集后,我们根据观察到的负载仔细重新安排节点内 GPU 之间的专家,尽可能平衡 GPU 之间的负载,而不会增加跨节点 all-to-all 通信的开销。对于 DeepSeek-V3 的部署,我们在预填充阶段设置了 32 个冗余专家。对于每个 GPU,除了其托管的原始 8 个专家外,它还将托管一个额外的冗余专家。
此外,在预填充阶段,为了提高吞吐量并隐藏 all-to-all 和 TP 通信的开销,我们同时处理两个计算工作量相似的微批次,将一个微批次的 attention 和 MoE 与另一个微批次的分发和合并重叠。
最后,我们正在探索专家的 动态冗余 策略,其中每个 GPU 托管更多专家(例如 16 个专家),但在每个推理步骤中仅激活 9 个专家。在每层的 all-to-all 操作开始之前,我们动态计算全局最优路由方案。鉴于预填充阶段涉及大量计算,计算此路由方案的开销几乎可以忽略不计。
在解码期间,我们将共享专家视为路由专家。从这个角度来看,每个 token 在路由期间将选择 9 个专家,其中共享专家被视为始终被选择的高负载专家。解码阶段的最小部署单元由 40 个节点和 320 个 GPU 组成。attention 部分采用 TP4 和 SP,结合 DP80,而 MoE 部分使用 EP320。对于 MoE 部分,每个 GPU 仅托管一个专家,64 个 GPU 负责托管冗余专家和共享专家。分发和合并部分的 all-to-all 通信通过 IB 的直接点对点传输实现,以实现低延迟。此外,我们利用 IBGDA 技术(NVIDIA, 2022)进一步最小化延迟并提高通信效率。
与预填充类似,我们基于在线服务的统计专家负载,在一定间隔内定期确定冗余专家集。然而,我们不需要重新安排专家,因为每个 GPU 仅托管一个专家。我们也在探索解码阶段的 动态冗余 策略。然而,这需要更仔细地优化计算全局最优路由方案的算法,并与分发内核融合以减少开销。
此外,为了提高吞吐量并隐藏 all-to-all 通信的开销,我们还在解码阶段探索同时处理两个计算工作量相似的微批次。与预填充不同,解码阶段 attention 消耗的时间比例较大。因此,我们将一个微批次的 attention 与另一个微批次的分发+MoE+合并重叠。在解码阶段,每个专家的批次大小相对较小(通常在 256 个 token 以内),瓶颈是内存访问而不是计算。由于 MoE 部分仅需要加载一个专家的参数,内存访问开销最小,因此使用较少的 SMs 不会显著影响整体性能。因此,为了避免影响 attention 部分的计算速度,我们可以仅分配一小部分 SMs 给分发+MoE+合并。
基于我们对 all-to-all 通信和 FP8 训练方案的实现,我们向 AI 硬件供应商提出了以下芯片设计建议。
在 DeepSeek-V3 中,我们实现了计算与通信的重叠,以隐藏计算期间的通信延迟。这显著减少了对通信带宽的依赖,相比于串行计算和通信。然而,当前的通信实现依赖于昂贵的 SMs(例如,我们为通信分配了 H800 GPU 中 132 个 SMs 中的 20 个),这将限制计算吞吐量。此外,使用 SMs 进行通信会导致显著的效率低下,因为 Tensor Cores 完全未被利用。
目前,SMs 主要执行以下 all-to-all 通信任务:
我们期望未来的供应商开发硬件,将这些通信任务从宝贵的计算单元 SM 中卸载,作为 GPU 协处理器或网络协处理器,如 NVIDIA SHARP(Graham et al., 2016)。此外,为了降低应用程序编程的复杂性,我们希望这种硬件能够从计算单元的角度统一 IB(扩展)和 NVLink(扩展)网络。通过这种统一接口,计算单元可以轻松完成跨整个 IB-NVLink 统一域的读取、写入、多播和 reduce 等操作,通过提交基于简单原语的通信请求。
Tensor Cores 中更高的 FP8 GEMM 累加精度:在 NVIDIA Hopper 架构的当前 Tensor Core 实现中,FP8 GEMM(通用矩阵乘法)采用定点累加,基于最大指数右移对齐尾数乘积后再相加。我们的实验表明,在符号填充右移后,它仅使用每个尾数乘积的最高 14 位,并截断超出此范围的位。然而,例如,要从 32 个 FP8×FP8 乘法的累加中获得精确的 FP32 结果,至少需要 34 位 精度。因此,我们建议未来的芯片设计增加 Tensor Cores 中的累加精度,以支持全精度累加,或根据训练和推理算法的精度要求选择合适的累加位宽。这种方法确保误差保持在可接受的范围内,同时保持计算效率。
支持 tile 和 block-wise 量化:当前 GPU 仅支持每张量量化,缺乏对我们 tile 和 block-wise 量化等细粒度量化的原生支持。在当前实现中,当达到 NCNC 间隔时,部分结果将从 Tensor Cores 复制到 CUDA Cores,乘以缩放因子,并添加到 CUDA Cores 上的 FP32 寄存器中。尽管结合我们的精确 FP32 累加策略,反量化开销显著减少,但 Tensor Cores 和 CUDA Cores 之间的频繁数据移动仍然限制了计算效率。因此,我们建议未来的芯片通过使 Tensor Cores 能够接收缩放因子并实现具有组缩放的 MMA 来支持细粒度量化。通过这种方式,整个部分和累加和反量化可以直接在 Tensor Cores 内完成,直到生成最终结果,避免频繁的数据移动。
支持在线量化:尽管在线量化的有效性在我们的研究中得到了证明,但当前实现难以有效支持它。在现有流程中,我们需要从 HBM(高带宽内存)读取 128 个 BF16 激活值(前一次计算的输出)进行量化,然后将量化的 FP8 值写回 HBM,仅为了再次读取以进行 MMA。为了解决这种低效问题,我们建议未来的芯片将 FP8 转换和 TMA(Tensor Memory Accelerator)访问集成到单个融合操作中,以便在将激活从全局内存传输到共享内存期间完成量化,避免频繁的内存读写。我们还建议支持 warp 级转换指令以加速,这进一步促进了层归一化和 FP8 转换的更好融合。或者,可以采用近内存计算方法,将计算逻辑放置在 HBM 附近。在这种情况下,BF16 元素可以在从 HBM 读取到 GPU 时直接转换为 FP8,从而将片外内存访问减少约 50%。
支持转置 GEMM 操作:当前架构使得将矩阵转置与 GEMM 操作融合变得繁琐。在我们的工作流程中,前向传播期间的激活被量化为 1×128 FP8 tile 并存储。在反向传播期间,矩阵需要被读取、反量化、转置、重新量化为 128×1 tile,并存储在 HBM 中。为了减少内存操作,我们建议未来的芯片能够直接从共享内存中在 MMA 操作之前进行矩阵的转置读取,适用于训练和推理中所需的精度。结合 FP8 格式转换和 TMA 访问的融合,这一增强将显著简化量化工作流程。
(由于篇幅限制,后续部分将逐步翻译。)
继续翻译
以下是论文的继续翻译:
与 DeepSeek-V2 相比,我们通过增加数学和编程样本的比例来优化预训练语料库,同时扩展了除英语和中文之外的多语言覆盖范围。此外,我们的数据处理管道经过优化,最大限度地减少了冗余,同时保持了语料库的多样性。受 Ding et al. (2024) 的启发,我们实施了文档打包方法以确保数据完整性,但在训练期间未引入跨样本 attention 掩码。最终,DeepSeek-V3 的训练语料库由 14.8 万亿 个高质量且多样化的 token 组成。
在 DeepSeekCoder-V2(DeepSeek-AI)的训练过程中,我们观察到 Fill-in-Middle (FIM) 策略在使模型能够根据上下文线索准确预测中间文本的同时,不会影响下一个 token 的预测能力。与 DeepSeekCoder-V2 一致,我们也在 DeepSeek-V3 的预训练中引入了 FIM 策略。具体来说,我们采用 Prefix-Suffix-Middle (PSM) 框架来构建数据,如下所示:
<∣fim_begin∣>fpre<∣fim_hole∣>fsurf<∣fim_end∣>fmiddle<∣eos_token∣>.<∣fim_begin∣>fpre<∣fim_hole∣>fsurf<∣fim_end∣>fmiddle<∣eos_token∣>.
这种结构在文档级别上作为预打包过程的一部分应用。FIM 策略以 0.1 的速率应用,与 PSM 框架一致。
DeepSeek-V3 的分词器采用 Byte-level BPE(Shibata et al., 1999),并扩展了 128K 个 token 的词汇表。我们的分词器和训练数据的预分词器经过修改,以优化多语言压缩效率。此外,与 DeepSeek-V2 相比,新的预分词器引入了结合标点符号和换行符的 token。然而,当模型处理没有终端换行符的多行提示时,这种技巧可能会引入 token 边界偏差(Lundberg, 2023),特别是在少样本评估提示中。为了解决这个问题,我们在训练期间随机拆分了一定比例的此类组合 token,使模型暴露于更广泛的特殊情况,从而减轻这种偏差。
模型超参数:我们将 Transformer 层数设置为 61,隐藏维度设置为 7168。所有可学习参数均以 0.006 的标准差随机初始化。在 MLA 中,我们将 attention 头数 nhnh 设置为 128,每个头的维度 dhdh 设置为 128。KV 压缩维度 dcdc 设置为 512,查询压缩维度 dc′dc′ 设置为 1536。对于解耦的查询和 key,我们将每个头的维度 dhRdhR 设置为 64。我们将除前三层之外的所有 FFN 替换为 MoE 层。每个 MoE 层包含 1 个共享专家 和 256 个路由专家,其中每个专家的中间隐藏维度为 2048。在路由专家中,每个 token 将激活 8 个专家,并且每个 token 最多发送到 4 个节点。多 token 预测深度 DD 设置为 1,即除了精确的下一个 token 外,每个 token 还将预测一个额外的 token。与 DeepSeek-V2 一样,DeepSeek-V3 也在压缩的 latent vector 后添加了额外的 RMSNorm 层,并在宽度瓶颈处乘以额外的缩放因子。在此配置下,DeepSeek-V3 包含 671B 个总参数,其中每个 token 激活 37B 个参数。
训练超参数:我们使用 AdamW 优化器(Loshchilov and Hutter, 2017),超参数设置为 β1=0.9β1=0.9,β2=0.95β2=0.95,weight_decay = 0.1。我们将预训练期间的最大序列长度设置为 4K,并在 14.8T token 上预训练 DeepSeek-V3。对于学习率调度,我们首先在前 2K 步中将其从 0 线性增加到 2.2×10⁻⁴。然后,我们保持 2.2×10⁻⁴ 的恒定学习率,直到模型消耗 10T 训练 token。随后,我们在 4.3T token 中逐渐将学习率衰减到 2.2×10⁻⁵,遵循余弦衰减曲线。在最后 500B token 的训练中,我们在前 333B token 中保持 2.2×10⁻⁵ 的恒定学习率,并在剩余的 167B token 中切换到另一个恒定学习率 7.3×10⁻⁶。梯度裁剪范数设置为 1.0。我们采用批次大小调度策略,在前 469B token 的训练中,批次大小从 3072 逐渐增加到 15360,然后在剩余训练中保持 15360。我们利用流水线并行将模型的不同层部署在不同的 GPU 上,对于每一层,路由专家将均匀部署在属于 8 个节点 的 64 个 GPU 上。对于节点限制的路由,每个 token 最多发送到 4 个节点(即 M=4M=4)。对于无辅助损失的负载均衡,我们将偏差更新速度 γγ 设置为 0.001,用于前 14.3T token,并在剩余的 500B token 中设置为 0.0。对于平衡损失,我们将 αα 设置为 0.0001,仅用于避免任何单个序列内的极端不平衡。MTP 损失权重 λλ 在前 10T token 中设置为 0.3,并在剩余的 4.8T token 中设置为 0.1。
我们采用了与 DeepSeek-V2(DeepSeek-AI)类似的方法,使 DeepSeek-V3 具备长上下文能力。在预训练阶段之后,我们应用 YaRN(Peng et al.)进行上下文扩展,并执行两个额外的训练阶段,每个阶段包含 1000 步,以逐步将上下文窗口从 4K 扩展到 32K,然后进一步扩展到 128K。YaRN 配置与 DeepSeek-V2 中使用的配置一致,仅应用于解耦的共享 key ktRktR。两个阶段的超参数保持一致,缩放因子 s=40s=40,α=1α=1,β=32β=32,缩放因子 t=0.1lns+1t=0.1lns+1。在第一阶段,序列长度设置为 32K,批次大小为 1920。在第二阶段,序列长度增加到 128K,批次大小减少到 480。两个阶段的学习率均设置为 7.3×10⁻⁶,与预训练阶段的最终学习率匹配。
图 8:DeepSeek-V3 在“Needle In A Haystack”(NIAH)测试中的评估结果。DeepSeek-V3 在所有上下文窗口长度(最高 128K)上表现良好。
DeepSeek-V3 的基础模型在英语和中文占主导地位的多语言语料库上进行了预训练,因此我们主要在英语和中文以及多语言基准测试中评估其性能。我们的评估基于集成在 HAI-LLM 框架中的内部评估框架。考虑的基准测试分类如下,其中下划线的基准测试为中文,双下划线的基准测试为多语言:
多学科多项选择 数据集包括 MMLU(Hendrycks et al., 2020)、MMLU-Redux(Gema et al., 2024)、MMLU-Pro(Wang et al., 2024b)、MMMLU(OpenAI, 2024b)、C-Eval(Huang et al., 2023)和 CMMLU(Li et al., 2023)。
语言理解与推理 数据集包括 HellaSwag(Zellers et al., 2019)、PIQA(Bisk et al., 2020)、ARC(Clark et al., 2018)和 BigBench Hard (BBH)(Suzgun et al., 2022)。
闭卷问答 数据集包括 TriviaQA(Joshi et al., 2017)和 NaturalQuestions(Kwiatkowski et al., 2019)。
阅读理解 数据集包括 RACE(Lai et al., 2017)、DROP(Dua et al., 2019)、C3(Sun et al., 2019a)和 CMRC(Cui et al., 2019)。
指代消解 数据集包括 CLUEWSC(Xu et al., 2020)和 WinoGrande(Sakaguchi et al., 2019)。
语言建模 数据集包括 Pile(Gao et al., 2020)。
中文理解与文化 数据集包括 CCPM(Li et al., 2021)。
数学 数据集包括 GSM8K(Cobbe et al., 2021)、MATH(Hendrycks et al., 2021)、MGSM(Shi et al., 2023)和 CMath(Wei et al., 2023)。
代码 数据集包括 HumanEval(Chen et al., 2021)、LiveCodeBench-Base(Jain et al., 2024)、MBPP(Austin et al., 2021)和 CRUXEval(Gu et al., 2024)。
标准化考试 包括 AGIEval(Zhong et al., 2023)。请注意,AGIEval 包括英语和中文子集。
根据我们之前的工作(DeepSeek-AI),我们对包括 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) 作为指标,以确保使用不同分词器的模型之间的公平比较。
在表 3 中,我们将 DeepSeek-V3 的基础模型与其他最先进的开源基础模型进行了比较,包括 DeepSeek-V2-Base(DeepSeek-AI)(我们之前的发布)、Qwen2.5 72B Base(Qwen)和 LLaMA-3.1 405B Base(Al@Meta)。我们使用内部评估框架评估了所有这些模型,并确保它们共享相同的评估设置。请注意,由于我们的评估框架在过去几个月中的变化,DeepSeek-V2-Base 的性能与我们之前报告的结果略有不同。总体而言,DeepSeek-V3-Base 全面超越了 DeepSeek-V2-Base 和 Qwen2.5 72B Base,并在大多数基准测试中超越了 LLaMA-3.1 405B Base,基本上成为最强的开源模型。
表 3:DeepSeek-V3-Base 与其他代表性开源基础模型的比较。所有模型均在我们的内部框架中评估,并共享相同的评估设置。DeepSeek-V3-Base 在大多数基准测试中表现最佳,尤其是在数学和代码任务上。
(由于篇幅限制,后续部分将逐步翻译。)
继续翻译
以下是论文的继续翻译:
从更详细的角度来看,我们将 DeepSeek-V3-Base 与其他开源基础模型进行了单独比较。(1) 与 DeepSeek-V2-Base 相比,由于我们的模型架构改进、模型规模和训练 token 的扩展以及数据质量的提升,DeepSeek-V3-Base 的表现显著提升,符合预期。(2) 与 Qwen2.5 72B Base 相比,这是当前最先进的中文开源模型,DeepSeek-V3-Base 仅使用了一半的激活参数,但在英语、多语言、代码和数学基准测试中表现出显著优势。在中文基准测试中,除了 CMMLU(一个中文多学科多项选择任务)外,DeepSeek-V3-Base 也表现出更好的性能。(3) 与 LLaMA-3.1 405B Base 相比,这是最大的开源模型,激活参数是 DeepSeek-V3-Base 的 11 倍,DeepSeek-V3-Base 在多语言、代码和数学基准测试中表现更好。在英语和中文语言基准测试中,DeepSeek-V3-Base 表现出竞争性或更好的性能,尤其是在 BBH、MMLU 系列、DROP、C-Eval、CMMLU 和 CCPM 上表现突出。
由于我们的高效架构和全面的工程优化,DeepSeek-V3 实现了极高的训练效率。在我们的训练框架和基础设施下,训练 DeepSeek-V3 每万亿 token 仅需 180K H800 GPU 小时,这比训练 72B 或 405B 密集模型的成本低得多。
在表 4 中,我们展示了 MTP 策略的消融结果。具体来说,我们在两个不同规模的基线模型上验证了 MTP 策略。在小规模上,我们训练了一个包含 15.7B 总参数的基线 MoE 模型,训练了 1.33T token。在大规模上,我们训练了一个包含 228.7B 总参数的基线 MoE 模型,训练了 540B token。在此基础上,保持训练数据和其他架构不变,我们为它们附加了一个 1 深度的 MTP 模块,并训练了两个使用 MTP 策略的模型进行比较。请注意,在推理期间,我们直接丢弃 MTP 模块,因此对比模型的推理成本完全相同。从表中可以看出,MTP 策略在大多数评估基准上持续提升了模型性能。
表 4:MTP 策略的消融结果。MTP 策略在大多数评估基准上持续提升了模型性能。
在表 5 中,我们展示了无辅助损失负载均衡策略的消融结果。我们在两个不同规模的基线模型上验证了这一策略。在小规模上,我们训练了一个包含 15.7B 总参数的基线 MoE 模型,训练了 1.33T token。在大规模上,我们训练了一个包含 228.7B 总参数的基线 MoE 模型,训练了 578B token。这两个基线模型纯粹使用辅助损失来鼓励负载均衡,并使用 sigmoid 门控函数和 top-K 亲和力归一化。它们的辅助损失强度控制超参数与 DeepSeek-V2-Lite 和 DeepSeek-V2 相同。在这两个基线模型的基础上,保持训练数据和其他架构不变,我们移除了所有辅助损失,并引入了无辅助损失负载均衡策略进行比较。从表中可以看出,无辅助损失策略在大多数评估基准上持续实现了更好的模型性能。
表 5:无辅助损失负载均衡策略的消融结果。与纯辅助损失方法相比,无辅助损失策略在大多数评估基准上持续实现了更好的模型性能。
无辅助损失负载均衡与序列级辅助损失的关键区别在于它们的平衡范围:批量级 vs. 序列级。与序列级辅助损失相比,批量级平衡施加了更灵活的约束,因为它不强制每个序列内的域内平衡。这种灵活性使专家能够更好地专注于不同的领域。为了验证这一点,我们记录并分析了 16B 辅助损失基线模型和 16B 无辅助损失模型在 Pile 测试集中不同领域的专家负载。如图 9 所示,我们观察到无辅助损失模型表现出更大的专家专业化模式,符合预期。
为了进一步研究这种灵活性与模型性能优势之间的相关性,我们还设计并验证了一种批量级辅助损失,它鼓励每个训练批次而不是每个序列的负载均衡。实验结果表明,当实现类似的批量级负载均衡时,批量级辅助损失也可以实现与无辅助损失方法相似的模型性能。具体来说,在我们的 1B MoE 模型实验中,验证损失分别为:2.258(使用序列级辅助损失)、2.253(使用无辅助损失方法)和 2.253(使用批量级辅助损失)。我们在 3B MoE 模型中也观察到了类似的结果:使用序列级辅助损失的模型验证损失为 2.085,而使用无辅助损失方法或批量级辅助损失的模型验证损失均为 2.080。
此外,尽管批量级负载均衡方法表现出持续的性能优势,但它们也面临两个潜在的效率挑战:(1) 某些序列或小批次内的负载不均衡,(2) 推理期间由域转移引起的负载不均衡。第一个挑战通过我们的训练框架自然解决,该框架使用大规模专家并行和数据并行,保证了每个微批次的较大规模。对于第二个挑战,我们还设计并实现了一个具有冗余专家部署的高效推理框架,如第 3.4 节所述,以克服它。
我们精心策划了我们的指令微调数据集,包括 1.5M 个实例,涵盖多个领域,每个领域采用针对其特定需求的数据创建方法。
推理数据:对于推理相关的数据集,包括数学、代码竞赛问题和逻辑谜题,我们通过内部 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-Base 进行了两个 epoch 的微调,使用从 5×10⁻⁶ 开始并逐渐减少到 1×10⁻⁶ 的余弦衰减学习率调度。在训练期间,每个单序列从多个样本中打包。然而,我们采用样本掩码策略以确保这些示例保持隔离且相互不可见。
我们在 RL 过程中使用了基于规则的奖励模型 (RM) 和基于模型的 RM。
基于规则的 RM:对于可以使用特定规则验证的问题,我们采用基于规则的奖励系统来确定反馈。例如,某些数学问题具有确定性结果,我们要求模型在指定格式(例如在框中)提供最终答案,从而允许我们应用规则来验证正确性。类似地,对于 LeetCode 问题,我们可以使用编译器根据测试用例生成反馈。通过尽可能利用基于规则的验证,我们确保了更高的可靠性,因为这种方法不易被操纵或利用。
基于模型的 RM:对于具有自由形式真实答案的问题,我们依赖奖励模型来确定响应是否符合预期的真实答案。相反,对于没有明确真实答案的问题,如创意写作,奖励模型的任务是根据问题和相应答案提供反馈。奖励模型从 DeepSeek-V3 SFT 检查点训练。为了增强其可靠性,我们构建了偏好数据,不仅提供最终奖励,还包括导致奖励的思维链。这种方法有助于减轻特定任务中奖励黑客攻击的风险。
与 DeepSeek-V2(DeepSeek-AI)类似,我们采用了 组相对策略优化 (GRPO)(Shao et al., 2024),它放弃了通常与策略模型大小相同的评论家模型,而是从组分数中估计基线。具体来说,对于每个问题 qq,GRPO 从旧策略模型 πθoldπθold 中采样一组输出 {o1,o2,⋯ ,oG}{o1,o2,⋯,oG},然后通过最大化以下目标来优化策略模型 πθπθ:
(26)
DKL(πθ∣∣πref)=πref(oi∣q)πθ(oi∣q)−logπref(oi∣q)πθ(oi∣q)−1,DKL(πθ∣∣πref)=πθ(oi∣q)πref(oi∣q)−logπθ(oi∣q)πref(oi∣q)−1,(27)
其中 εε 和 ββ 是超参数;πrefπref 是参考模型;AiAi 是优势,从每个组内输出对应的奖励 {r1,r2,…,rG}{r1,r2,…,rG} 中得出:
Ai=ri−mean({r1,r2,⋯ ,rG})std({r1,r2,⋯ ,rG}).Ai=std({r1,r2,⋯,rG})ri−mean({r1,r2,⋯,rG}).(28)
我们在 RL 过程中结合了来自不同领域的提示,如编码、数学、写作、角色扮演和问答。这种方法不仅使模型更符合人类偏好,还提升了在 SFT 数据有限的情况下在基准测试中的表现。
评估基准:除了用于基础模型测试的基准外,我们还在 IFEval(Zhou et al., 2023)、FRAMES(Krishna et al., 2024)、LongBench v2(Bai et al., 2024)、GPQA(Rein et al., 2023)、SimpleQA(OpenAI, 2024c)、C-SimpleQA(He et al., 2024)、SWE-Bench Verified(OpenAI, 2024d)、Aider 1、LiveCodeBench(Jain et al., 2024)(2024 年 8 月至 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 进行。
详细评估配置:对于包括 MMLU、DROP、GPQA 和 SimpleQA 在内的标准基准,我们采用了 simple-evals 框架4 的评估提示。对于 MMLU-Redux,我们在零样本设置中使用了 Zero-Eval 提示格式(Lin, 2024)。对于其他数据集,我们遵循其原始评估协议,使用数据集创建者提供的默认提示。对于代码和数学基准,HumanEval-Mul 数据集包括 8 种主流编程语言(Python、Java、Cpp、C#、JavaScript、TypeScript、PHP 和 Bash)。我们使用 CoT 和非 CoT 方法评估模型在 LiveCodeBench 上的性能,其中数据收集自 2024 年 8 月至 11 月。Codeforces 数据集使用参赛者百分比进行衡量。SWE-Bench verified 使用无代理框架(Xia et al., 2024)进行评估。我们使用“diff”格式评估 Aider 相关基准。对于数学评估,AIME 和 CNMO 2024 以 0.7 的温度进行评估,结果在 16 次运行中取平均值,而 MATH-500 采用贪婪解码。我们允许所有模型为每个基准输出最多 8192 个 token。
表 6 展示了评估结果,表明 DeepSeek-V3 是最佳的开源模型。此外,它与前沿的闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)具有竞争力。
英语基准:MMLU 是一个广泛认可的基准,旨在评估大语言模型在多样化知识领域和任务中的表现。DeepSeek-V3 表现出竞争力,与顶级模型(如 LLaMA-3.1-405B、GPT-4o 和 Claude-Sonnet 3.5)相当,同时显著优于 Qwen2.5 72B。此外,DeepSeek-V3 在 MMLU-Pro(一个更具挑战性的教育知识基准)上表现接近 Claude-Sonnet 3.5。在 MMLU-Redux(MMLU 的改进版本,带有修正标签)上,DeepSeek-V3 超越了其同行。此外,在 GPQA-Diamond(一个博士级评估测试平台)上,DeepSeek-V3 取得了显著成果,仅次于 Claude 3.5 Sonnet,并大幅领先于其他竞争对手。
在长上下文理解基准(如 DROP、LongBench v2 和 FRAMES)中,DeepSeek-V3 继续展示其作为顶级模型的地位。它在 DROP 的 3-shot 设置中取得了 91.6 的 F1 分数,超越了该类别中的所有其他模型。在 FRAMES(一个需要问答超过 100k token 上下文的基准)上,DeepSeek-V3 紧随 GPT-4o,同时大幅领先于其他模型。这展示了 DeepSeek-V3 在处理极长上下文任务中的强大能力。DeepSeek-V3 的长上下文能力进一步通过其在 LongBench v2 上的最佳表现得到了验证,该数据集在 DeepSeek V3 发布前几周发布。在事实性知识基准 SimpleQA 上,DeepSeek-V3 落后于 GPT-4o 和 Claude-Sonnet,主要由于其设计重点和资源分配。DeepSeek-V3 分配了更多训练 token 来学习中文知识,从而在 C-SimpleQA 上表现出色。在指令遵循基准上,DeepSeek-V3 显著优于其前身 DeepSeek-V2 系列,突显了其理解和遵守用户定义格式约束的改进能力。
代码和数学基准:编码是 LLMs 的一项具有挑战性和实用性的任务,涵盖了工程导向的任务(如 SWE-Bench-Verified 和 Aider)以及算法任务(如 HumanEval 和 LiveCodeBench)。在工程任务中,DeepSeek-V3 落后于 Claude-Sonnet-3.5-1022,但显著优于开源模型。开源的 DeepSeek-V3 有望推动编码相关工程任务的进步。通过提供对其强大功能的访问,DeepSeek-V3 可以推动软件工程和算法开发等领域的创新和改进,使开发人员和研究人员能够突破开源模型在编码任务中的界限。在算法任务中,DeepSeek-V3 表现出色,在 HumanEval-Mul 和 LiveCodeBench 等基准上超越了所有基线。这一成功归功于其先进的知识蒸馏技术,有效提升了其在算法导向任务中的代码生成和问题解决能力。
在数学基准上,DeepSeek-V3 表现出色,显著超越了基线,并为非 o1-like 模型设定了新的最先进水平。具体来说,在 AIME、MATH-500 和 CNMO 2024 上,DeepSeek-V3 比第二好的模型 Qwen2.5 72B 绝对分数高出约 10%,这对于如此具有挑战性的基准来说是一个显著的差距。这一显著能力突显了从 DeepSeek-R1 蒸馏技术的有效性,该技术已被证明对非 o1-like 模型非常有益。
中文基准:Qwen 和 DeepSeek 是两个具有强大中英文支持的代表性模型系列。在事实性基准中文 SimpleQA 上,DeepSeek-V3 比 Qwen2.5-72B 高出 16.4 分,尽管 Qwen2.5 在 18T token 上进行了训练,比 DeepSeek-V3 的 14.8T token 多 20%。
在 C-Eval(中文教育知识评估的代表性基准)和 CLUEWSC(中文 Winograd Schema Challenge)上,DeepSeek-V3 和 Qwen2.5-72B 表现出相似的水平,表明这两个模型在具有挑战性的中文语言推理和教育任务上均得到了优化。
评估基准。除了用于基础模型测试的基准外,我们还在以下基准上对指令模型进行了评估:IFEval(Zhou et al., 2023)、FRAMES(Krishna et al., 2024)、LongBench v2(Bai et al., 2024)、GPQA(Rein et al., 2023)、SimpleQA(OpenAI, 2024c)、C-SimpleQA(He et al., 2024)、SWE-Bench Verified(OpenAI, 2024d)、Aider 1、LiveCodeBench(Jain et al., 2024)(2024年8月至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进行。
详细评估配置。对于包括MMLU、DROP、GPQA和SimpleQA在内的标准基准,我们采用了simple-evals框架4中的评估提示。对于MMLU-Redux,我们在零样本设置中使用了Zero-Eval提示格式(Lin, 2024)。对于其他数据集,我们遵循其原始评估协议,并使用数据集创建者提供的默认提示。对于代码和数学基准,HumanEval-Mul数据集包括8种主流编程语言(Python、Java、Cpp、C#、JavaScript、TypeScript、PHP和Bash)。我们使用CoT和非CoT方法评估模型在LiveCodeBench上的表现,数据收集自2024年8月至11月。Codeforces数据集使用参赛者百分比进行衡量。SWE-Bench verified使用无代理框架(Xia et al., 2024)进行评估。我们使用“diff”格式评估Aider相关基准。对于数学评估,AIME和CNMO 2024在温度为0.7的情况下进行评估,结果在16次运行中取平均值,而MATH-500使用贪婪解码。我们允许所有模型在每个基准上最多输出8192个token。
表6展示了评估结果,表明DeepSeek-V3是目前表现最好的开源模型。此外,它与前沿的闭源模型如GPT-4o和Claude-3.5-Sonnet相比也具备竞争力。
英语基准。MMLU是一个广泛认可的基准,旨在评估大语言模型在多样化知识领域和任务中的表现。DeepSeek-V3表现出色,与顶级模型如LLaMA-3.1-405B、GPT-4o和Claude-Sonnet 3.5不相上下,同时显著优于Qwen2.5 72B。此外,DeepSeek-V3在MMLU-Pro(一个更具挑战性的教育知识基准)上表现优异,紧随Claude-Sonnet 3.5之后。在MMLU-Redux(MMLU的改进版本,修正了标签)上,DeepSeek-V3超越了其他模型。在GPQA-Diamond(一个博士级评估测试平台)上,DeepSeek-V3取得了显著的成绩,仅次于Claude 3.5 Sonnet,并大幅领先其他竞争对手。
在长上下文理解基准如DROP、LongBench v2和FRAMES中,DeepSeek-V3继续展示了其作为顶级模型的地位。它在DROP的3-shot设置中取得了令人印象深刻的91.6 F1分数,超越了该类别中的所有其他模型。在FRAMES(一个需要在100k token上下文中进行问答的基准)上,DeepSeek-V3紧随GPT-4o之后,并大幅领先其他模型。这展示了DeepSeek-V3在处理极长上下文任务中的强大能力。DeepSeek-V3的长上下文能力在LongBench v2上的表现进一步得到了验证,该数据集在DeepSeek V3发布前几周才发布。在事实知识基准SimpleQA上,DeepSeek-V3落后于GPT-4o和Claude-Sonnet,主要原因是其设计重点和资源分配。DeepSeek-V3将更多的训练token用于学习中文知识,因此在C-SimpleQA上表现优异。在指令遵循基准上,DeepSeek-V3显著优于其前身DeepSeek-V2系列,展示了其在理解和遵循用户定义格式约束方面的改进能力。
代码和数学基准。编码是LLMs面临的一项具有挑战性和实用性的任务,涵盖了以工程为重点的任务(如SWE-Bench-Verified和Aider)以及算法任务(如HumanEval和LiveCodeBench)。在工程任务中,DeepSeek-V3落后于Claude-Sonnet-3.5-1022,但显著优于开源模型。开源的DeepSeek-V3有望推动编码相关工程任务的进步。通过提供其强大功能的访问权限,DeepSeek-V3可以推动软件工程和算法开发等领域的创新和改进,赋能开发者和研究人员,推动开源模型在编码任务中的边界。在算法任务中,DeepSeek-V3表现出色,在HumanEval-Mul和LiveCodeBench等基准上超越了所有基线。这一成功归功于其先进的知识蒸馏技术,有效增强了其在算法任务中的代码生成和问题解决能力。
在数学基准上,DeepSeek-V3表现出色,显著超越了基线,并为非o1类模型设定了新的最先进水平。具体而言,在AIME、MATH-500和CNMO 2024上,DeepSeek-V3比第二好的模型Qwen2.5 72B高出约10%的绝对分数,这对于如此具有挑战性的基准来说是一个显著的差距。这一显著能力突显了从DeepSeek-R1进行蒸馏技术的有效性,该技术已被证明对非o1类模型非常有益。
中文基准。Qwen和DeepSeek是两个代表性的模型系列,对中文和英文都有强大的支持。在事实基准Chinese SimpleQA上,DeepSeek-V3比Qwen2.5-72B高出16.4分,尽管Qwen2.5是在18T token的更大语料库上训练的,比DeepSeek-V3的14.8T token多20%。
在C-Eval(一个代表性的中文教育知识评估基准)和CLUEWSC(中文Winograd模式挑战)上,DeepSeek-V3和Qwen2.5-72B表现出相似的水平,表明这两个模型在具有挑战性的中文语言推理和教育任务上都进行了优化。
除了标准基准外,我们还使用LLMs作为评判者对开放式生成任务进行了评估,结果如表7所示。具体来说,我们遵循AlpacaEval 2.0(Dubois et al., 2024)和Arena-Hard(Li et al., 2024a)的原始配置,使用GPT-4-Turbo-1106作为评判者进行成对比较。在Arena-Hard上,DeepSeek-V3对基线GPT-4-0314的胜率超过86%,与Claude-Sonnet-3.5-1022等顶级模型不相上下。这突显了DeepSeek-V3在处理复杂提示(包括编码和调试任务)方面的强大能力。此外,DeepSeek-V3实现了开源模型在Arena-Hard基准上首次超过85%的里程碑。这一成就显著缩小了开源模型与闭源模型之间的性能差距,为开源模型在具有挑战性的领域中的表现设定了新标准。
同样,DeepSeek-V3在AlpacaEval 2.0上展示了卓越的表现,超越了闭源和开源模型。这展示了其在写作任务和处理简单问答场景中的出色能力。值得注意的是,它比DeepSeek-V2.5-0905高出20%,突显了其在处理简单任务方面的显著改进,并展示了其进步的有效性。
我们比较了DeepSeek-V3与最先进模型(即GPT-4o和Claude-3.5)的判断能力。表8展示了这些模型在RewardBench(Lambert et al., 2024)中的表现。DeepSeek-V3与最佳版本的GPT-4o-0806和Claude-3.5-Sonnet-1022表现相当,同时超越了其他版本。此外,DeepSeek-V3的判断能力也可以通过投票技术得到增强。因此,我们使用DeepSeek-V3结合投票来提供对开放式问题的自我反馈,从而提高对齐过程的有效性和鲁棒性。
我们基于DeepSeek-V2.5对从DeepSeek-R1进行蒸馏的贡献进行了消融实验。基线模型在短CoT数据上进行训练,而其竞争对手则使用上述专家检查点生成的数据。
表9展示了蒸馏数据的有效性,显示了在LiveCodeBench和MATH-500基准上的显著改进。我们的实验揭示了一个有趣的权衡:蒸馏带来了更好的性能,但也显著增加了平均响应长度。为了在模型准确性和计算效率之间保持平衡,我们仔细选择了DeepSeek-V3在蒸馏中的最佳设置。
我们的研究表明,从推理模型进行知识蒸馏为后训练优化提供了一个有前景的方向。虽然我们目前的工作主要集中在数学和编码领域的数据蒸馏,但这种方法在需要复杂推理的其他认知任务中也显示出潜力。这些特定领域展示的有效性表明,长CoT蒸馏在增强其他领域的模型性能方面可能具有重要价值。进一步探索这种方法在不同领域的应用仍然是未来研究的重要方向。
奖励在强化学习中起着关键作用,指导优化过程。在通过外部工具验证较为直接的领域(如某些编码或数学场景)中,强化学习表现出色。然而,在更一般的场景中,通过硬编码构建反馈机制是不切实际的。在DeepSeek-V3的开发过程中,对于这些更广泛的上下文,我们采用了宪法AI方法(Bai et al., 2022),利用DeepSeek-V3自身的投票评估结果作为反馈来源。这种方法产生了显著的对齐效果,显著提升了DeepSeek-V3在主观评估中的表现。通过整合额外的宪法输入,DeepSeek-V3可以朝着宪法方向优化。我们相信,这种结合补充信息与LLMs作为反馈来源的范式至关重要。LLM作为一个多功能处理器,能够将来自多样化场景的非结构化信息转化为奖励,最终促进LLMs的自我改进。除了自我奖励外,我们还致力于发现其他通用且可扩展的奖励方法,以持续提升模型在一般场景中的能力。
DeepSeek-V3通过MTP技术预测接下来的2个token,而不是仅预测下一个token。结合推测解码框架(Leviathan et al., 2023; Xia et al., 2023),它可以显著加速模型的解码速度。一个自然的问题是,额外预测的token的接受率如何。根据我们的评估,第二个token预测的接受率在不同生成主题中保持在85%到90%之间,表现出了一致的可靠性。这种高接受率使DeepSeek-V3能够显著提高解码速度,达到1.8倍的TPS(每秒生成的token数)。
在本文中,我们介绍了DeepSeek-V3,这是一个拥有671B总参数和37B激活参数的大型MoE语言模型,训练了14.8T token。除了MLA和DeepSeekMoE架构外,它还开创了无辅助损失的负载平衡策略,并设定了多token预测训练目标以提升性能。由于支持FP8训练和细致的工程优化,DeepSeek-V3的训练成本效益显著。后训练还成功地从DeepSeek-R1系列模型中蒸馏了推理能力。综合评估表明,DeepSeek-V3已成为目前最强的开源模型,并与领先的闭源模型如GPT-4o和Claude-3.5-Sonnet相媲美。尽管其表现出色,它的训练成本仍然经济高效,包括预训练、上下文长度扩展和后训练在内的完整训练仅需2.788M H800 GPU小时。
尽管我们承认其强大的性能和成本效益,我们也认识到DeepSeek-V3在部署方面存在一些局限性。首先,为了确保高效推理,DeepSeek-V3的推荐部署单元相对较大,这可能对小规模团队构成负担。其次,尽管我们的DeepSeek-V3部署策略已经实现了比DeepSeek-V2快两倍以上的端到端生成速度,但仍存在进一步优化的潜力。幸运的是,随着更先进硬件的发展,这些局限性有望自然得到解决。
DeepSeek始终坚持开源模型的长期主义路线,旨在稳步接近AGI(人工通用智能)的终极目标。未来,我们计划在以下方向进行战略性投资: