[object Object]
相比于一般的计算或搬运类算子,通算融合算子将原本串行的通信和计算操作融合在一起,通过在算子内部进行数据切分,实现了计算和通信任务在算子内的并行执行,从而提升算子性能。通算融合算子统称为MC²算子,即Matrix Computation & Communication。
如下图所示,串行的通信算子和计算算子的理想执行耗时为两个算子执行时间的加和,而在融合通信和计算任务得到的通算融合算子内,将需要通信和计算的数据进行切分,一次通信和计算的数据量减少,整个通信和计算任务分多次进行,使得计算与通信流水并行,理论执行耗时大大缩短,从而带来性能收益。
图 1 通信计算融合前后的理论执行耗时对比示意图[object Object][object Object]
随着模型规模的增长,单设备上的训练和推理在计算能力、内存容量和能效等方面面临瓶颈,因此分布式并行计算成为必选技术路径。对于大模型分布式训练和推理过程中的通信和计算任务,可根据通信和计算的依赖关系分为两类:
弱依赖计算通信任务
通信或计算的结果不会立即被对方使用,两者虽有依赖,但在两者中间可以调度执行其他无依赖的计算或通信任务。如所示,通信1与计算1-2、计算4有依赖关系,通信1与计算1-1、计算2-1、计算2-2、计算3无依赖关系;通信2与计算2-2、计算4有依赖关系,通信2与计算2-1、计算3无依赖关系。因此,通信1和通信2都有较大的流水空间,可以被与它们无依赖的计算任务所掩盖。如所示,通信1和通信2均可以被无依赖的计算任务掩盖。在模型中,此类无依赖的通信和计算可以实现任务级并行,无需做算子融合。因此,弱依赖计算通信任务不适用通算融合场景。
图 2 弱依赖计算通信任务示意图[object Object][object Object]
图 3 弱依赖计算通信任务的调度模拟示意图[object Object][object Object]
强依赖计算通信任务
通信或计算的结果立即被对方使用,两者间存在紧密依赖关系。如下图所示,计算通信任务必须串行执行,在通信1和通信2执行过程中,硬件计算资源闲置,此类通信计算模式若在模型中大量出现,将导致算力利用率低,通信成为主要性能瓶颈。强依赖计算通信任务适合融合为通算融合算子,利用通算融合技术提升性能。
图 4 强依赖计算通信任务示意图[object Object][object Object]
图 5 强依赖计算通信任务的调度模拟示意图[object Object][object Object]
通算融合技术与网络模型结构密切相关,一般而言,符合上述强依赖计算通信任务都有可能通过通算融合算子实现性能提升。