专栏名称: 拾柒年蝉
人一生中 | 必须有一样 | 不以此谋生的工作
目录
相关文章推荐
悦读文摘  ·  每天思考一段话 ·  昨天  
十点读书  ·  过年,当心新型“杀年猪”局 ·  3 天前  
新京报书评周刊  ·  我深爱我们一起相处的这些夜晚,胜过一切丨周末读诗 ·  5 天前  
蓝钻故事  ·  9.0还在涨!国产良心巨作,终于藏不住了 ·  3 天前  
51好读  ›  专栏  ›  拾柒年蝉

DeepSeek核心论文全译本:DeepSeek-V3 技术报告

拾柒年蝉  · 公众号  ·  · 2025-02-06 11:46

正文

DeepSeek-V3 技术报告

[email protected]

原文链接:https://arxiv.org/html/2412.19437v1

摘要
我们推出了 DeepSeek-V3,这是一款强大的专家混合(Mixture-of-Experts,MoE)语言模型,总参数量达到 6710 亿,每个令牌激活 370 亿参数。为了实现高效推理和成本效益高的训练,DeepSeek-V3 采用了多头潜在注意力(Multi-head Latent Attention,MLA)和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中已得到充分验证。此外,DeepSeek-V3 在模型负载均衡方面创新性地引入了无需辅助损失(auxiliary-loss-free)策略,并设定了多令牌预测的训练目标,从而提升模型性能。
我们在 14.8 万亿个多样且高质量的令牌上对 DeepSeek-V3 进行了预训练,随后通过监督微调(Supervised Fine-Tuning)和强化学习(Reinforcement Learning)阶段,充分发挥模型的潜力。全面的评估结果表明,DeepSeek-V3 的性能优于其他开源模型,并可媲美顶级的闭源模型。尽管性能卓越,DeepSeek-V3 的完整训练仅需 278.8 万 H800 GPU 小时。此外,其训练过程极为稳定,整个过程中未发生不可恢复的损失峰值,也未进行任何回滚操作。
模型检查点(checkpoints)可在以下网址获取:https://github.com/deepseek-ai/DeepSeek-V3。

图 1:DeepSeek-V3 及其对比模型的基准性能表现
目录
1 引言
2 架构
2.1 基本架构
2.1.1 多头潜在注意力
2.1.2 基于无辅助损失平衡的 DeepSeekMoE
2.2 多令牌预测
3 基础设施
3.1 计算集群
3.2 训练框架
3.2.1 双通道与计算-通信重叠 3.2.2 跨节点全到全通信的高效实现
3.2.3 极限内存节省与最小开销
3.3 FP8 训练
3.3.1 混合精度框架 3.3.2 量化与乘法的精度提升
3.3.3 低精度存储与通信
3.4 推理与部署
3.4.1 预填充
3.4.2 解码
3.5 硬件设计建议
3.5.1 通信硬件
3.5.2 计算硬件
4 预训练
4.1 数据构建
4.2 超参数设置
4.3 长上下文扩展
4.4 评估
4.4.1 评估基准
4.4.2 评估结果
4.5 讨论
4.5.1 多令牌预测的消融研究
4.5.2 无辅助损失平衡策略的消融研究 4.5.3 批量负载平衡与序列负载平衡
5 后训练
5.1 监督微调
5.2 强化学习
5.2.1 奖励模型
5.2.2 群体相对策略优化
5.3 评估 5.3.1 评估设置
5.3.2 标准评估
5.3.3 开放式评估
5.3.4 DeepSeek-V3 作为生成式奖励模型 5.4 讨论
5.4.1 来自 DeepSeek-R1 的蒸馏
5.4.2 自我奖励
5.4.3 多令牌预测评估
6 结论、局限性与未来方向A 贡献与致谢
B 低精度训练的消融研究
B.1 FP8 与 BF16 训练
B.2 关于块状量化的讨论
C 基于辅助损失与无辅助损失模型的专家特化模式
1 引言
近年来,大型语言模型(Large Language Models, LLMs)正在快速迭代与进化(OpenAI, 2024a;Anthropic, 2024;Google, 2024),逐步缩小与通用人工智能(Artificial General Intelligence, AGI)之间的差距。在闭源模型之外,包括 DeepSeek 系列(DeepSeek-AI, 2024b, c;Guo 等, 2024;DeepSeek-AI, 2024a)、LLaMA 系列(Touvron 等, 2023a, b;AI@Meta, 2024a, b)、Qwen 系列(Qwen, 2023, 2024a, 2024b)和 Mistral 系列(Jiang 等, 2023;Mistral, 2024)在内的开源模型也取得了显著进展,努力缩小与闭源模型的差距。为进一步拓展开源模型的能力边界,我们扩展了模型规模,推出了 DeepSeek-V3——一款拥有 6710 亿参数的专家混合(Mixture-of-Experts, MoE)模型,其中每个令牌激活 370 亿参数。
我们始终以长远视角追求卓越的模型性能和经济的成本。因此,在架构设计方面,DeepSeek-V3 继续采用多头潜在注意力(Multi-head Latent Attention, MLA)(DeepSeek-AI, 2024c)以实现高效推理,并采用 DeepSeekMoE(Dai 等, 2024)以实现成本效益高的训练。这两种架构在 DeepSeek-V2(DeepSeek-AI, 2024c)中已得到验证,证明它们能够在实现高效训练与推理的同时,保持模型的稳健性能。
在基础架构之上,我们还实施了两项策略以进一步提升模型能力。首先,DeepSeek-V3 首创了一种无需辅助损失(auxiliary-loss-free)的负载均衡策略(Wang 等, 2024a),旨在最大限度地减少因负载均衡优化而对模型性能造成的不利影响。其次,DeepSeek-V3 采用了多令牌预测的训练目标,我们的评估结果表明,这一目标显著提升了模型在各类基准测试中的整体性能。
为了实现高效训练,我们支持 FP8 混合精度训练,并对训练框架进行了全面优化。低精度训练已成为提升训练效率的潜在解决方案(Kalamkar 等, 2019;Narang 等, 2017;Peng 等, 2023b;Dettmers 等, 2022),其发展与硬件能力的进步密切相关(Micikevicius 等, 2022;Luo 等, 2024;Rouhani 等, 2023a)。在本研究中,我们引入了 FP8 混合精度训练框架,并首次在超大规模模型上验证了其有效性。通过支持 FP8 运算和存储,我们实现了加速训练和降低 GPU 内存使用的双重目标。
在训练框架方面,我们设计了 DualPipe 算法以实现高效的流水线并行,该算法减少了流水线气泡(pipeline bubbles),并通过计算与通信的重叠隐藏了大部分通信过程。这样的重叠机制确保了即使模型进一步扩展,只要保持恒定的计算与通信比率,我们依然可以在跨节点上使用细粒度专家模型,同时实现接近零的全到全(all-to-all)通信开销。此外,我们还开发了高效的跨节点全到全通信内核,以充分利用 InfiniBand(IB)和 NVLink 的带宽。同时,我们对内存占用进行了精细优化,使得在不使用昂贵的张量并行技术的情况下,能够顺利训练 DeepSeek-V3。这些努力结合在一起,使我们达到了高效的训练效果。
在预训练阶段,我们在 14.8 万亿个高质量、多样化的令牌上对 DeepSeek-V3 进行训练。整个预训练过程异常稳定,在训练期间没有出现不可恢复的损失峰值,也无需进行任何回滚操作。接下来,我们对 DeepSeek-V3 进行了两阶段的上下文长度扩展。在第一阶段,将最大上下文长度扩展到 32K;在第二阶段,进一步扩展到 128K。随后,我们对 DeepSeek-V3 的基础模型进行后训练,包括监督微调(Supervised Fine-Tuning, SFT)和强化学习(Reinforcement Learning, RL),以使模型符合人类偏好并进一步释放其潜力。在后训练阶段,我们从 DeepSeek-R1 系列模型中提炼出推理能力,同时谨慎保持模型的准确性与生成长度之间的平衡。
我们在一系列基准测试上对 DeepSeek-V3 进行了全面评估。尽管训练成本经济,但评估结果表明,DeepSeek-V3-Base 成为当前最强大的开源基础模型,特别是在代码和数学领域表现突出。其聊天版本同样优于其他开源模型,在一系列标准和开放式基准测试中表现出色,与顶级闭源模型(包括 GPT-4o 和 Claude-3.5-Sonnet)达到了相当的水平。

表 1:DeepSeek-V3 的训练成本(假设 H800 GPU 的租赁价格为每小时 2 美元)
最后,我们再次强调 DeepSeek-V3 的经济训练成本,如表 1 所示,这得益于我们在算法、框架和硬件的优化协同设计。在预训练阶段,DeepSeek-V3 每处理 1 万亿个令牌仅需 18 万小时的 H800 GPU 运行时间,即在我们由 2048 个 H800 GPU 组成的集群上耗时 3.7 天。因此,预训练阶段在不到两个月内完成,使用了总计 266.4 万 GPU 小时。此外,扩展上下文长度耗费 11.9 万 GPU 小时,后训练阶段耗费 5000 GPU 小时,使得 DeepSeek-V3 的完整训练仅耗费 278.8 万 GPU 小时。假设 H800 GPU 的租赁价格为每小时 2 美元,我们的总训练成本仅为 557.6 万美元。请注意,上述成本仅涵盖 DeepSeek-V3 的正式训练,不包括与架构、算法或数据的先期研究及消融实验相关的成本。
我们的主要贡献包括:
架构:创新的负载均衡策略和训练目标
  • 在 DeepSeek-V2 的高效架构基础上,我们率先提出了一种无需辅助损失的负载均衡策略,有效减少了因负载均衡导致的性能下降。
  • 我们研究了多令牌预测(Multi-Token Prediction, MTP)目标,并证明其对模型性能有益。同时,该目标还可用于推理加速中的预测性解码(speculative decoding)。
预训练:追求极致的训练效率
  • 我们设计了一个 FP8 混合精度训练框架,并首次在超大规模模型上验证了 FP8 训练的可行性与有效性。
  • 通过算法、框架和硬件的协同设计,我们克服了跨节点专家混合(MoE)训练中的通信瓶颈,实现了几乎完全的计算与通信重叠。这显著提高了训练效率,降低了训练成本,使我们能够在不增加额外开销的情况下进一步扩展模型规模。
  • 以仅 266.4 万 H800 GPU 小时的经济成本,我们完成了在 14.8 万亿个令牌上的 DeepSeek-V3 预训练,生成了当前最强大的开源基础模型。预训练后的后续训练阶段仅需 10 万 GPU 小时。
后训练:从 DeepSeek-R1 中提炼知识
  • 我们引入了一种创新方法,将长链式思维(Chain-of-Thought, CoT)模型的推理能力,特别是 DeepSeek R1 系列模型之一的能力,提炼到标准的大语言模型(LLM),特别是 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 和中文 SimpleQA 上展示出卓越的性能,是开源模型中的佼佼者。在英语事实性知识(SimpleQA)测试中,虽然略逊于 GPT-4o 和 Claude-Sonnet-3.5,但在中文事实性知识(中文 SimpleQA)上表现超越了这些模型,凸显了其在中文知识领域的优势。
  • 代码、数学和推理能力
    1. DeepSeek-V3 在数学相关的基准测试中取得了最先进的性能,在所有非长链式思维(long-CoT)模型(包括开源和闭源模型)中表现最佳。特别是在某些测试(如 MATH-500)中,其表现甚至优于 o1-preview,展现了其强大的数学推理能力。
    2. 在代码相关任务中,DeepSeek-V3 在编程竞赛基准测试(如 LiveCodeBench)中成为表现最优的模型,稳固了其在该领域的领先地位。在工程相关任务中,虽然 DeepSeek-V3 的表现略低于 Claude-Sonnet-3.5,但仍显著领先于其他所有模型,展示了其在多种技术基准测试中的竞争力。
    在本文的其余部分中,我们首先详细介绍 DeepSeek-V3 模型的架构(第 2 节)。随后,我们介绍基础设施,包括计算集群、训练框架、FP8 训练支持、推理部署策略以及未来硬件设计的建议。接下来,我们描述预训练过程,涵盖训练数据的构建、超参数设置、长上下文扩展技术、相关评估以及一些讨论(第 4 节)。之后,我们探讨后训练工作,包括监督微调(Supervised Fine-Tuning, SFT)、强化学习(Reinforcement Learning, RL)、相应的评估和讨论(第 5 节)。最后,我们对本研究进行总结,讨论 DeepSeek-V3 现存的局限性,并提出未来研究的潜在方向(第 6 节)。
    2 架构
    我们首先介绍 DeepSeek-V3 的基本架构,其特点是采用多头潜在注意力(Multi-head Latent Attention, MLA)(DeepSeek-AI, 2024c)实现高效推理,并采用 DeepSeekMoE(Dai 等, 2024)以实现经济高效的训练。随后,我们介绍多令牌预测(Multi-Token Prediction, MTP)训练目标,我们的评估结果表明,该目标能够提升模型在基准测试中的整体性能。对于未明确提及的其他细节,DeepSeek-V3 遵循 DeepSeek-V2 的相关设置(DeepSeek-AI, 2024c)。
    图 2:DeepSeek-V3 基本架构示意图
    DeepSeek-V3 继承了 DeepSeek-V2 的架构,采用多头潜在注意力(Multi-head Latent Attention, MLA)和 DeepSeekMoE,以实现高效推理和经济高效的训练。

    2.1 基本架构

    DeepSeek-V3 的基本架构仍基于 Transformer 框架(Vaswani 等, 2017)。为实现高效推理和成本优化的训练,DeepSeek-V3 继续采用多头潜在注意力(MLA)和 DeepSeekMoE,这些技术在 DeepSeek-V2 中已得到充分验证。与 DeepSeek-V2 不同的是,我们引入了一种无需辅助损失(auxiliary-loss-free)的负载均衡策略(Wang 等, 2024a),以缓解为确保负载均衡所导致的性能下降问题。图 2 展示了 DeepSeek-V3 的基本架构,以下内容将简要回顾 MLA 和 DeepSeekMoE 的相关细节。

    2.1.1 多头潜在注意力(Multi-Head Latent Attention, MLA)

    在注意力机制中,DeepSeek-V3 采用 MLA 架构。设:
    • :嵌入维度
    • :注意力头数量
    • :每个头的维度
    • :第 个令牌在某层注意力机制中的输入向量
    MLA 的核心在于对注意力键(Key)和值(Value)进行低秩联合压缩,从而在推理过程中减少键值缓存(KV Cache):
    其中:
    • 是键(Key)和值(Value)的压缩潜在向量;
    • 表示键值压缩维度;
    • 是向下投影矩阵;
    • 分别是键和值的向上投影矩阵;
    • 是用于生成携带旋转位置嵌入(Rotary Positional Embedding, RoPE)(Su 等, 2024)的解耦键的矩阵;
    • 表示应用 RoPE 矩阵的操作;
    • 表示向量拼接。
    需要注意的是,对于 MLA,在生成阶段仅需缓存蓝框标注的向量(即 ),从而在性能与标准多头注意力(Multi-Head Attention, MHA)(Vaswani 等, 2017)相当的情况下,显著减少键值缓存的使用量。
    对于注意力查询(Query),我们同样进行了低秩压缩,这可以在训练期间减少激活内存的占用:
    其中:
    • 是查询(Query)的压缩潜在向量;
    • 表示查询压缩维度;
    • 分别是查询的向下投影矩阵和向上投影矩阵;
    • 是用于生成携带旋转位置嵌入(RoPE)的解耦查询的矩阵。
    最终,查询向量
    键向量
    和值向量 组合在一起,生成最终的注意力输出
    其中 ( W_O \in \mathbb{R}^{d \times d_h n_h} ) 表示输出投影矩阵。

    2.1.2 基于无辅助损失负载均衡的 DeepSeekMoE

    DeepSeekMoE 的基本架构
    在前馈网络(Feed-Forward Networks, FFNs)中,DeepSeek-V3 采用了 DeepSeekMoE 架构(Dai 等, 2024)。与 GShard(Lepikhin 等, 2021)等传统 MoE 架构相比,DeepSeekMoE 使用了更细粒度的专家模型,并将部分专家隔离为共享专家。设 表示第 个令牌的 FFN 输入,FFN 输出 计算如下:
    其中:
    • 分别表示共享专家和路由专家的数量;
    • 分别表示第 个共享专家和第 个路由专家;
    • 表示激活的路由专家数量;
    • 是第 个专家的门控值(gating value);
    • 表示令牌到专家的亲和度(token-to-expert affinity);
    • 是第 个路由专家的中心向量(centroid vector);
    • 表示计算第 个令牌与所有路由专家之间的亲和度得分后,取其中最高的 个得分所组成的集合。
    与 DeepSeek-V2 略有不同,DeepSeek-V3 使用 sigmoid 函数计算亲和度得分,并对所有选定的亲和度得分进行归一化处理以生成门控值。
    无需辅助损失的负载均衡
    对于 MoE 模型,不平衡的专家负载会导致路由崩溃(routing collapse)(Shazeer 等, 2017),并在专家并行场景中降低计算效率。传统解决方案通常依赖辅助损失(Fedus 等, 2021;Lepikhin 等, 2021)来避免负载不平衡。然而,过大的辅助损失会损害模型性能(Wang 等, 2024a)。为了在负载平衡和模型性能之间实现更好的权衡,我们首创了一种无需辅助损失的负载均衡策略(Wang 等, 2024a),以确保负载平衡。
    具体而言,我们为每个专家引入一个偏置项 ,并将其添加到对应的亲和度得分 ,以确定 Top-K 路由:
    需要注意的是,偏置项仅用于路由过程。用于与 FFN 输出相乘的门控值(gating value)仍然来源于原始的亲和度得分 。在训练期间,我们持续监控每一步训练中的整个批次的专家负载情况。在每一步结束时,如果某个专家负载过高,将减少其对应的偏置项 ;如果负载过低,则增加 。其中, 是一个称为偏置更新速度(bias update speed)的超参数。通过这种动态调整,DeepSeek-V3 在训练过程中保持了专家负载的平衡,并在性能上优于通过纯辅助损失来实现负载平衡的模型。
    补充的序列级辅助损失
    虽然 DeepSeek-V3 主要依靠无需辅助损失的策略来实现负载平衡,但为了防止在单个序列内出现极端不平衡情况,我们也引入了一种补充的序列级平衡损失:
    其中,平衡因子 是一个超参数,对于 DeepSeek-V3 被设置为极小的值;  表示指示函数; 表示序列中的令牌数量。序列级平衡损失鼓励在每个序列内实现专家负载的平衡。

    节点限制路由(Node-Limited Routing)

    与 DeepSeek-V2 使用的设备限制路由类似,DeepSeek-V3 也采用了一种受限路由机制,以在训练过程中限制通信成本。简单来说,我们确保每个令牌最多只会被发送到 个节点,这些节点根据分布在各节点上的专家的最高 个亲和度得分之和进行选择。在这一约束下,我们的 MoE 训练框架几乎能够实现完全的计算-通信重叠。

    无令牌丢弃(No Token-Dropping)

    由于采用了有效的负载均衡策略,DeepSeek-V3 在整个训练过程中始终保持良好的负载平衡。因此,DeepSeek-V3 在训练过程中不丢弃任何令牌。此外,我们还实施了特定的部署策略以确保推理过程中的负载平衡,因此在推理阶段 DeepSeek-V3 也不会丢弃任何令牌。
    图 3:我们多令牌预测(Multi-Token Prediction, MTP)实现的示意图。我们在每一层深度中保持对每个令牌的完整因果链预测。

    2.2 多令牌预测(Multi-Token Prediction, MTP)

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

    MTP 模块

    具体而言,我们的 MTP 实现使用 个顺序模块来预测 个附加令牌。第 个 MTP 模块由以下组件组成:
    • 一个共享嵌入层
    • 一个共享输出头
    • 一个 Transformer 块
    • 一个投影矩阵
    对于第 个输入令牌 ,在第 级预测深度中,我们首先将第 级深度下第 个令牌的表示
    与第 个令牌的嵌入 结合,通过线性投影进行处理:
    (公式 21)
    其中 表示向量拼接操作。特别地,当 时, 指的是由主模型生成的表示。注意,每个 MTP 模块的嵌入层与主模型共享。组合后的 作为第 层深度的 Transformer 块输入,以生成当前深度的输出表示
    (公式 22)
    其中 表示输入序列长度, 表示切片操作(包含左右边界)。 最终,以 作为输入,
    输出头计算第 个附加预测令牌的概率分布 ,其中 为词汇表大小:
    (公式 23)
    输出头 将表示线性映射到 logits,并随后应用 函数来计算第 个附加令牌的预测概率。此外,每个 MTP 模块的输出头也与主模型共享。我们保持预测因果链的原则与 EAGLE(Li 等, 2024b)类似,但其主要目的是用于预测性解码(Xia 等, 2023;Leviathan 等, 2023),而我们利用 MTP 以提升训练效果。

    MTP 训练目标

    对于每个预测深度 ,我们计算交叉熵损失
    (公式 24)
    其中 表示输入序列长度, 为第 个位置的真实令牌, 为第 个 MTP 模块生成的 的预测概率。
    最终,我们对所有深度的 MTP 损失取平均值,并乘以权重因子 ,得到整体 MTP 损失 ,该损失作为 DeepSeek-V3 的附加训练目标:
    (公式 25)

    MTP 在推理中的应用

    我们的 MTP 策略主要用于提升主模型性能,因此在推理时可以直接丢弃 MTP 模块,主模型仍可独立正常运行。此外,我们还可以将这些 MTP 模块用于预测性解码,从而进一步降低生成延迟。

    3 基础设施

    3.1 计算集群

    DeepSeek-V3 在配备 2048 个 NVIDIA H800 GPU 的集群上进行训练。H800 集群中的每个节点包含 8 个通过 NVLink 和 NVSwitch 互联的 GPU。不同节点之间通过 InfiniBand (IB) 互连,以支持高效通信。

    3.2 训练框架

    DeepSeek-V3 的训练由 HAI-LLM 框架提供支持,这是一款由我们工程团队从零打造的高效轻量级训练框架。整体上,DeepSeek-V3 采用以下并行策略:
    • 16 路流水线并行(Pipeline Parallelism, PP)(Qi 等, 2023a),
    • 64 路专家并行(Expert Parallelism, EP)(Lepikhin 等, 2021),跨 8 个节点,
    • ZeRO-1 数据并行(Data Parallelism, DP)(Rajbhandari 等, 2020)。
    为了促进 DeepSeek-V3 的高效训练,我们实施了多项工程优化:
    1. DualPipe 算法:用于高效流水线并行。与现有的 PP 方法相比,DualPipe 具有更少的流水线气泡(pipeline bubbles)。更重要的是,该算法在前向和反向过程中重叠了计算与通信阶段,从而缓解了跨节点专家并行所带来的通信开销。
    2. 高效的跨节点全到全(all-to-all)通信内核:充分利用 IB 和 NVLink 带宽,同时优化用于通信的 GPU 流式多处理器(SM)资源。
    3. 内存占用优化:通过精细化的内存管理,我们实现了无需使用昂贵的张量并行(Tensor Parallelism, TP)即可完成 DeepSeek-V3 的训练。

    3.2.1 DualPipe 和计算-通信重叠

    图 4:单个前向和反向块对的重叠策略(Transformer 块的边界未对齐)。
    • 橙色:前向计算
    • 绿色:输入的反向计算
    • 蓝色:权重的反向计算
    • 紫色:流水线通信
    • 红色:同步屏障(barriers)
    全到全通信和流水线通信均可在执行过程中完全隐藏。
    对于 DeepSeek-V3,跨节点专家并行引入的通信开销使得计算与通信的比率约为 1:1,这导致了效率不高的问题。为了解决这一挑战,我们设计了一种创新的流水线并行算法 DualPipe。该算法通过在前向和反向计算-通信阶段之间实现有效重叠,不仅加速了模型训练,还减少了流水线气泡。
    DualPipe 的核心思想是将单个前向和反向块中的计算与通信重叠。具体而言,我们将每个块分为四个组件:注意力(Attention)、全到全分发(all-to-all dispatch)、多层感知机(MLP)和全到全合并(all-to-all combine)。特别是在反向块中,注意力和 MLP 被进一步分解为两部分:输入的反向计算和权重的反向计算,这类似于 ZeroBubble(Qi 等, 2023b)的方法。此外,我们还设计了一个流水线通信组件。
    如图 4 所示,对于一对前向和反向块,我们重新排列这些组件,并手动调整用于通信和计算的 GPU SM 资源比例。在这种重叠策略下,可以确保全到全通信和流水线通信在执行过程中完全隐藏。得益于这一高效重叠策略,DualPipe 的完整调度如图 5 所示。该调度采用双向流水线策略,从流水线的两端同时输入微批次(micro-batches),使得大部分通信可以完全重叠。这种重叠还确保,即使模型进一步扩展,只要保持恒定的计算与通信比率,我们依然可以在跨节点中使用细粒度专家,同时实现接近零的全到全通信开销。

    DualPipe:应对通信开销的创新流水线并行算法

    对于 DeepSeek-V3,跨节点专家并行引入的通信开销使得计算与通信的比率约为 1:1,导致计算效率低下。为了解决这一挑战,我们设计了一种名为 DualPipe 的创新流水线并行算法。该算法通过在前向和反向计算-通信阶段之间实现有效重叠,不仅加速了模型训练,还显著减少了流水线气泡(pipeline bubbles)。

    DualPipe 的核心思想

    DualPipe 的关键在于在每对前向和反向块中重叠计算和通信过程。具体而言,我们将每个块分为四个组件:
    • 注意力(Attention),
    • 全到全分发(all-to-all dispatch),
    • 多层感知机(MLP)
    • 全到全合并(all-to-all combine)。
    特别地,在反向块中,注意力和 MLP 被进一步分为两个部分:输入的反向计算(backward for input)和权重的反向计算(backward for weights),类似于 ZeroBubble(Qi 等, 2023b)。此外,还包括一个流水线通信(PP communication)组件。
    如图 4 所示,对于一对前向和反向块,我们重新排列这些组件,并手动调整用于通信和计算的 GPU 流式多处理器(SM)资源比例。在这种重叠策略下,全到全通信和流水线通信在执行过程中可以完全隐藏。基于这一高效重叠策略,图 5 展示了 DualPipe 的完整调度过程。该调度采用双向流水线策略,从流水线的两端同时输入微批次(micro-batches),使得大部分通信可以完全重叠。这种重叠还确保,即使模型进一步扩展,只要保持恒定的计算与通信比率,我们依然可以在跨节点中使用细粒度专家,同时实现接近零的全到全通信开销。

    图 5:DualPipe 调度示例 该图展示了在 8 个流水线(PP)阶段和 20 个双向微批次下的 DualPipe 调度示例。图中逆向微批次与正向微批次呈对称结构,为简化说明,我们省略了逆向微批次的编号。共享黑色边框的两个单元格表示互相重叠的计算和通信过程。

    DualPipe 的性能优势

    即使在没有重通信开销的常规场景中,DualPipe 仍然表现出效率优势。表 2 对比了不同流水线并行方法中的流水线气泡和内存使用情况。与 ZB1P(Qi 等, 2023b)和 1F1B(Harlap 等, 2018)方法相比,DualPipe 显著减少了流水线气泡,同时峰值激活内存仅增加了 1×PP 倍。
    虽然 DualPipe 需要保留模型参数的两个副本,但由于我们在训练期间使用了较大的专家并行(EP)规模,因此这并不会显著增加内存消耗。与 Chimera(Li 和 Hoefler, 2021)相比,DualPipe 只要求流水线阶段和微批次的数量可被 2 整除,而不需要微批次数量能被流水线阶段整除。此外,对于 DualPipe,无论微批次数量如何增加,流水线气泡和激活内存都不会增加。

    表 2:不同流水线并行方法的流水线气泡与内存使用对比

    注释
    • ( F ):前向块的执行时间
    • ( B ):完整反向块的执行时间
    • ( W ):"权重反向计算"块的执行时间
    • ( F & B ):前向和反向块的重叠执行时间

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

    为了确保 DualPipe 具有足够的计算性能,我们为跨节点全到全通信(包括分发和合并)定制了高效的通信内核,旨在节约用于通信的流式多处理器(SM)资源。该内核的实现与 MoE 的门控算法及集群的网络拓扑协同设计。在我们的集群中,跨节点 GPU 通过 InfiniBand (IB) 完全互连,节点内的通信通过 NVLink 处理。NVLink 提供 160 GB/s 的带宽,约为 IB(50 GB/s)带宽的 3.2 倍。
    为有效利用 IB 和 NVLink 的不同带宽,我们限制每个令牌最多被分发到 4 个节点,从而减少 IB 的通信流量。每当某个令牌的路由决策确定后,它将首先通过 IB 传输到目标节点上具有相同节点内索引的 GPU。一旦到达目标节点,我们尽力确保令牌能立即通过 NVLink 转发到其目标专家所在的 GPU,而不会因后续令牌的到达而阻塞。通过这种方式,IB 和 NVLink 通信完全重叠,每个令牌可以在每个节点上高效选择平均 3.2 个专家,而不会因 NVLink 产生额外开销。这意味着,尽管 DeepSeek-V3 实际上只选择了 8 个路由专家,但可以在保持相同通信成本的情况下将专家数量扩展到最多 13 个(4 个节点 × 3.2 个专家/节点)。在这种通信策略下,仅 20 个 SM 即可充分利用 IB 和 NVLink 的带宽。
    我们具体采用了 warp 专业化技术(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(并行线程执行)指令,并自动调整通信块大小,从而显著减少对 L2 缓存的使用及对其他 SM 的干扰。

    3.2.3 极限内存节省与最小开销

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

    RMSNorm 和 MLA 向上投影的重计算

    在反向传播过程中,我们重新计算所有 RMSNorm 操作和 MLA 向上投影,从而无需持久存储这些操作的输出激活值。尽管有少量额外开销,但该策略显著降低了存储激活值所需的内存需求。

    CPU 中的指数移动平均(EMA)

    在训练过程中,我们保留模型参数的指数移动平均(EMA),以便在学习率衰减后对模型性能进行早期估计。EMA 参数存储在 CPU 内存中,并在每个训练步骤后异步更新。该方法使我们能够在不增加额外内存或时间开销的情况下维护 EMA 参数。

    多令牌预测的共享嵌入和输出头

    在 DualPipe 策略下,我们将模型最浅层(包括嵌入层)和最深层(包括输出头)部署在同一流水线(PP)阶段。这种安排使多令牌预测(MTP)模块与主模型能够在共享嵌入和输出头的参数与梯度之间实现物理共享。此物理共享机制进一步提升了我们的内存效率。

    3.3 FP8 训练

    图 6:带有 FP8 数据格式的混合精度框架示意图。为清晰起见,仅展示了线性算子(Linear Operator)。
    受近期低精度训练研究(Peng 等, 2023b;Dettmers 等, 2022;Noune 等, 2022)的启发,我们提出了一种基于 FP8 数据格式的细粒度混合精度框架,用于 DeepSeek-V3 的训练。尽管低精度训练具有巨大潜力,但在激活值、权重和梯度中存在的异常值(outliers)限制了其应用(Sun 等, 2024;He 等;Fishman 等, 2024)。虽然推理量化方面已经取得了显著进展(Xiao 等, 2023;Frantar 等, 2022),但在大规模语言模型预训练中成功应用低精度技术的研究相对较少(Fishman 等, 2024)。
    为解决这一问题并有效扩展 FP8 格式的动态范围,我们引入了一种细粒度量化策略:行块分组(tile-wise grouping)(每组包含 ( 1 \times N_c ) 个元素)或 块分组(block-wise grouping)(每组包含 ( N_c \times N_c ) 个元素)。在我们优化的高精度累加过程中,与量化相关的去量化开销得到了显著降低,这对于实现准确的 FP8 通用矩阵乘法(General Matrix Multiplication, GEMM)至关重要。此外,为了进一步减少 MoE 训练中的内存和通信开销,我们在 FP8 格式下缓存和分发激活值,同时使用 BF16 格式存储低精度优化器状态。
    我们在两个与 DeepSeek-V2-Lite 和 DeepSeek-V2 规模相近的模型上验证了所提出的 FP8 混合精度框架,在约 1 万亿个令牌上进行了训练(详见附录 B.1)。值得注意的是,与 BF16 基线相比,FP8 模型的相对损失误差始终低于 0.25%,这一水平在训练随机性可接受范围内。

    3.3.1 混合精度框架

    基于低精度训练中广泛采用的技术(Kalamkar 等, 2019;Narang 等, 2017),我们提出了一种 FP8 训练的混合精度框架。在该框架中,大多数计算密集型操作以 FP8 进行,而一些关键操作则保持原始数据格式,以平衡训练效率和数值稳定性。整体框架如图 6 所示。
    首先,为加速模型训练,大部分核心计算内核(如 GEMM 操作)在 FP8 精度下实现。这些 GEMM 操作接受 FP8 张量作为输入,并生成 BF16 或 FP32 输出。如图 6 所示,与线性算子(Linear Operator)相关的三种 GEMM 操作——前向传播(Fprop)、激活值反向传播(Dgrad)和权重反向传播(Wgrad)——均在 FP8 精度下执行。该设计在理论上使计算速度比原始 BF16 方法提高一倍。此外,FP8 格式的 Wgrad GEMM 允许激活值以 FP8 格式存储,以供反向传播使用,从而显著降低内存消耗。
    尽管 FP8 格式在效率上具有优势,但某些算子由于对低精度计算的敏感性,仍然需要更高的精度。此外,一些低成本的算子在使用更高精度时对整体训练成本的影响可以忽略不计。因此,在经过仔细研究后,我们为以下组件保留了原始精度(例如 BF16 或 FP32):
    • 嵌入模块、
    • 输出头、
    • MoE 门控模块、
    • 归一化算子、
    • 注意力算子。
    这些针对性地保留高精度的策略确保了 DeepSeek-V3 的稳定训练过程。
    为进一步保证数值稳定性,我们将主权重、权重梯度和优化器状态存储在高精度格式中。尽管这些高精度组件会带来一定的内存开销,但通过在分布式训练系统中跨多个数据并行(DP)等级高效分片管理,可以将其影响降到最低。

    3.3.2 从量化和乘法中提高精度

    基于我们的混合精度 FP8 框架,我们引入了多种策略以提升低精度训练的准确性,重点关注量化方法和矩阵乘法(GEMM)过程。

    细粒度量化

    在低精度训练框架中,由于 FP8 格式的指数位数较少,动态范围有限,溢出(overflow)和下溢(underflow)是常见挑战。通常的做法是通过缩放输入张量的最大绝对值,使其与 FP8 可表示范围对齐(Narang 等, 2017)。然而,这种方法对激活值中的异常值(outliers)高度敏感,可能严重降低量化精度。
    为解决此问题,我们提出了一种细粒度量化方法,在更小的粒度上应用缩放。
    如图 7(a) 所示:
    1. 对于激活值,我们在每个 1×128 的 tile(即每个令牌的 128 个通道)上分组并进行缩放;
    2. 对于权重,我们在每个 128×128 的 block(即 128 个输入通道和 128 个输出通道)上分组并进行缩放。
    这种方法通过针对较小元素组自适应调整缩放因子,更好地容纳异常值。在附录 B.2 中,我们进一步讨论了在激活值量化中以块为单位分组和缩放所导致的训练不稳定性。
    我们方法中的一个关键改进是:在 GEMM 操作的内维度上引入每组的缩放因子。虽然标准 FP8 GEMM 不直接支持这一功能,但结合我们精确的 FP32 累加策略,该功能可以高效实现。
    值得注意的是,我们的细粒度量化策略与微缩放(microscaling)格式的思想高度一致(Rouhani 等, 2023b)。NVIDIA 下一代 GPU(Blackwell 系列)已宣布支持具有更小量化粒度的微缩放格式(NVIDIA, 2024a)。我们希望我们的设计能为未来与最新 GPU 架构同步发展的工作提供参考。

    提高累加精度

    低精度 GEMM 操作通常受到下溢问题的困扰,其精度在很大程度上依赖于高精度累加,通常以 FP32 精度进行(Kalamkar 等, 2019;Narang 等, 2017)。然而,我们观察到,NVIDIA H800 GPU 上 FP8 GEMM 的累加精度仅保留约 14 位,显著低于 FP32 累加精度。这一问题在内维度 ( K ) 较大时更为突出,例如在大规模模型训练中常见的场景(批量大小和模型宽度增加)。在初步测试中,当 ( K = 4096 ) 时,Tensor Cores 中有限的累加精度导致最大相对误差接近 2%。尽管如此,有限累加精度仍然是一些 FP8 框架的默认选项(NVIDIA, 2024b),严重限制了训练的准确性。
    为解决此问题,我们采用了提升到 CUDA 核心(CUDA Cores)进行高精度计算的策略(Thakkar 等, 2023),如图 7(b) 所示。具体来说,在 Tensor Cores 执行矩阵乘加(MMA)过程中,中间结果以有限的位宽累加。当达到间隔 ( N_C ) 时,这些部分结果会复制到 CUDA 核心上的 FP32 寄存器中,在那里进行全精度 FP32 累加。正如前面提到的,我们的细粒度量化策略在内维度 ( K ) 上应用了每组缩放因子。这些缩放因子可以在 CUDA 核心上高效地作为去量化过程的一部分进行计算,额外的计算成本极小。
    需要强调的是,此修改降低了单个 warpgroup 的矩阵乘加(WGMMA)指令发布率。但在 H800 架构中,两个 WGMMA 通常可以并发执行:当一个 warpgroup 进行提升操作时,另一个 warpgroup 可以继续执行 MMA 操作。这种设计使得两个操作可以重叠执行,从而保持 Tensor Cores 的高利用率。实验表明,将 ( N_C ) 设为 128 个元素(相当于 4 次 WGMMA 操作)是一个能够显著提高精度且不引入大量开销的最小累加间隔。

    有效利用尾数和指数(Mantissa over Exponents)

    与采用混合 FP8 格式的先前工作不同(NVIDIA, 2024b;Peng 等, 2023b;Sun 等, 2019b),这些方法在前向传播(Fprop)中使用 E4M3(4 位指数,3 位尾数),在反向传播(Dgrad 和 Wgrad)中使用 E5M2(5 位指数,2 位尾数)。我们在所有张量上采用 E4M3 格式以获得更高的精度。这得益于我们的细粒度量化策略(即 tile 和 block 级缩放),通过在较小的元素组上操作,我们有效地在这些分组元素之间共享指数位,缓解了有限动态范围的影响。

    在线量化(Online Quantization)

    在张量级量化框架中(NVIDIA, 2024b;Peng 等, 2023b),通常使用延迟量化方法,该方法维护前几次迭代中的最大绝对值历史以推断当前值。为确保准确的缩放并简化框架,我们对每个 1×128 激活 tile 或 128×128 权重块在线计算最大绝对值。基于此值,我们推导出缩放因子,并将激活值或权重在线量化为 FP8 格式。

    3.3.3 低精度存储与通信

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

    低精度优化器状态

    我们使用 BF16 数据格式而非 FP32 来跟踪 AdamW 优化器(Loshchilov 和 Hutter, 2017)中的一阶和二阶动量,这并不会导致显著的性能下降。然而,为了确保数值稳定性,优化器存储的主权重(master weights)和用于累加批次大小的梯度仍然保留在 FP32 格式中。

    低精度激活值

    如图 6 所示,权重反向传播(Wgrad)操作在 FP8 精度下执行。为减少内存消耗,我们选择以 FP8 格式缓存线性算子(Linear Operator)在反向传播过程中的激活值。然而,对于某些算子,我们采取了特别考虑以兼顾低成本和高精度训练:
    1. 注意力算子后的线性算子输入:这些激活值在注意力算子的反向传播中也会被使用,因此对精度较为敏感。我们为这些激活值定制了一种 E5M6 数据格式。此外,这些激活值在反向传播中会从 1×128 的量化 tile 转换为 128×1 的 tile。为避免引入额外的量化误差,所有缩放因子均使用 2 的整数次幂进行舍入缩放。
    2. MoE 中 SwiGLU 算子的输入:为了进一步降低内存成本,我们缓存 SwiGLU 算子的输入并在反向传播中重新计算其输出。这些激活值也使用我们细粒度量化方法存储,以在内存效率和计算准确性之间取得平衡。

    低精度通信

    通信带宽是 MoE 模型训练中的关键瓶颈。为缓解这一问题,我们在 MoE 向上投影(up-projection)之前将激活值量化为 FP8,并应用分发组件(dispatch components),这与 MoE 向上投影的 FP8 前向传播兼容。类似于注意力算子后的线性算子输入,这些激活值的缩放因子也是 2 的整数次幂。对于 MoE 向下投影(down-projection)前的激活梯度,我们也采取了类似策略。在 MoE 的前向和反向合并(combine)组件中,我们保留 BF16 精度以确保关键部分的训练精度。

    3.4 推理与部署

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

    3.4.1 预填充(Prefilling)

    预填充阶段的最小部署单元由 4 个节点(共 32 个 GPU)组成。
    • 注意力部分:采用 4 路张量并行(Tensor Parallelism, TP4)和序列并行(Sequence Parallelism, SP),结合 8 路数据并行(Data Parallelism, DP8)。小规模 TP(4 路)限制了 TP 通信的开销。
    • MoE 部分:采用 32 路专家并行(Expert Parallelism, EP32),确保每个专家处理足够大的批次,从而提高计算效率。MoE 的全到全(all-to-all)通信采用与训练相同的方法:令牌先通过 IB 跨节点传输,然后在节点内通过 NVLink 转发。
    为实现 MoE 部分不同专家之间的负载平衡,我们引入了冗余专家(redundant experts)的部署策略,对高负载专家进行复制并冗余部署。这些高负载专家根据在线部署期间收集的统计数据检测,并定期调整(例如每 10 分钟一次)。在确定冗余专家集合后,我们根据观察到的负载在节点内重新排列专家,尽量在不增加跨节点通信开销的情况下平衡 GPU 负载。预填充阶段中,我们为每个 GPU 部署 32 个冗余专家,除原有的 8 个专家外,每个 GPU 还会部署一个额外的冗余专家。
    此外,为提高吞吐量并隐藏全到全和 TP 通信的开销,我们同时处理两批计算负载相似的微批次(micro-batches),将一个微批次的注意力和 MoE 与另一个微批次的分发和合并过程重叠。
    我们还在探索专家的动态冗余策略,每个 GPU 可容纳更多专家(例如 16 个),但每次推理仅激活其中 9 个。在每层的全到全操作开始之前,我们实时计算全局最优路由方案。鉴于预填充阶段计算量较大,计算该路由方案的开销几乎可以忽略不计。

    3.4.2 解码(Decoding)

    在解码阶段,我们将共享专家视为路由专家。每个令牌在路由时将选择 9 个专家,其中共享专家视为始终被选择的高负载专家。解码阶段的最小部署单元由 40 个节点(共 320 个 GPU)组成。
    • 注意力部分:采用 TP4 和 SP,结合 80 路数据并行(DP80)。
    • MoE 部分:采用 EP320,并在每个 GPU 上仅托管一个专家。此外,64 个 GPU 负责托管冗余专家和共享专家。分发和合并组件的全到全通信通过 IB 的点对点传输实现,以降低延迟。我们还利用 NVIDIA 的 IBGDA 技术(NVIDIA, 2022)进一步减少延迟并提高通信效率。
    与预填充阶段类似,我们基于在线服务中的专家负载统计数据,定期确定冗余专家集合。然而,由于每个 GPU 仅托管一个专家,因此无需重新排列专家。我们也在探索解码的动态冗余策略,这需要对全局最优路由方案的算法进行更精细的优化,并与分发内核融合以减少开销。
    为提高吞吐量并隐藏全到全通信开销,我们还在解码阶段同时处理两批计算负载相似的微批次。与预填充不同的是,注意力操作在解码阶段占用更多时间。因此,我们将一个微批次的注意力操作与另一个微批次的分发 + MoE + 合并过程重叠。在解码阶段,每个专家的批量大小较小(通常在 256 个令牌以内),瓶颈在于内存访问而非计算。由于 MoE 部分仅需加载一个专家的参数,因此内存访问开销很小,使用较少的 SM 资源不会显著影响整体性能。因此,为避免影响注意力部分的计算速度,我们仅分配少量 SM 资源给分发 + MoE + 合并操作。

    3.5 硬件设计建议

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

    3.5.1 通信硬件

    在 DeepSeek-V3 中,我们通过重叠计算与通信来隐藏通信延迟,从而显著降低了对通信带宽的依赖。然而,当前的通信实现依赖于昂贵的流式多处理器(SM),例如在 H800 GPU 中,我们为通信分配了 132 个可用 SM 中的 20 个,这限制了计算吞吐量。此外,使用 SM 进行通信会导致效率低下,因为 Tensor Cores 在此期间处于闲置状态。
    目前,SM 主要负责以下全到全通信任务:
    • 在 IB(InfiniBand)与 NVLink 域之间转发数据,并在节点内从一个 GPU 聚合多 GPU 的 IB 流量。
    • 在 RDMA 缓冲区(注册的 GPU 内存区域)与输入/输出缓冲区之间传输数据。
    • 执行全到全合并操作中的归约(reduce)。
    • 在 IB 和 NVLink 域中将分块数据传输到多个专家时管理细粒度内存布局。
    我们希望未来的供应商能开发出专门卸载这些通信任务的硬件,将其从宝贵的计算单元(SM)中分离,作为 GPU 协处理器或网络协处理器(类似于 NVIDIA SHARP,Graham 等, 2016)。此外,为了减少编程复杂度,我们建议该硬件从计算单元的角度统一 IB(横向扩展)和 NVLink(纵向扩展)网络。通过这一统一接口,计算单元可以通过基于简单原语的通信请求,轻松完成跨整个 IB-NVLink 统一域的读、写、多播(multicast)和归约(reduce)操作。

    3.5.2 计算硬件

    提高 Tensor Cores 中 FP8 GEMM 的累加精度
    在 NVIDIA Hopper 架构的 Tensor Core 实现中,FP8 GEMM(通用矩阵乘法)采用定点累加方式,即在累加之前根据最大指数右移对尾数对齐。我们的实验表明,该方法仅保留每个尾数乘积右移后最高的 14 位,多余位会被截断。然而,要在 32 次 FP8 乘法累加中获得精确的 FP32 结果,至少需要 34 位的精度。因此,我们建议未来的芯片设计增加 Tensor Cores 的累加精度,以支持全精度累加,或者根据训练和推理算法的精度要求选择适当的累加位宽。这一方法可以确保误差在可接受范围内,同时保持计算效率。
    支持 tile 和 block 级量化
    当前的 GPU 仅支持每张量(per-tensor)量化,缺乏对细粒度量化(如 tile 和 block 级量化)的原生支持。在现有实现中,当达到 ( N_C ) 间隔时,部分结果会从 Tensor Cores 复制到 CUDA Cores,乘以缩放因子,并在 CUDA Cores 上的 FP32 寄存器中累加。尽管结合我们精确的 FP32 累加策略,这种去量化开销已被显著缓解,但 Tensor Cores 和 CUDA Cores 之间的频繁数据移动仍然限制了计算效率。因此,我们建议未来的芯片设计支持细粒度量化,使 Tensor Cores 能够接收缩放因子并实现带有分组缩放的 MMA 操作。通过这种方式,部分和(partial sum)累加与去量化可以直接在 Tensor Cores 内完成,直到生成最终结果,从而避免频繁的数据移动。
    支持在线量化(Online Quantization)
    当前的实现难以有效支持在线量化,尽管我们的研究已证明其效果。在现有流程中,我们需要从高带宽内存(HBM)读取 128 个 BF16 激活值(上一步计算的输出)进行量化,量化后的 FP8 值被写回 HBM,然后在 MMA 过程中再次读取。为解决这一效率问题,我们建议未来芯片将 FP8 转换与 TMA(Tensor Memory Accelerator)访问集成为单个融合操作,使激活值在从全局内存传输到共享内存的过程中完成量化,从而避免频繁的内存读写。此外,我们建议支持 warp 级转换指令以加速操作,这将进一步促进层归一化(layer normalization)与 FP8 转换的融合。另一种选择是采用近内存计算(near-memory computing)方法,在 HBM 附近放置计算逻辑。在这种情况下,BF16 元素在从 HBM 读取到 GPU 时直接转换为 FP8,从而减少约 50% 的芯片外内存访问。
    支持转置 GEMM 操作
    当前的架构在将矩阵转置操作与 GEMM 操作融合方面效率较低。在我们的工作流中,前向传播中的激活值被量化为 1×128 的 FP8 tile 并存储。在反向传播中,矩阵需要被读取、去量化、转置、重新量化为 128×1 的 tile,并存储在 HBM 中。为了减少内存操作,我们建议未来芯片在 MMA 操作之前直接从共享内存中读取转置矩阵,从而优化训练和推理所需的精度。结合 FP8 格式转换与 TMA 访问的融合,这一增强将显著简化量化工作流。

    4 预训练


    4.1 数据构建

    与 DeepSeek-V2 相比,我们优化了预训练语料库,通过增加数学和编程样本的比例,同时扩展了超越英语和中文的多语言覆盖范围。此外,我们精炼了数据处理管道,以在保持语料库多样性的同时最大程度地减少冗余。受 Ding 等(2024)的启发,我们在数据完整性方面实现了文档打包方法,但在训练期间未引入跨样本的注意力掩码。最终,DeepSeek-V3 的训练语料库包含了 14.8 万亿高质量、多样化的 tokenizer 令牌。
    在 DeepSeekCoder-V2(DeepSeek-AI, 2024a)的训练过程中,我们观察到中间填充(Fill-in-Middle, FIM)策略在不影响下一令牌预测能力的情况下,使模型能够根据上下文线索准确预测中间文本。因此,在 DeepSeek-V3 的预训练中,我们也引入了该策略。具体而言,我们采用前缀-后缀-中间(Prefix-Suffix-Middle, PSM)框架,将数据结构化为以下形式:
     f_pre  f_suf  f_middle 
    此结构在文档级别作为预打包过程的一部分应用。FIM 策略以 0.1 的比率在 PSM 框架中实现。
    DeepSeek-V3 的 tokenizer 使用字节级 BPE(Byte Pair Encoding, Shibata 等, 1999),词汇量扩展至 128K 令牌。我们修改了 tokenizer 的预处理器和训练数据,以优化多语言压缩效率。此外,与 DeepSeek-V2 相比,新的预处理器引入了将标点符号与换行符组合的令牌。然而,这种技巧在处理多行提示而没有终止换行符时,可能会导致令牌边界偏差(Lundberg, 2023),尤其在少样本评估提示中。为解决这一问题,我们在训练期间随机分割一定比例的组合令牌,从而使模型接触到更多的特殊情况,减轻这种偏差。

    4.2 超参数设置

    模型超参数
    我们将 Transformer 层数设置为 61,隐藏维度设置为 7168。所有可学习参数使用标准差为 0.006 的随机值初始化。在多头潜在注意力(MLA)中,注意力头的数量 为 128,每个头的维度 为 128。键值(KV)压缩维度 设置为 512,查询压缩维度 设置为 1536。对于解耦的查询和键,我们将每个头的维度 设置为 64。除了前三层外,我们将所有前馈网络(FFNs)替换为专家混合(MoE)层。每个 MoE 层由 1 个共享专家和 256 个路由专家组成,每个专家的中间隐藏维度为 2048。在路由专家中,每个令牌将激活 8 个专家,并确保每个令牌最多被发送到 4 个节点。多令牌预测(MTP)深度 设置为 1,即除了确切的下一令牌外,每个令牌还将预测一个额外的令牌。与 DeepSeek-V2 一样,DeepSeek-V3 在压缩的潜在向量后添加了额外的 RMS 归一化层,并在宽度瓶颈处乘以额外的缩放因子。在此配置下,DeepSeek-V3 包含 6710 亿个总参数,其中每个令牌激活 370 亿个参数。
    训练超参数
    我们采用 AdamW 优化器(Loshchilov 和 Hutter, 2017),超参数设置为 ,权重衰减 为 0.1。最大序列长度设置为 4K,DeepSeek-V3 在 14.8 万亿令牌上进行预训练。
    学习率调度策略