原文:https://zhuanlan.zhihu.com/p/14890557782
12月中旬,我浙之光Deepseek宣布完成了v2.5的最后一次升级之后,约过了十来天,v3.0就正式上线了。
DeepSeek-V3 是一款性能卓越的
混合专家(MoE)
语言模型,整体参数规模达到 671B,其中每个 token 激活的参数量为
37B
。
评估结果表明,DeepSeek-V3
在性能上超越了其他开源模型
,并能够与主流闭源模型相媲美。
图1:DeepSeek-V3和竞品的各科目考分对比
*笔者会用GPTs翻译形成初稿,然后精读后完成终稿,力求每一句话自己都能理解后再输出译文。
*需要原文的请至文末跳转至原文链接阅读。
引言
近年来,LLM 经历了快速迭代和演进,逐步缩小了与
通用人工智能(AGI)
的差距。除了闭源模型外,开源模型阵营也在取得重大进展,包括 DeepSeek 系列、LLaMA 系列、Qwen 系列和 Mistral 系列,这些模型正在努力缩小与闭源模型的性能差距。
为了进一步突破开源模型的能力边界,研究团队开发了 DeepSeek-V3,这是一个基于 MoE 架构的大模型,总参数量达到 671B,其中每个 token 会激活 37B 个参数。
基于提升性能和降低成本的双重目标,在架构设计方面,DeepSeek-V3 采用了MLA来确保推理效率,并使用 DeepSeekMoE来实现经济高效的训练。这两种架构在 DeepSeek-V2 中已经得到验证,证实了它们能够在保持模型性能的同时实现高效的训练和推理。
除了延续这些基础架构外,研究团队还引入了两项创新策略来进一步提升模型性能。
首先,DeepSeek-V3 首创了
无辅助损失的负载均衡
策略,有效降低了负载均衡对模型性能的负面影响。另外,DeepSeek-V3 采用了
多 token 预测训练目标
,这种方法在评估基准测试中展现出了显著的性能提升。
为了提高训练效率,该研究采用了
FP8 混合精度训练技术
并对训练框架进行了全面优化。低精度训练作为一种高效的训练方案,其发展与硬件性能的提升密切相关。本研究首次在超大规模模型上成功验证了 FP8 混合精度训练框架的有效性。通过采用 FP8 计算和存储技术,显著提升了训练速度并降低了 GPU 内存占用。
在训练框架方面,研究团队开发的 DualPipe 算法实现了高效的流水线并行处理,减少了流水线停滞,并通过计算和通信并行处理的方式降低了训练过程中的通信开销。这种优化确保了即使在模型规模进一步扩大的情况下,只要维持适当的计算通信比例,就能在不同节点间实现细粒度专家分配,同时将全节点间的通信开销降至接近于零。
此外,研究团队
优化了跨节点的全节点通信内核
,充分利用了 InfiniBand(IB) 和 NVLink 的带宽性能。通过精细的内存优化,使得 DeepSeek-V3 的训练
无需依赖成本高昂的张量并行技术
。
这些技术改进的综合运用实现了极高的训练效率。
在
预训练阶段
,DeepSeek-V3 使用了 14.8T 高质量且多样化的 token 进行训练。整个预训练过程表现出了出人意料的稳定性,不仅没有出现不可恢复的损失突增,也未发生需要回滚的情况。
随后,模型进行了
两个阶段的上下文长度扩展
:第一阶段将最大上下文长度提升至 32K,第二阶段进一步扩展至 128K。
接着,研究团队对 DeepSeek-V3 基础模型进行了
后训练
,包括 SFT 和 RL,以增强模型对人类偏好的理解并进一步提升其性能。在后训练阶段,通过从 DeepSeek R1 系列模型中提取推理能力,同时精确控制模型的输出质量和长度比例。
DeepSeek-V3 在全面的基准测试评估中表现突出。尽管其训练成本较低,但综合评估结果显示,
DeepSeek-V3-Base 已成为当前性能最强的开源基础模型
,尤其在
代码
和
数学
领域表现卓越。其对话版本不仅超越了其他开源模型,还在多个标准和开放式基准测试中展现出与领先闭源模型(如 GPT-4o 和 Claude-3.5-Sonnet)相匹敌的性能。
值得注意的是,DeepSeek-V3 实现了极具竞争力的训练成本(详见表1),这得益于在算法、框架和硬件层面的整体优化设计。
表 1:DeepSeek-V3 的训练成本,假设 H800 的租赁价格为$2/GPU小时
在预训练阶段,每处理1T token 仅需 180K H800 GPU 小时,即在配备 2048 个 H800 GPU 的集群上仅需 3.7 天。因此,整个预训练阶段在
不到两个月内
完成,总计使用了 2664K GPU 小时。
加上上下文长度扩展所需的 119K GPU 小时和后训练阶段的 5K GPU 小时,DeepSeek-V3 的完整训练总共消耗了 2.788M GPU 小时。按照每 GPU 小时 2 美元的 H800 GPU 租用价格计算,总训练成本仅为
557.6 万美元
。需要说明的是,这些成本仅包含 DeepSeek-V3 的正式训练环节,不包括前期架构研究、算法验证和数据实验等相关支出。
本研究的主要创新点包括:
架构创新
在 DeepSeek-V2 高效架构的基础上,创新性地提出了
无辅助损失的负载均衡策略
,有效降低了负载均衡过程对模型性能的影响。
开发并验证了多 token 预测(MTP)训练目标,证实了其对模型性能的提升作用,该技术还可用于推测解码来加速推理过程。
高效预训练
开发了
FP8 混合精度训练框架
,首次在超大规模模型上验证了 FP8 训练的可行性和效果。
通过算法、框架和硬件的综合优化,突破了
跨节点 MoE 训练中的通信瓶颈
,实现了计算与通信的高度重叠。这种优化大幅提升了训练效率,降低了训练成本,同时支持了更大规模模型的训练而无需额外开销。
仅用 2.664M H800 GPU 小时就完成了 DeepSeek-V3 在 14.8T token 上的预训练,打造出当前最强大的开源基础模型。预训练后的其他训练阶段仅需 0.1M GPU 小时。
后训练——DeepSeek-R1 知识蒸馏
该研究提出了一种创新的知识蒸馏方法,将
思维链 (CoT) 模型(特别是 DeepSeek R1 系列)的推理能力转移到标准 LLM 中
,尤其是 DeepSeek-V3。这一方法成功地将 R1 的验证和反思机制整合到 DeepSeek-V3 中,显著提升了其推理能力,同时有效控制了输出的风格和长度。
核心评估成果
知识领域评估:
•
在教育类基准测试中
,DeepSeek-V3 的表现
超越了所有开源模型
,在 MMLU、MMLU-Pro 和 GPQA 测试中分别获得了 88.5、75.9 和 59.1 的优异成绩。这一性能水平已与领先闭源模型 GPT-4o 和 Claude-Sonnet-3.5 相当,显著缩小了开源与闭源模型的性能差距。
• 在
事实性知识评测
中,DeepSeek-V3 在 SimpleQA 和中文 SimpleQA 测试中都展现出领先于其他开源模型的优势。特别值得注意的是,虽然其英语事实知识(SimpleQA)略逊于 GPT-4o 和 Claude-Sonnet-3.5,但在中文事实知识(中文 SimpleQA)方面却超越了这些模型,凸显了其
在中文知识领域的特殊优势
。
技术能力评估:
• 在
数学
领域,DeepSeek-V3 在所有
非 CoT 模型(包括开源和闭源)中取得了最优性能
。值得注意的是,在 MATH-500 等特定测试中,其表现甚至超越了 GPT-4o,充分展示了其出色的数学推理能力。
• 在
编程
领域,DeepSeek-V3 在
LiveCodeBench 等编程竞赛基准测试中表现最为突出
,确立了其在该领域的领先地位。在软件工程相关任务中,尽管略低于 Claude-Sonnet-3.5,但仍大幅领先于其他模型,展示了其在各类技术评测中的综合实力。
架构
DeepSeek-V3 的基本架构具有两个核心特征:
1.采用
MLA
实现高效推理
2.使用
DeepSeekMoE
实现经济高效的训练。
此外,该研究还开发了MTP训练目标,这一创新在评估基准测试中展现出显著的性能提升。
在其他未特别说明的架构细节方面,DeepSeek-V3 延续了 DeepSeek-V2 的设计方案。
基本架构
DeepSeek-V3 的基础架构建立在 Transformer 框架之上。为实现高效推理和降低训练成本,该模型采用了经 DeepSeek-V2 验证的 MLA 和 DeepSeekMoE 技术。相比 DeepSeek-V2,本研究在 DeepSeekMoE 中创新性地引入了无辅助损失负载均衡策略,有效降低了负载均衡过程对模型性能的影响。
图2展示了 DeepSeek-V3 的基本架构,本节将简要介绍 MLA 和 DeepSeekMoE 的技术细节。
图2:DeepSeek-V3 基本架构示意图。基于 DeepSeek-V2,团队采用了多头潜在注意力(MLA)和 DeepSeekMoE 架构,以实现高效推理和经济的训练。
多头潜在注意力机制
DeepSeek-V3 在注意力机制方面采用了 MLA 架构。设向量维度为
,注意力头数为
,每个头的维度为
,在特定注意力层中第
个 token 的注意力输入表示为
。MLA 的核心创新在于对注意力键和值进行低秩联合压缩,以降低推理过程中的键值(KV)缓存开销:
其中:
•
用于生成携带
旋转位置编码(Rotary Positional Embedding, RoPE)
的解耦键
•
RoPE(·)
表示旋转位置编码矩阵的应用操作
在 MLA 中,生成过程仅需缓存高亮标记的向量(
和
),这种设计显著降低了 KV 缓存空间,同时保持了与标准MHA相当的性能水平。
对于注意力查询(Query)部分,模型同样采用低秩压缩技术,这种设计有效降低了训练过程中的激活值内存占用:
其中:
最终,通过组合注意力查询(
)、键(
)和值(
),得到注意力机制的最终输出
:
其中
为输出维度变换矩阵。
DeepSeekMoE 及其无辅助损失负载均衡机制
DeepSeekMoE的基础架构:在前馈网络(Feed-Forward Networks, FFN)
部分,DeepSeek-V3 采用了 DeepSeekMoE 架构。相比传统的 MoE 架构(如 GShard),DeepSeekMoE 采用了更细粒度的专家分配机制,并创新性地将部分专家设置为共享专家。假设第
个 token 的 FFN 输入为
,其输出
的计算过程如下:
其中:
•
和
分别代表第
个共享专家和路由专家的处理函数
•
函数返回第
个 token 与所有路由专家计算得到的相关度分数中最高的
个值。
无辅助损失负载均衡
:对于 MoE 模型,不平衡的专家负载将导致路由崩溃,并在专家并行场景中降低计算效率。传统解决方案通常依赖辅助损失来避免不平衡负载。然而,过大的辅助损失会损害模型性能。为了在负载平衡和模型性能之间实现更好的权衡,研究团队开创了一种无辅助损失负载均衡策略来确保负载平衡。
具体而言,研究团队为每个专家引入了一个
偏置项
,并将其添加到相应的
亲和度分数
中以确定 top-K 路由:
在这种设计中,偏置项仅用于路由选择,而门控值(用于与 FFN 输出相乘)仍基于原始相关度分数
计算。训练过程中,系统会实时监控每个训练步骤中所有批次的专家负载分布。在每个步骤结束时,对于负载过高的专家,其偏置项会减少
;对于负载不足的专家,其偏置项会增加
,其中
是控制偏置更新速率的超参数。
通过这种动态调整机制,DeepSeek-V3 在训练过程中实现了专家负载的均衡分布,其性能优于传统仅依靠辅助损失来实现负载均衡的模型。
序列级辅助损失补充机制
:虽然 DeepSeek-V3 主要采用无辅助损失策略来实现负载均衡,但为了防止单个序列中出现显著的负载不均衡现象,模型还引入了补充性的序列级平衡损失:
其中平衡因子
是一个超参数,在 DeepSeek-V3 中被设置为极小值;
𝟙
表示指示函数;T 代表序列中的 token 总数。这种序列级平衡损失机制有助于保持单个序列内专家负载的均衡性。
节点约束路由机制
:类似于 DeepSeek-V2 的设备限制路由策略,DeepSeek-V3 采用了受控路由机制来优化训练过程中的通信开销。具体而言,系统限制每个 token 最多只能分配给 M 个计算节点,这些节点的选择基于每个节点上专家的最高
相关度分数总和。
在这种约束下,
MoE 训练框架能够实现计算与通信的近乎完全并行处理
。
完整的 Token 保留机制
:得益于高效的负载均衡策略,DeepSeek-V3 在整个训练过程中都保持着良好的负载平衡状态。因此,训练过程中不存在 token 丢弃现象。同时,通过特定的推理部署策略,DeepSeek-V3 在推理阶段同样实现了完整的 token 保留。
多 token 预测机制 (Multi-Token Prediction, MTP)
DeepSeek-V3 创新性地采用了 MTP 目标,将预测范围
扩展到每个位置的多个后续 token
。
这种设计具有双重优势:
首先,MTP 目标通过增加训练信号的密度可能提高数据利用效率;其次,它使模型能够提前规划表征,从而更准确地预测后续 token。
如图3所示,该实现方案与先前研究的方法有所不同:前者使用独立输出头并行预测
个额外 token,而 DeepSeek-V3 采用顺序预测方式,并在每个预测层级保持完整的因果关系链。
图3:MTP实现示意图。V3在每个深度上保持每个 token 预测过程中的完整因果依赖链。
MTP 模块架构
:具体实现中,模型采用
个串联模块来预测
个额外的 token。每个 MTP 模块(第k个)包含以下组件:
对于输入序列中的第
个
,在第
层预测时,模型首先将两个向量进行组合:该 token 在第 (k-1) 层的特征表示
和第 (
) 个 token 的向量
,通过线性变换进行融合:
其中[·;·]表示向量拼接操作。需要特别说明的是,在
时,
代表主模型输出的特征表示。值得注意的是,每个 MTP 模块都与主模型共享同一个向量层。经过组合的特征向量
随后输入到第
层的 Transformer 处理单元,生成该层的输出特征表示
:
其中
代表输入序列的长度,
表示包含两端的切片操作。接着,系统将
输入到共享输出层,计算第 k 个预测 token 的概率分布
(V 为词表大小):
输出层
OutHead(·)
首先通过线性变换将特征表示转换为 logits,然后使用 Softmax(·) 函数计算第 k 个预测 token 的概率分布。与向量层类似,每个 MTP 模块的输出层也与主模型共享。这种保持预测因果链的设计思路与
EAGLE
相近,但两者目标不同:EAGLE 主要用于推测解码,而本研究中的 MTP 主要用于优化训练效果。
MTP 训练目标优化
:系统为每个预测层级计算交叉熵损失
:
其中,
表示输入序列长度,
代表第
个位置的目标 token,
表示第 k 个 MTP 模块对
的预测概率。最终,通过计算所有层级 MTP 损失的平均值并乘以权重系数
,得到总体 MTP 损失
,作为 DeepSeek-V3 的补充训练目标:
推理阶段的MTP
:应用 MTP 机制的主要目的是提升基础模型的性能,因此在实际推理阶段可以不使用 MTP 模块,基础模型能够独立完成正常推理。此外,这些 MTP 模块也可以被重新配置用于推测解码,从而降低模型生成的时间延迟。
基础设施
计算集群架构
DeepSeek-V3 的训练环境是一个配备
2048 个 NVIDIA H800 GPU
的大规模计算集群。
该集群中的每个计算节点包含
8 个 GPU
,这些 GPU 通过节点内的
NVLink 和 NVSwitch
实现高速互连。节点之间则采用
InfiniBand (IB)
技术进行高效通信。
训练框架设计
模型训练基于自主研发的 HAI-LLM 框架, 这是一个经过优化的高效轻量级训练系统。DeepSeek-V3 的并行策略包含三个层面:16 路
流水线并行(Pipeline Parallelism, PP)
、跨 8 个节点的 64 路
专家并行(Expert Parallelism, EP)
,以及 ZeRO-1
数据并行(Data Parallelism, DP)
。
为实现高效训练,该框架进行了多方面的工程优化:
1.开发了
DualPipe
流水线并行算法,相比现有 PP 方法,该算法
显著减少了流水线停滞
现象。更重要的是,它实现了前向和后向
过程中计算与通信阶段的重叠
,有效解决了跨节点专家并行带来的通信负载问题。
2.优化了
跨节点全对全通信内核
,充分利用 IB 和 NVLink 带宽,同时减少了通信所需的流式多处理器(SMs)资源占用。
3.通过精细的内存管理优化,使得模型训练无需依赖开销较大的张量并行(Tensor Parallelism, TP)技术。
DualPipe 技术与计算通信协同优化
在 DeepSeek-V3 中,跨节点专家并行机制引入了显著的通信开销,导致计算与通信比例接近1:1,影响了训练效率。
为解决这一问题,模型采用了创新性的 DualPipe 流水线并行算法。该算法通过两个关键优化实现性能提升:有效融合前向和后向计算的通信阶段,同时减少流水线阻塞。
DualPipe 的核心创新在于实现了单个前向和后向计算块内的计算通信重叠。具体来说,每个计算块被划分为四个功能模块:
特别地,在后向计算块中,注意力和 MLP 模块都被进一步细分为
输入梯度计算和权重梯度计算
两个部分,这一设计借鉴了
ZeroBubble
的思路。此外,还包含专门的 PP 通信模块。
图4:个体前向和后向块的重叠策略(Transformer 块的边界未对齐)。橙色表示前向计算,绿色表示“输入的后向计算”,蓝色表示“权重的后向计算”,紫色表示 PP 通信,红色表示屏障。全对全(all-to-all)通信和 PP 通信可以完全隐藏。
如图4所示,通过优化排列这些功能模块,并精确调控用于通信和计算的 GPU 流处理器资源分配比例,系统能够在运行过程中有效隐藏全节点通信和 PP 通信开销。
完整的 DualPipe 调度机制如图5所示。它采用创新的
双向流水线调度策略
,实现了从流水线两端同时输入微批次数据,使得大部分通信过程能够与计算过程完全重叠。这种设计确保了即使在模型规模进一步扩大的情况下,只要维持适当的计算通信比例,就能在节点间实现细粒度的专家分配,同时将全节点通信开销降至接近于零。
图5:8 个 PP 排位和 20 个微批次在两个方向上的双管道调度示例。反向方向的微批次与前向方向的微批次对称,因此为简化说明,省略了反向微批次的批次 ID。两个由共享黑色边框围住的单元存在相互重叠的计算和通信。
值得注意的是,即使在通信负载相对较轻的常规应用场景中,DualPipe 仍然展现出显著的效率优势。表2对比了不同 PP 方法在流水线阻塞和内存使用方面的表现。
数据显示,相比
ZB1P
和
1F1B
,DualPipe 大幅减少了流水线阻塞,而峰值活性内存仅增加了
。虽然 DualPipe 需要维护两份模型参数副本,但由于训练过程采用了大规模 EP,这一冗余并未导致显著的内存开销增加。
与 Chimera 相比,DualPipe 的实现要求更为灵活,仅需要流水线阶段数和微批次数能被 2 整除,而不要求微批次数必须能被流水线阶段数整除。
此外,DualPipe 的一个重要特性是,
随着微批次数量的增加,其流水线阻塞和激活内存占用都不会相应增加
。
跨节点all-to-all通信的高效实现
为了确保 DualPipe 具有充足的计算性能,系统采用了定制化的高效跨节点全对全通信内核(包括分发和组合功能),以节省用于通信的 SMs 数量。
这些内核的实现与 MoE 门控算法和集群的网络拓扑结构进行了协同设计。具体而言,在该集群中,跨节点 GPU 通过 IB 实现全连接,节点内通信则通过 NVLink 处理。NVLink 提供 160GB/s 的带宽,约为 IB(50GB/s)的 3.2 倍。为了有效利用 IB 和 NVLink 的不同带宽特性,系统限制每个 token 最多分发到 4 个节点,从而减少 IB 流量。对于每个 token,当确定其路由决策后,首先通过 IB 传输到目标节点上具有相同节点内索引的 GPU。一旦到达目标节点,系统确保其通过 NVLink 即时转发到承载目标专家的特定 GPU,避免被后续到达的 token 阻塞。
通过这种方式,IB 和 NVLink 的通信实现完全重叠,每个 token 能够在不产生 NVLink 额外开销的情况下,在每个节点上平均高效选择 3.2 个专家。这意味着,
虽然 DeepSeek-V3 实际只选择 8 个路由专家,但它可以将这个数字扩展到最多 13 个专家(4 个节点 × 3.2 个专家/节点),同时保持相同的通信成本
。
总体而言,在这种通信策略下,仅需 20 个 SMs 就足以充分利用 IB 和 NVLink 的带宽。具体而言,系统采用了线程专门化技术,将 20 个 SMs 划分为 10 个通信信道。
在分发过程中,(1)IB 发送、(2) IB 到 NVLink 转发和(3) NVLink 接收由各自的线程组处理。分配给每个通信任务的线程组数量根据所有 SMs 的实际工作负载动态调整。
类似地,在组合过程中,(1) NVLink 发送、(2) NVLink 到 IB 转发和累积,以及(3) IB 接收和累积也由动态调整的线程组处理。此外,分发和组合内核与计算流重叠,因此还考虑了它们对其他 SM 计算内核的影响。具体而言,系统采用了定制的 PTX 指令并自动调整通信块大小,这显著降低了 L2 缓存的使用和对其他 SMs 的干扰。
极致的内存节省与最小开销
为了减少训练期间的内存占用,系统采用了以下技术:
RMSNorm 和 MLA 上投影的重计算
。在反向传播期间重新计算所有 RMSNorm 操作和 MLA 上投影,从而避免了持久存储其输出激活的需求。这种策略虽带来少量开销,但显著减少了存储激活所需的内存。
CPU 中的指数移动平均(EMA)
。在训练期间,系统在 CPU 内存中保留模型参数的EMA,用于学习率衰减后对模型性能的早期估计。EMA 参数存储在 CPU 内存中,并在每个训练步骤后异步更新。这种方法使维护 EMA 参数不会产生额外的内存或时间开销。
MTP的共享向量和输出头
。采用 DualPipe 策略,将模型的最浅层(包括向量层)和最深层(包括输出头)部署在相同的PP等级上。这种安排使 MTP 模块和主模型之间能够物理共享参数和梯度,实现共享向量和输出头。这种物理共享机制进一步提高了内存使用效率。
FP8 训练
基于低精度训练领域的最新进展,本研究开发了一种细粒度混合精度框架,采用 FP8 数据格式训练 DeepSeek-V3。
尽管低精度训练技术展现出巨大潜力,但其实际应用常受到激活值、权重和梯度中异常值的制约。虽然推理量化技术取得重要突破,但在大规模语言模型预训练中成功应用低精度技术的案例仍然有限。
为了应对这一挑战并有效扩展 FP8 格式的动态范围,本研究采用了细粒度量化策略:
采用
元素的条状分组或
元素的块状分组。
通过提高精度累积过程,大幅降低了反量化带来的计算开销,这对实现高精度 FP8 **通用矩阵乘法(GEMM)**至关重要。此外,为降低 MoE 训练中的内存和通信开销,系统采用 FP8 格式进行激活值的缓存和分发,同时使用 BF16 格式存储低精度优化器状态。
该框架在与 DeepSeek-V2-Lite 和 DeepSeek-V2 规模相近的两个模型上进行了验证,训练数据量约为 1T token(详见原文附录B.1)。结果表明,与 BF16 基准相比,
FP8 训练模型的相对损失误差始终保持在 0.25% 以下
,这完全在训练随机性的可接受范围内。
混合精度框架
本研究在已有低精度训练技术的基础上,设计了专门的 FP8 训练混合精度框架。在这一框架中,大部分计算密集型操作采用 FP8 执行,而关键操作则保持原有数据格式,以实现训练效率和数值稳定性的最优平衡。
整体框架结构如图6所示。
图6:带有 FP8 数据格式的整体混合精度框架。为清晰起见,仅展示了线性算子。
首先,为提高模型训练速度,大部分核心计算操作(尤其是 GEMM 运算),均采用 FP8 精度实现。这些 GEMM 运算接收 FP8 格式的张量输入,输出 BF16 或 FP32 格式的结果。如图6所示,线性运算相关的三个 GEMM 操作,包括
Fprop(前向传播)、Dgrad(激活值反向传播)和 Wgrad(权重反向传播)
,均采用 FP8 执行。这种设计策略
理论上将计算速度提升至原有 BF16 方法的两倍
。同时,FP8 格式的 Wgrad GEMM 使得激活值能够以 FP8 格式存储用于反向传播,
显著降低了内存使用量
。
虽然 FP8 格式在效率方面具有优势,但某些运算由于对计算精度较为敏感,仍需要更高精度的支持。另外,部分计算开销较小的运算可以采用更高精度而不会显著影响整体训练效率。
因此,经过详细评估,系统对以下模块保持原有精度(BF16 或 FP32):
向量层、输出层、MoE 门控模块、标准化运算和注意力运算模块
。这种针对性的高精度保留策略确保了 DeepSeek-V3 训练过程的动态稳定性。为进一步保障数值计算的稳定性,主要权重参数、权重梯度和优化器状态均采用更高精度存储。虽然这些高精度组件会带来一定的内存开销,但通过在分布式训练系统中
跨多个 DP 层级进行高效数据分割
,这些额外开销得到了有效控制。
量化和乘法精度优化
基于混合精度 FP8 框架,研究团队开发了多种策略来提升低精度训练的准确性,主要从量化方法和乘法计算两个方面进行优化。
细粒度量化技术
:在低精度训练框架中,由于 FP8 格式的指数位较少导致其动态范围受限,经常出现数值溢出和下溢的问题。传统方法是将输入张量的最大绝对值映射到 FP8 格式的最大可表示值,将输入分布对齐到可表示范围内。然而,这种方法使得低精度训练对激活值中的极端值特别敏感,可能导致量化精度显著下降。
为解决这一问题,该研究提出了一种更细粒度的量化方法。如图7(a)所示,该方法采用两种不同的分组策略:
1.激活值采用 1x128 条状分组和缩放(每个 token 的每 128 个通道)
2.权重采用 128x128 块状分组和缩放(每 128 个输入通道对应 128 个输出通道)
图7(a):研究提出了一种细粒度量化方法,用于减轻由特征异常值引起的量化误差;为简化说明,仅展示了前向传播(Fprop)。(b):配合量化策略,团队通过以间隔 NC = 128 元素的 MMA 提升到 CUDA 核心,从而提高 FP8 GEMM 的精度,以进行高精度累加。
这种方法通过在更小范围内调整缩放因子,显著提高了量化过程对极端值的适应能力。原文附录B.2 中详细分析了在块状基础上对激活值进行分组和缩放时可能出现的训练不稳定现象。
该方法的一项重要创新是在
GEMM 操作的内部维度引入组级缩放因子
。虽然标准 FP8 GEMM 不直接支持这一功能,但通过与精确 FP32 累积策略的结合,实现了高效的执行。值得注意的是,这种细粒度量化策略与微缩放格式的理念高度契合,而 NVIDIA 新一代 GPU(Blackwell 系列)的 Tensor Cores 已宣布将支持更细粒度的微缩放格式。这一设计为适配最新 GPU 架构的未来研究提供了重要参考。
累积精度优化
:低精度 GEMM 运算常见的下溢问题主要通过高精度累积来解决,通常采用 FP32 精度。然而,在 NVIDIA H800 GPU 上,FP8 GEMM 的累积精度仅能保持约 14 位有效数字,远低于 FP32 的累积精度。这个问题在内部维度
较大时尤为显著,这正是大规模模型训练中的常见情况,因为批量规模和模型宽度都有所增加。例如,在
的两个随机矩阵 GEMM 运算测试中,Tensor Cores 的有限累积精度导致最大相对误差接近 2%。尽管存在这些问题,部分 FP8 框架仍将有限累积精度作为默认选项,这严重制约了训练精度的提升。
为解决这一问题,系统采用了 CUDA Cores 提升策略来获得更高的计算精度。如图7(b)所示,在 Tensor Cores 执行
MMA(矩阵乘法累加)
时,中间结果先使用有限位宽累加。当达到
间隔时,这些部分结果会转移到 CUDA Cores 的 FP32 寄存器中进行全精度累加。结合细粒度量化在内部维度 K 上的组级缩放因子,系统能够在 CUDA Cores 上高效完成反量化过程,仅带来极少的额外计算开销。
这种设计虽然降低了单个线程组的
WGMMA
指令发出率,但在 H800 架构上通过并发执行两个 WGMMA 得到了优化:一个线程组执行提升操作的同时,另一个可以执行 MMA 操作。这种重叠执行机制保证了 Tensor Cores 的高效利用。实验证明,将
设为 128 个元素(即 4 个 WGMMA)是在不引入显著开销的前提下,能够有效提升精度的最小累积间隔。
在数值表示方面,不同于先前工作采用的混合 FP8 格式(Fprop 使用 E4M3,Dgrad 和 Wgrad 使用 E5M2),本研究在
所有张量计算中统一采用 E4M3 格式
以提高精度。这种设计的可行性源于细粒度量化策略(平铺和块状缩放),通过在较小元素组内共享指数位来有效缓解有限动态范围的影响。
为确保量化精度并简化框架设计,系统采用
在线量化
方法,而不是像其他张量级量化框架那样使用基于历史记录的延迟量化。系统对每个
激活平铺或
权重块实时计算最大绝对值,据此确定缩放因子并完成 FP8 格式的在线量化。
低精度存储与通信优化
在 FP8 训练框架的基础上,通过将缓存的激活值和优化器状态转换为更低精度格式,系统进一步优化了内存占用和通信开销。
优化器状态的精度优化
:系统在
AdamW
优化器中使用 BF16 代替 FP32 格式来记录一阶和二阶动量,这种改变并未带来明显的性能损失。同时,为确保训练过程的数值稳定性,主要权重参数(优化器存储)和梯度值(用于批量累积)仍保持 FP32 格式。
激活值精度优化
:如图6所示,Wgrad 运算采用 FP8 执行。为降低内存占用,系统在线性运算的反向传播中使用 FP8 格式缓存激活值。但在实现低成本高精度训练时,以下运算需要特殊处理:
1.
注意力层后的线性层输入
:这些激活值同时用于注意力运算的反向传播,因此对精度特别敏感。系统为这些激活值专门设计了 E5M6 数据格式。在反向传播时,这些激活值的量化模式从
转换为
。为避免引入额外的量化误差,所有缩放因子都采用 2 的整数次幂。
2.
MoE 中 SwiGLU 运算的输入
:为优化内存使用,系统仅缓存 SwiGLU 运算的输入,在反向传播时重新计算输出。这些激活值采用 FP8 格式存储,并通过细粒度量化方法实现内存效率和计算精度的最优平衡。
低精度通信优化
:通信带宽限制是 MoE 模型训练中的主要性能瓶颈。为解决这一问题,系统在执行 MoE 上投影前将激活值转换为 FP8 格式,再进行数据分发,这种方式与 MoE 上投影中的 FP8 前向传播保持兼容。与注意力层后的线性层输入处理方式相同,这里的激活值缩放因子也采用 2 的整数次幂。同样的处理方式也应用于 MoE 下投影前的激活值梯度计算。考虑到训练精度的重要性,前向和反向传播中的组合运算环节都保持 BF16 格式,以确保训练管道关键环节的计算精度。
推理和部署
DeepSeek-V3 部署在 H800 集群上,集群中每个节点内的 GPU 通过 NVLink 互连,集群内所有 GPU 通过 IB 实现全连接。为同时确保在线服务质量(SLO)和高吞吐量,该系统采用了将预填充和解码阶段分离的部署策略。
预填充
预填充阶段的最小部署单元配置为 4 个节点 32 个 GPU。
注意力机制部分采用
4 路张量并行(TP4)配合序列并行(SP)
,结合
8 路数据并行(DP8)
。较小的 TP 规模有效控制了通信开销。
MoE 部分采用
32 路专家并行(EP32)
,确保每个专家能处理足够规模的批量数据,提升计算效率。MoE 的全节点通信采用与训练阶段相同的方式:先通过 IB 在节点间传输 token,再通过 NVLink 在节点内 GPU 间传递。特别地,浅层的密集 MLP 采用单路张量并行以降低 TP 通信开销。
为实现 MoE 部分各专家间的负载平衡,系统需要确保每个 GPU 处理相近数量的 token。为此,采用了
冗余专家部署策略
,对高负载专家进行复制和冗余部署。
系统基于在线部署时收集的统计数据识别高负载专家,并定期调整(如每 10 分钟)。确定冗余专家后,基于负载观测数据在节点内 GPU 间重新分配专家,在不增加跨节点通信开销的前提下,尽可能实现 GPU 间的负载均衡。
DeepSeek-V3 在预填充阶段配置了 32 个冗余专家,每个 GPU 除原有的 8 个专家外,还分配一个额外的冗余专家。此外,为提升吞吐量并降低全对全和 TP 通信开销,系统同时处理两个计算负载相近的微批次,将一个批次的注意力和 MoE 计算与另一个批次的数据分发和聚合重叠。
目前正在探索
专家动态冗余机制
,使每个 GPU 分配更多专家(如 16 个),但每次推理仅激活其中 9 个。在每层全对全操作开始前,系统实时计算全局最优路由方案。由于预填充阶段本身计算量较大,计算路由方案的额外开销几乎可以忽略。
解码
在解码阶段,系统将共享专家作为一种路由专家处理。这意味着每个 token 在路由时会选择 9 个专家,其中共享专家被视为一个必然选择的高负载专家。
解码阶段的最小部署单元由 40 个节点 320 个 GPU 构成。
注意力部分
采用 TP4 配合 SP,结合 DP80,而 MoE 部分使用 EP320。
MoE 部分
,每个 GPU 仅分配一个专家,其中 64 个 GPU 专门负责冗余专家和共享专家。分发和聚合环节的全节点通信通过 IB 直接点对点传输实现低延迟。同时,系统引入
IBGDA
技术进一步降低延迟并提升通信效率。
与预填充阶段类似,系统基于在线服务的专家负载统计数据,定期确定冗余专家配置。由于每个 GPU 仅分配一个专家,无需进行专家重新分配。系统也在研究解码阶段的动态冗余策略,但这需要对全局最优路由方案的计算算法进行更细致的优化,并与分发内核进行融合以减少开销。
此外,为提升吞吐量并降低全节点通信开销,系统正在探索在解码阶段同时处理两个计算负载相近的微批次。与预填充不同的是,在解码阶段注意力机制占用更多时间,因此系统将一个批次的注意力计算与另一个批次的分发、MoE 处理和数据聚合进行重叠。
在解码阶段,每个专家处理的批量规模相对较小(通常不超过 256 个 token),
系统瓶颈在于内存访问而非计算能力
。由于 MoE 部分只需加载单个专家的参数,内存访问开销较小,因此即使分配较少的 SMs 也不会显著影响整体性能。基于这一特点,系统只需分配少量 SMs 用于分发、MoE 处理和数据聚合,避免影响注意力部分的计算速度。
硬件设计建议
基于全对全通信和 FP8 训练方案的实践经验,研究团队对 AI 硬件厂商提出以下芯片设计建议。
通信硬件 DeepSeek-V3 通过实现计算与通信的并行处理,在计算过程中有效隐藏了通信延迟。这种设计相比串行计算和通信方式,显著降低了对通信带宽的要求。然而,目前的通信实现需要占用大量宝贵的 SMs 资源(如在 H800 GPU 的 132 个 SMs 中占用 20 个),这限制了计算吞吐能力。
另外,将 SMs 用于通信导致张量核心资源的严重浪费。目前,SMs 在全对全通信中主要承担以下任务:
• 在 IB 和 NVLink 网络间转发数据,同时汇聚来自单个 GPU 发往同一节点内多个 GPU 的 IB 数据流。
• 在 RDMA 缓冲区(注册的 GPU 内存区域)与输入/输出缓冲区间传输数据。
• 在跨 IB 和 NVLink 网络向多个专家传输分块数据时管理细粒度内存布局。
期望未来硬件厂商能开发专门的硬件,将这些通信任务从计算核心 SM 中分离出来,设计成类似 NVIDIA SHARP 的 GPU 协处理器或网络协处理器。同时,为降低应用开发难度,希望这种硬件能从计算单元的角度统一管理 IB(横向扩展)和 NVLink(纵向扩展)网络。通过这种统一接口,计算单元只需提交简单的通信请求,就能在整个 IB-NVLink 统一网络中轻松实现读取、写入、多播和归约等操作。
计算硬件
张量核心中的 FP8 GEMM 累积精度提升
:当前 NVIDIA Hopper 架构的张量核心在实现 FP8 GEMM 时采用定点累积方式,通过基于最大指数的右移操作对尾数积进行对齐后再相加。实验显示,该设计在符号填充右移后仅使用每个尾数积的最高 14 位,并舍弃超出范围的位。然而,例如要从 32 个 FP8 \times FP8 乘法的累积中获得精确的 FP32 结果,至少需要 34 位精度。因此,建议未来芯片设计提高张量核心的累积精度以支持全精度累积,或根据具体训练和推理算法的精度需求选择合适的累积位宽,以在保证计算效率的同时将误差控制在可接受范围内。
支持平铺和块状量化
:现有 GPU 仅支持整体张量量化,缺乏对平铺和块状等细粒度量化的硬件支持。当前实现中,达到N_C间隔时需要将部分结果从张量核心复制到 CUDA 核心,进行缩放因子乘法运算,再添加到 CUDA 核心的 FP32 寄存器中。虽然结合精确 FP32 累积策略显著降低了反量化开销,但张量核心和 CUDA 核心间频繁的数据移动仍然制约了计算效率。因此,建议未来芯片支持细粒度量化,使张量核心能够直接接收缩放因子并实现组级缩放的 MMA 操作。这样可以直接在张量核心内完成全部的部分和累积与反量化计算,直到生成最终结果,避免频繁的数据迁移。
支持在线量化
:尽管研究证实了在线量化的有效性,但当前硬件难以有效支持这一技术。现有流程中需要从 HBM 读取 128 个 BF16 激活值(上一步的计算结果)进行量化,将量化后的 FP8 值写回 HBM,然后再次读取用于 MMA 操作。为解决这一低效问题,建议未来芯片将 FP8 格式转换与 TMA 访问集成为单一融合操作,实现在激活值从全局内存传输到共享内存过程中完成量化,避免频繁的内存读写。同时建议支持线程束级格式转换指令以提升性能,促进层标准化与 FP8 转换的更好融合。另一种方案是采用近内存计算方法,将计算逻辑放置在 HBM 附近,使 BF16 元素在从 HBM 读入 GPU 时直接转换为 FP8,从而将片外内存访问减少约 50%。
支持转置GEMM操作
:现有架构难以实现矩阵转置与 GEMM 操作的有效融合。目前的工作流中,前向传播阶段的激活值需要先量化为 1x128 FP8 平铺格式并存储。在反向传播时,系统必须读取矩阵,执行反量化,进行转置操作,再重新量化为 128x1 平铺格式,最后存入 HBM。为优化内存操作效率,建议未来芯片设计中,对训练和推理中常用的精度格式,支持在 MMA 操作前直接从共享内存进行转置读取。这一改进配合 FP8 格式转换和 TMA 访问的融合机制,将大幅优化量化处理流程。
预训练
数据构建
相比 DeepSeek-V2,本次预训练语料库在提升数学和编程样本占比的同时,扩大了英语和中文之外的多语言覆盖范围。
数据处理流程也经过改进,在保持语料多样性的同时降低了数据冗余。系统采用文档打包方法维持数据完整性,但训练过程中不使用跨样本注意力掩码。最终训练语料库包含 14.8T 经 tokenizer 处理的高质量多样化 token。
在 DeepSeekCoder-V2 的训练中发现,
填充中间(FIM)
策略在保持下一个 token 预测能力的同时,还能让模型基于上下文准确预测中间文本。因此 DeepSeek-V3 的预训练也采用了这一策略。具体实现上,使用
前缀-后缀-中间(PSM)
框架构建如下数据结构:
<|fim_begin|> pre<|fim_hole|> suf<|fim_end|> middle<|eos_token|>。
该结构在预打包阶段应用于文档级别,FIM 策略的应用比率为 0.1,与 PSM 框架保持一致。
DeepSeek-V3 采用词表大小为 128K 的字节级
BPE tokenizer
。为提高多语言压缩效率,对预分词器和训练数据进行了相应调整。与 DeepSeek-V2 相比,新的预分词器
引入了标点符号和换行符的组合 token
。然而这种设计在处理无终端换行符的多行提示词时可能产生 token 边界偏差,尤其是在少样本评估场景。为此,训练时对一定比例的组合 token 进行随机分割,使模型接触更多特殊情况来减轻这种偏差。
超参数设置
模型架构参数
系统采用 61 层 Transformer 结构,隐藏维度为 7168。所有可学习参数采用标准差 0.006 的随机初始化。
在 MLA 结构中,注意力头数量
设为 128,每个头的维度
为 128。KV 压缩维度
为 512,查询压缩维度
为 1536。解耦的查询和键部分,每个头的维度
设为 64。
除前三层外,所有 FFN 层都替换为 MoE 层,每个 MoE 层配置 1 个共享专家和 256 个路由专家,专家的中间隐藏维度为 2048。
在路由专家中,每个 token 激活 8 个专家,且最多分配到 4 个节点。多 token 预测深度 D 设为 1,即每个 token 除预测下一个精确 token 外,还需预测一个额外 token。
与 DeepSeek-V2 类似,DeepSeek-V3 在压缩潜在向量后添加了 RMSNorm 层,并在宽度瓶颈处引入额外缩放因子。在此配置下,
模型总参数量达到 671B,其中每个 token 激活 37B 参数
。
训练参数
模型采用 AdamW 优化器,参数设置为: