一、模型架构
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(计算流):计算损失函数对注意力权重的梯度,通过更新注意力权重捕捉数据中的依赖关系和重要信息。