MLP通信隐藏

背景与挑战

大模型训练过程中,通信和计算往往存在依赖关系,这样的串行执行顺序会造成计算和通信流存在一定程度的空闲等待时间,导致执行效率较低。

解决方案

对通信和计算算子做更为细粒度的切分,保证细粒度间的计算和通信任务不存在依赖关系,创造可并行执行任务的前提。

再对算子调度/执行序进行编排,实现计算和通信的并行执行,在计算过程能掩盖中间部分的通信过程。

图1 MLP与通信的掩盖

使用场景

在local_experts大于等于2时,可以考虑使用专家间的计算通信流水实现通信隐藏的目的。

在local_experts等于1时,即ep = num_expert时,可以考虑使用多副本间的计算通信流水实现通信隐藏的目的。

可开启多流水线--pipe-experts-multi-stream规避集合通信上出现的链路冲突。

使用方法

启用该特性时需注意以下几点:

需要在保证开启了--moe-model-type deepspeed_moe的前提下,开启--use-pipe-experts才会生效。 进一步,可以在--use-pipe-experts的前提下,单独或同时设置--pipe-experts-multi-stream和--pipe-experts-multi-data N来叠加使用“多流水线”和“多副本”的特性。

使用效果

使用该特性,通过减少通信时间,提高设备利用效率,可总体获得5%-6% 的计算效率提升。