大数跨境
0
0

DeepSeek-R1模型架构深度解读(五)弄懂DualPipe

DeepSeek-R1模型架构深度解读(五)弄懂DualPipe AI算法之道
2025-02-11
2
导读:DeepSeek-R1 模型关键组件DualPipe技术讲解
点击蓝字
 
关注我们










01


引言



本文是深入探讨 DeepSeek-R1 模型架构的第五篇文章。本系列中我们将逐渐揭开DeepSeek系列模型的神秘面纱!


在前面几篇博客中,我分别介绍了混合专家模型(MoE)和多头潜在注意力(MLA)。其中MOE结构通过减少每个Token的激活参数,大幅降低了训练成本,例如 DeepSeek-V3-671B 的激活参数数为 37B。MLA 则将 KV 缓存大小减少了 93.3%(与原始多头注意力相比),并将推理速度提高了数倍。


本文将重点介绍 DualPipe 部分,它可以让 DeepSeek 在训练过程中提高 GPU 集群的计算通信比和效率。

闲话少说,我们直接开始吧!







02


训练过程中的前向传播和反向传播

在深度学习中,前向传播和反向传播是训练神经网络的两个主要步骤。在前向传播阶段,输入数据逐层通过网络,每一层进行变换处理后产生输出。在反向传播阶段,首先通过损失函数(如交叉熵、均方误差等)计算损失值;随后利用反向传播算法,通过微分的链式法则逐层计算损失相对于各层权重的梯度,并将梯度从输出层向输入层反向传递;最后使用优化算法(如Adam)根据计算得到的梯度更新网络权重参数。

在进入下一部分之前,我们应该知道一些基础知识:

  • 对于单个输入样本,反向计算发生在前向计算之后。
  • 具体而言:在前向传播阶段,数据流向遵循从低层到高层的顺序——即先由第N层处理样本,然后将结果传递至第N+1层;而在反向传播阶段,梯度传递方向正好相反——首先由第N+1层计算梯度,再将梯度回传给第N层。
  • 实际训练中通常采用批处理方式:将一批样本同时输入神经网络,完成整批数据的前向传播和反向传播后,统一对网络权重进行一次更新。






03


大规模分布式训练面临的挑战

当模型规模较小且能够放入单个GPU内存时,训练过程相对简单高效:输入样本、前向计算、反向计算等步骤,可以充分调用GPU的计算资源。为了通过更多数据加速中小型模型的训练,可以采用数据并行技术(如 PyTorch Distributed - 2020 Meta AI)。该技术将整个模型复制到多个计算资源(如多个GPU),各GPU独立生成梯度,然后在每次迭代时通过通信同步梯度以保持模型副本的一致性。

当面对参数量达千亿级别的大型语言模型(如LLM)时,单个GPU无法容纳整个模型,此时需要将模型分割并分配到由数百或数千个GPU组成的集群中(例如GPT-3的1750亿参数模型需在10,000块A100 GPU上训练),这种技术称为模型并行具体实现中,模型可以按层划分(例如GPT-3的96层结构),将不同层分配到不同GPU。若单层仍超出单个GPU内存容量(训练时参数、优化器状态和梯度均需内存),可进一步将该层的张量拆分到多个专用GPU上。例如,混合专家(Mixture-of-Experts)系统将前馈层划分为独立部分,可以将这些专家模块分布在不同GPU上而注意力层的多头机制(如GPT-3的96个注意力头)也可拆分到不同GPU执行矩阵乘法。此外,模型并行的细粒度还可延伸至张量级别。

数据并行与模型并行并非互斥,两者可结合使用以加速大规模模型训练。通过对模型进行分区来应用模型并行后,模型的一个分区可以复制并分布到多个 GPU 上,从而应用数据并行。

到目前为止,一切看起来都还好吧?现在让我们来谈谈大规模分布式训练所面临的挑战。当模型和计算分布在成百上千个 GPU 上之后,如何充分利用这些大规模计算资源是一个巨大的挑战(还有其他挑战,比如如果一台机器在训练过程中崩溃了怎么办,因为单个集群中有成千上万个节点,节点崩溃的概率比小型集群要高,如何从检查点恢复这一部分,比如从闲置的资源池中添加一个新的 GPU等)。在本文中,我们将重点讨论如何充分利用资源。正如我在上一节中所描述的,前向计算和反向计算之间存在依赖关系,各层计算之间也存在依赖关系,模型已被划分到不同的节点上。需要跨节点进行数据传输和通信。一些节点可能处于空闲状态,这是因为其他节点的计算结果仍在进行中;梯度、一层的输出和其他数据可能需要从一个节点传输到另一个节点,这可能会遇到网络带宽瓶颈,导致一些节点空闲。可能有些步骤(如优化器步骤)需要同步,也会导致某些节点闲置。





04


Zero Bubble Pipeline Parallelism

在深度神经网络训练过程中,为充分挖掘集群算力,业界引入了多种流水线并行技术。其中,PipeDream: Fast and Efficient Pipeline Parallel DNN Training — 2018 (Microsoft, CMU, Stanford) 这篇论文提出了一前向一反向(1F1B)调度策略,通过流水线化实现通信与计算的重叠,从而提升集群GPU利用率。下图中的数字1、2、3、4代表不同小批量训练数据。

Zero Bubble Pipeline Parallelism — 2023 Sea AI 在论文中指出,反向传播计算实际上包含两个组成部分:计算输入x的梯度(B)和计算层参数W的梯度(W)。传统的1F1B策略将B和W合并视为单一计算单元B,但这种做法不必要地增加了顺序依赖的计算步骤。因此,Zero Bubble流水线并行创新地将B和W拆分到不同的流水线阶段,从而有效减少流水线中的空闲空隙。同时,该技术将先前的同步操作替换为更新后验证机制,进一步优化了参数更新阶段的处理效率(如下方示意图底部所示),显著减少了优化器步骤中的空闲时间。






05


DeepSeek中的DualPipe

Multi-Token Prediction技术代表了大型语言模型(LLMs)训练领域的重大进步,显著提升了学习效率、生成性能和推理速度。通过让模型同时预测多个未来token,该方法增强了模型捕捉上下文依赖和生成连贯文本的能力,尤其在大规模模型和复杂任务中表现突出。

DeepSeek(从V3版本开始)引入了DualPipe调度机制,其核心思路与Zero Bubble流水线调度相似,但通过若干改进进一步提升了计算通信比和效率:
  • 细粒度阶段:将每个计算块分为四个组件分别为注意力模块(Attention)、全对全分发模块(处理设备间通信)、多层感知机(MLP)、全对全聚合模块(跨设备输出合并)。对于反向传播块,注意力模块和MLP模块会像Zero Bubble一样进一步拆分为两部分:输入反向传播(B)和权重反向传播(W)。

  • 双向流水线调度:通过同时从流水线两端输入小批次数据,使大部分通信操作能够完全重叠(如下图所示的两个黑色箭头)。为实现这一机制,DualPipe需要维护两份模型参数副本。举例说明:当使用8台设备运行8层模型时:Zero Bubble调度中,每台设备持有对应单层参数(如设备0持有第0层);而DualPipe调度中,为支持双向流水线:设备0需同时持有第0层和第7层参数,设备7需同时持有第7层和第0层参数;这种设计通过参数镜像和双向数据流动,显著提升了硬件利用率与训练效率。

为确保DualPipe具备足够的计算性能,DeepSeek还专门定制了高效的跨节点全通信内核(包括调度和组合模块),以节省专用于通信的流式多处理器(SM)数量。更多技术细节请参阅DeepSeek-V3技术报告。




06


小结

创新的DualPipe调度机制,加上卓越的基础设施层工程优化,使得DeepSeek能够充分利用集群的计算资源(GPU)。从这部分设计中,可以看出该团队的技术智慧与卓越工程能力。这种精益求精的工程精神,可能部分源于其相较于OpenAI、Meta、Google等大型语言模型研发机构的资源有限性,从而促使他们在系统优化方面进行更深层次的创新。

希望通过本文可以帮助大家了解DualPipe调度机制!

最后由于边学习边总结,如若本文有错误,欢迎大家留言指正!


欢迎大家持续关注!

一起学习,共同进步!!!

参考:

DeepSeekMoE: https://arxiv.org/pdf/2401.06066

DeepSeekV2:   https://arxiv.org/abs/2405.04434

DeepSeekV3:   https://arxiv.org/abs/2412.19437

DeepSeekR1:   https://arxiv.org/abs/2501.12948

Meata MTP:     https://arxiv.org/pdf/2404.19737





点击上方小卡片关注我




添加个人微信,进专属粉丝群!


【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读23
粉丝0
内容573