URL
- DualPipe code: https://github.com/deepseek-ai/DualPipe
- EPLB code: https://github.com/deepseek-ai/EPLB
TL;DR
DualPipe是deepseek提出的一种 流水线并行算法,和之间读过的 GPipe 和 PipeDream 类似,但DualPipe的硬件利用率更高,空泡更少DPLB (Expert Parallelism Load Balancer)是一种 专家并行负载均衡算法
Algorithm
DualPipe
DualPipe的计算过程

DualPipe-v的计算过程

上图是民间自己二创的 dualpipe-v 的计算过程,将 dualpipe 对半切开后效果更好,博客地址
DualPipe 核心特点
- 计算与通信重叠:
DualPipe的设计目标是最大化集群设备的计算性能,通过在Forward和Backward阶段实现计算与通信的完全重叠,显著减少传统流水线并行中的 “空泡”(Pipeline Bubble,即空闲等待时间)。这对于需要跨节点协作的专家并行(Expert Parallelism)场景尤为重要。 - 双向调度:与传统的单向流水线并行不同,
DualPipe采用双向调度策略,从流水线的两端同时输入微批次(Micro-batches),充分利用硬件资源。这种方法在保持计算通信比例恒定的情况下,即使模型规模进一步扩大,也能维持接近零的通信开销。 - 高效扩展性:
DualPipe针对跨节点的混合专家模型(MoE)进行了优化,通过减少通信瓶颈,使得大规模分布式训练能够在相对有限的硬件资源(如H800 GPU)上高效运行。 - 显存优化:
DualPipe将模型的最浅层(包括嵌入层)和最深层(包括输出层)部署在同一流水线级别(PP Rank),实现参数和梯度的物理共享,进一步提升内存效率。这种设计减少了高代价的张量并行(Tensor Parallelism)需求。
EPLB
EPLB (Expert Parallelism Load Balancer)是一种专家并行负载均衡算法,旨在解决专家并行中的负载不均问题- 很简单,仅有
160行python代码 - 核心思想是预估每个专家的负载,并根据负载设置专家拷贝和放置计划
Thoughts
DualPipe实际上是deepseek根据profile-data分析空泡后做的一种流水线并行算法,而且用其强大的工程能力实现了SMs通信耗时降低(实际上就是用PTX编程把一部分SM当做是全职的数据搬运工),这太crazy了Transformer是一种重IO轻计算的架构,在Hopper硬件架构上,不改变SM是不可能做到通信和计算完全重叠的,所以deepseek做了非常底层的优化EPLB作为一种专家并行负载均衡算法,虽然简单,但在实际应用中可以显著提升专家并行的效率