Zhangzhe's Blog

The projection of my life.

0%

2025.02 DeepSeek 开源周第四弹 —— DualPipe & EPLB

URL

TL;DR

  • DualPipedeepseek 提出的一种 流水线并行算法,和之间读过的 GPipePipeDream 类似,但 DualPipe 的硬件利用率更高,空泡更少
  • DPLB (Expert Parallelism Load Balancer) 是一种 专家并行负载均衡算法

Algorithm

DualPipe

  • DualPipe 的计算过程
    dualpipe.png
  • DualPipe-v 的计算过程
    dualpipev.png

上图是民间自己二创的 dualpipe-v 的计算过程,将 dualpipe 对半切开后效果更好,博客地址

DualPipe 核心特点

  1. 计算与通信重叠DualPipe 的设计目标是最大化集群设备的计算性能,通过在ForwardBackward 阶段实现计算与通信的完全重叠,显著减少传统流水线并行中的 “空泡”(Pipeline Bubble,即空闲等待时间)。这对于需要跨节点协作的专家并行(Expert Parallelism)场景尤为重要。
  2. 双向调度:与传统的单向流水线并行不同,DualPipe 采用双向调度策略,从流水线的两端同时输入微批次(Micro-batches),充分利用硬件资源。这种方法在保持计算通信比例恒定的情况下,即使模型规模进一步扩大,也能维持接近零的通信开销。
  3. 高效扩展性DualPipe 针对跨节点的混合专家模型(MoE)进行了优化,通过减少通信瓶颈,使得大规模分布式训练能够在相对有限的硬件资源(如 H800 GPU)上高效运行。
  4. 显存优化DualPipe 将模型的最浅层(包括嵌入层)和最深层(包括输出层)部署在同一流水线级别(PP Rank),实现参数和梯度的物理共享,进一步提升内存效率。这种设计减少了高代价的张量并行(Tensor Parallelism)需求。

EPLB

  • EPLB (Expert Parallelism Load Balancer) 是一种专家并行负载均衡算法,旨在解决专家并行中的负载不均问题
  • 很简单,仅有 160python 代码
  • 核心思想是预估每个专家的负载,并根据负载设置专家拷贝和放置计划

Thoughts

  • DualPipe 实际上是 deepseek 根据 profile-data 分析空泡后做的一种流水线并行算法,而且用其强大的工程能力实现了 SMs 通信耗时降低(实际上就是用 PTX 编程把一部分 SM 当做是全职的数据搬运工),这太 crazy
  • Transformer 是一种重 IO 轻计算的架构,在 Hopper 硬件架构上,不改变 SM 是不可能做到通信和计算完全重叠的,所以 deepseek 做了非常底层的优化
  • EPLB 作为一种专家并行负载均衡算法,虽然简单,但在实际应用中可以显著提升专家并行的效率