一、模型架构
1.1 高效的模型架构设计:多头潜在注意力 MLA 和 DeepSeekMoE 架构
-
专家构成:标准MoE架构的类型和分工较为宽泛,一般不会特别强调共享专家的设置,各个专家相对独立的处理不同输入数据,在处理不同类型数据特征时,专家间一般缺少专门设计的协作和共享机制;而 DeepSeekMoE 架构中的共享专家可对不同输入数据中的共性特征进行处理,在不同类型的输入数据间实现共性特征的知识共享,以便减少模型参数冗余,而路由专家则负责处理具有特定模式或特征的数据,提高模型对不同数据的适应性和处理能力。 -
专家分配:标准MoE架构的专家分配策略相对比较粗放,门控网络根据输入数据进行专家选择时,对于一些复杂数据特征的区分不够精准,不能很好地将数据分配到最能处理该特征的专家;而 DeepSeekMoE 架构采用了更细粒度的专家分配策略,门控网络能够更精准地分析输入数据的特征,将其分配到最合适的专家,提升模型对于复杂数据的处理能力。 -
专家激活:标准MoE架构对于输入数据激活的专家数量没有固定标准,在某些情况下输入数据可能会激活过多非必要的专家,导致计算资源的浪费;而 DeepSeekMoE 架构明确了每个输入 Token 激活8个路由专家,在保证模型处理效果的同时,避免了过度激活专家带来的计算资源浪费,提高了计算效率、降低了计算成本;在具体实现方式上,共享专家会对每个输入 Token 进行处理,以便提取通用的基本特征,而路由专家会根据输入 Token 的特征而决定是否被激活参与计算。
1.2 创新的负载均衡策略:无辅助损失负载均衡和序列级负载均衡
-
无辅助损失负载均衡:DeepSeek-V3 为每个专家引入了一个可学习的偏置项,在训练过程中它会随着专家负载情况进行动态更新,当门控网络计算输入 Token 与各专家的匹配得分时,该偏置项会动态调整每个专家的匹配得分,基于得分和对各专家利用率的实时监测(例如在一定时间窗口内专家处理的 Token 数量、计算资源占用时长等),动态调整路由策略,将输入 Token 实时分配给负载较低的专家,这种方法不仅负载均衡效果好,而且避免了引入辅助损失函数带来的衍生问题。 -
序列级负载均衡:DeepSeek-V3 额外增加了一个序列级负载均衡损失函数,对序列中的每个 Token 进行精细化的分析和处理,根据 Token 在序列中的位置、上下文信息等更合理地分配到各个专家(而不是仅仅基于单个 Token 的特征进行独立分配),通过这种负载均衡方案,兼顾了 Token 之间的关联性和序列的整体结构。
1.3 多令牌预测(MTP) 训练目标:提高训练效率和推理速度
-
输入 Token 与输出 Token:如图左下方的t1、t2、t3、t4等,是模型的输入序列;如图上方的t2、t3、t4、t5是模型预测需要匹配的真实 Token 序列,不同部分对应不同的预测任务。 -
主模型(Main Model)与 MTP 模块:输入 Token 先经过嵌入层转换为向量表示,然后分别在 Main Model 和 MTP 内部进行计算,基于与目标 Token 计算得到的 Loss,指导模型更新训练参数。 -
共享机制:嵌入层(Embedding Layer)和输出头(Output Head)在主模型和 MTP 模块之间共享,这种共享机制确保了模型在不同预测任务中的参数一致性,同时减少了参数数量,提高了训练效率。
-
实现高效训练:由于一次可预测多个 Token,在相同数据量的情况下,相比 STP 架构,模型可以学习到更多的信息,从而提升了数据的利用效率,使得训练更加高效。 -
提升训练效果:模型可以基于对多个 Token 的预测,更合理地调整自身参数,学习到更丰富的语言模式和语义信息,有助于模型在训练中更好地收敛,提升训练效果。
二、并行策略
2.1 高效的并行策略设计:大量使用 EP、不再使用 TP
-
模型结构适配性:MoE 模型由多个专家网络和一个门控网络组成,EP 正好与这种结构相匹配,它可以将不同的专家分配到不同的计算单元上并行计算,让模型同时处理多个不同的任务或数据特征,提高模型的处理能力和训练效率;TP 通常用于处理大型张量的计算,不能很好地对应 MoE 模型的结构特点。 -
通信成本考虑:在 EP 中不同专家之间的通信相对较少,主要的通信开销在于门控网络与专家网络之间的信息交互,以及在进行模型参数更新等操作时的一些全局通信;TP 需要在多个设备之间频繁地进行张量的切分、合并等操作,通信量会随着模型规模和数据量的增加而显著增加,降低训练效率。 -
计算资源利用率:MoE 模型中的不同专家可能具有不同的计算复杂度和数据需求,EP 可以根据各个专家的特点灵活地分配计算资源,使不同性能的计算单元都能得到充分利用;TP 的资源分配方式相对单一,对于不同专家的多样性计算需求支持不佳。
2.2 Dualpipe 流水线并行策略:双流并行计算优化与双向流水调度优化
-
基本概念:如 DeepSeek 在论文中所述,在训练过程中包含前向传递、反向传递两个阶段,具体包括计算流和通信流两个流。 -
前向传递:通常按顺序执行ATTN(计算流)、DISPATCH(通信流)、MLP(计算流)、COMBINE(通信流)操作。
-
ATTN(计算流):指注意力机制计算,使大模型能够捕捉文本等数据中的依赖关系,提升模型的性能和泛化能力。 -
DISPATCH(通信流):指数据或任务在不同GPU节点之间的传递,提高整个训练系统的并行度和效率。 -
MLP(计算流):即多层感知机计算,由输入层、输出层和一个或多个隐藏层构成,利用梯度下降法更新权重参数。 -
COMBINE(通信流):指将不同GPU节点上将计算结果进行合并的通信操作。
-
反向传递:需要执行COMBINE(通信流)、MLP_B(计算流)、MLP_W(计算流)、DISPATCH(通信流)、ATTN_B(计算流)、ATTN_W(计算流)操作。
-
COMBINE(通信流):定义与前向传递相同,此处特指反向传递时的数据汇总,以便进行全局参数更新。 -
MLP_B(计算流):此处的B指的是Bias,指的是反向传播中对于偏执项的计算,以便更新大模型的偏执参数。 -
MLP_W(计算流):此处的W指的是Weight,指的是反向传播中对于权重参数的计算,用于更新权重参数。 -
DISPATCH(通信流):在反向计算中,DISPATCH 的作用仍然是负责数据或任务的分发。 -
ATTN_B(计算流):偏置项也会影响注意力权重的计算和最终的输出,通过计算调整注意力机制中的偏置参数。 -
ATTN_W(计算流):计算损失函数对注意力权重的梯度,通过更新注意力权重捕捉数据中的依赖关系和重要信息。
-
基本概念:PP并行方法中,训练过程经常容易出现气泡(即GPU闲置),核心原因是在PP并行中不同的计算阶段可能具有不同的计算复杂度和执行时间,导致计算快的阶段需要等待计算慢的阶段完成后才能继续进行下一轮计算,同时不同阶段之间需要进行数据通信来传递中间结果,可能会受到网络带宽等影响导致数据传输延迟,如下图所示,其中有以下一些关键信息。 -
颜色:蓝色代表前向传播,绿色代表反向传播,灰色代表空闲状态(即气泡)。 -
数字:表示不同的微批次(Micro – batch),图中不同GPU上的数字序列,反映了各个微批次在不同GPU上的计算顺序和时间分布。

2.3 ZeRO-1(DP) 数据并行策略:降低内存占用,加速模型训练
-
降低内存占用:ZeRO-1(DP) 数据并行策略显著降低了单个 GPU 的内存占用,让模型能够在有限的显存中进行训练。 -
加速模型训练:首先由于内存占用降低,模型可以处理更大的批量数据,提高了计算资源的利用率,从而加快训练速度;另外ZeRO-1 通过在不同GPU之间共享一部分状态变量,减少了 GPU 之间的通信开销,进一步提升了整体训练效率。
三、通信优化
3.1 Moe 路由的All2All优化设计:网络拓扑优化与资源分配优化
-
All to All通信:在数据传输时,根据实际传输的数据量来开辟相应大小的显存空间;这种方案的优势是显存开销小,劣势是由于是点对点通信、通信效率相对较低。 -
All Reduce和Reduce Scatter通信:这种方案首先是将所有数据路由至每一张GPU,然后通过掩码筛选出每个专家模型真正需要的数据,再进行求和、求最大值等规约操作,并将数据重新合理分配至每一张GPU;这种方案的优势是通信效率较高,劣势是显存开销比较大。
-
限制路由范围:限制每个训练 token 最多只能被调度到 4 台GPU服务器,减少跨节点间的 IB 流量,规避了节点过多时训练 Token 随意路由导致的通信拥塞问题。 -
网络拓扑优化:DeepSeek-V3 的训练集群应该采用了多轨组网方案(其并未正式公布,从其他渠道了解信息猜测得到),确保服务器收发数据时,可以在不同节点的同号卡之间实现最少跳数的互联,所以在数据路由策略上,DeepSeek-V3 会通过IB网络将数据从源端服务器传输至目标服务器相同卡号的GPU上,然后基于 NVLink 转发至托管目标专家的特定GPU,实现高效机内和机间通信,最大化利用高速互联网络带宽。 -
资源分配优化:当期望训练流与通信流同时工作并达到重叠状态时(如二.2所述),就容易出现GPU SM资源(SM即流多处理器,H800有132个SM)的争抢,DeepSeek-V3 通过使用定制化的 PTX(即网络上宣称绕过CUDA的语言),对GPU的132个SM进行了改造,专门划分出20个SM用于处理服务器间通信任务,并根据训练流和通信流的具体特点和需求,对指令执行进行优化,例如分配指令优先级、调整指令执行顺序等,减少 SM 资源分配和 L2 缓存抢占现象的发生。 -
动态资源调整:DeepSeek-V3 采用了自动调整的资源分配策略,能够根据训练流和通信流在不同时刻的资源需求动态地分配 SM 和 L2 缓存资源,系统能够通过为每个专家引入的偏置项,根据每个专家的历史利用率情况,动态地调整其接收新任务的概率,即无辅助损失负载均衡策略。
四、显存优化
4.1 FP8 低精度训练:混合训练框架和精细量化策略
-
分块量化:数据划分粒度相对较细,将数据划分为多个小块,然后对每个小块分别进行量化操作,这种方式能更精细地适应数据的局部特征,减少量化误差。 -
块级量化:数据划分粒度相对较粗,对更大的块进行统一量化处理,这种方式更关注数据的整体特征和分布情况,通过对较大块的数据采用相同的量化参数进行量化,可以简化量化计算过程,降低计算复杂度。 -
高精度累加:在一些关键计算步骤中,虽然中间计算过程使用了 FP8 精度以提高计算效率,但在进行累加等操作时,会将 FP8 数据转换为更高精度的数据类型(BF16/FP32)进行累加,然后再根据需要转换回 FP8 精度进行后续计算,这种机制可以有效控制量化误差的积累。
4.2 选择重计算:间隔重计算和选择性重计算优化
-
间隔重计算:即“隔一层重计算一次” ,在反向传播中对一半层的输入输出进行重计算,另一半层按照传统方式保存中间结果数据。 -
选择性重计算:大模型每一层的计算,通常由类似 RMSkernel 的计算强度较弱的部分(包含平方、求和、开方等计算操作,用于稳定训练过程、加速模型收敛)和计算强度较强的 GEMM 矩阵乘法部分组成,他们虽然都会产生中间结果,但是计算成本差异较大;通常 RMSkernel 的计算时间占比小、但单位计算的显存占用大,而GEMM的计算时间占比大、但单位计算的显存占用小;所以选择性重计算方法重点是针对 RMSkernel 相关的部分算子进行重计算,获得最大的性价比。
4.3 EMA显存优化:异步处理与显存卸载优化
-
异步处理:由于EMA的计算过程并不需要训练过程中实时产生的数据,所以可以独立于前向传播和反向传播而开展,DeepSeek采用异步处理方式,让EMA计算过程与训练过程并行开展。 -
显存卸载:基于上述异步处理的基础,可以将EMA计算从GPU显存卸载至CPU,即在每一轮训练结束后,将模型参数传递给CPU,在 CPU 上计算 EMA 参数,然后将更新后的 EMA 参数存储在 CPU 内存中,减少GPU的显存占用。