Background
公元2025年2月27号,DeepSeek公司开源周第四天,开源了DualPipe和EPLB两项技术。两者的分别是"流水双向并行算法"和"专家并行负载均衡器",两者的目标其实只有一个,就是提升大模型跨GPU训练的效率。
“不是是什么而是为什么”,为什么模型训练需要跨GPU,显而易见有以下两点原因:
- 大模型过大,一个GPU的显存放不下(Deepseek模型本地部署的显存就需要536GB, 而英伟达的A100的显存也只有80GB)
- 训练数据过多,单线计算效率太低
所以跨GPU训练就成为必然的趋势,为了充分利用硬件资源,自然会想到并行。从问题出发自然会想到可以将数据集/模型进行拆分之后给到不同的GPU训练,这就自然引入了两种常用的并行方式——数据并行,流水并行。除此之外,基于深度神经网络中基本计算都是可拆解的矩阵乘法的性质,还有模型并行
- 数据并行(Data Parallelism, DP): 在不同的GPU上运行同一批数据的不同子集
- 流水并行(Pipeline Parallelism, PP): 在不同的GPU上运行模型的不同层
- 模型/张量并行(Tensor Parallelism, TP): 包含张量并行,将单个数学运算(如矩阵乘法)拆分到不同的GPU上运行
- 专家并行(Expert Parallelism, EP): 基于Moe的特殊策略
- 混合并行: 结合上述两个及以上,实际运用中最多也最有效
而Deepseek采用的正是一种混合并行的策略,DualPipe与EPLB则分别是对其中的 数据+流水并行 和 专家并行 做了优化,从而提高了模型的训练效率。
DualPipe
流水并行优化
-
无并行 Naive
- 如前所述,流水并行涉及到将模型的层次(这其实得益于Transformer结构层与层之间相对独立)拆解开,分到多个GPU上进行训练。最简单的版本,就像这样,三个GPU分别负责一个三层模型的每一层,前向传播算完了就交给下一层,然后得到Loss之后在逐层反向传播回来
但显而易见,同一时间中只有一个GPu在干活,大量的计算资源都浪费了(灰色部分),GPU等待的这部分也被称为气泡或死区
-
Gpipe
- 看到这个阶梯图,不难想到CPU的取址-译码-计算-访存-写回,自然就会将一次传入的数据进行划分,变成流水线执行
能明显地看到,气泡的占比小了很多
-
1F1B
- 它的全称即One Forward One Backward,这也是相对于之前的F-then-B来的,即在前向传播没有完的时候便开始一些块的反向传播,具体是算好一个反向一个
相比于Gpipe,其实气泡并没有减少,但是核心在于GPU需要存储的中间量变少了,因为F-then-B的过程中,每个GPU都需要保留之前所有前向传播的中间量,但是1F1B则可以在反向传播之后就可以把之前的结果释放掉了
-
PipeDream
- 与Gpipe的F-then-B + 同步后向更新相比,PipeDream采用了异步后向更新 + 1F1B的策略,同时在反向的气泡中同样继续填充了正向过程
- 与Gpipe的F-then-B + 同步后向更新相比,PipeDream采用了异步后向更新 + 1F1B的策略,同时在反向的气泡中同样继续填充了正向过程
-
DualPipe
- DualPipe的双向,来自于神经网络与CPU过程中的本质不同,因为Transformer各层结构相同,也就是说将模型倒过来也是一样的运行,所以两端可以同时正反向。简单来说,之前是一个W模型,而现在则在M的基础上叠加了W,从而进一步降低了气泡率
基于Deepseek的结果,相比于1F1B,DualPipe的气泡占比下降了50%
数据并行优化
数据并行,一种经典的方式,是有一个统一的数据派发/收集方,向各个GPU派发数据,然后收集反向传播结果实现更新;而这种方式通讯开销过大,所以更多的模型采用的是All-to-All的数据收发,也就是每个GPU前向反向一轮之后,将更新结果传递给同层的所有GPU。在此基础上,异步的接收和合并也是这里Deepseek采用的方式
所以,这里计算单元就要负责计算和通信两件事,而Deepseek采用了一种比较精妙的结构实现了两者的并行
注:对于MLP和ATTN两个块的反向计算更新,他拆分成输入更新(绿)和权重更新(蓝)两个部分;DISPATCH和COMBINE是层内通行,PP则是跨层通信(流水并行部分)
EPLB (Expert Parallelism Load Balancer)
专家并行优化
- 核心问题:Moe策略中每次会从256个专家中选出8个(许多个token通过矩阵运算同时进行),但是不同专家的热度不同,如果平均分配的话,会出现忙的忙死,闲的闲死的状态,使得计算资源没能得到充分应用
- 解决方法:
- 最主要的一点,即是根据专家的热度(权重由向专家dispatch的量来决定),weight高的专家复制多份,相反的则之拷贝一份
- 除此之外,EPLB还对专家进行了分组,然后分配到具体的GPU硬件设备上,使得每个GPU对应的专家权重基本相同,保证均很效率
TODO
- PP 中的异步后向更新
- DP 中的分发和合并机制
- EP 中的分层结构与weight计算
To be continue…