码力全开 / 分布式并行通信原语简述

Created Sat, 03 Jan 2026 09:51:41 +0800 Modified Sat, 03 Jan 2026 10:54:27 +0800
1001 Words 1 min

在大模型分布式并行计算中主要有如下一些通信的原语:

  • broadcast
  • scatter
  • gather
  • all-gather
  • reduce
  • all-reduce
  • reduce-scatter
  • all-all

其中最简单的就是前三者。broadcast与scatter都是进行分发,而gather是聚合的过程。

Broadcast(广播)用于将数据从1个进程或节点发送到所有其他进程或节点,通常由一个源进程或节点发送数据,然后所有其他进程或节点都接收相同的数据。通常用于并行计算中将全局数据分发给所有参与者,以便它们可以共享相同的信息。

与之类似的是scatter,其用于将数据从一个进程或节点发送到多个进程或节点。通常由一个源进程或节点发送数据,然后所有其他进程或节点都接收部分数据。可以看到,Broadcast中节点接收的是相同的信息,而在scatter中接收的只是部分数据,相当于Broadcast中是数据的复制,而scatter是数据拆分后的分片。

而gather用于将来自多个进程或节点的数据收集到单个进程或节点中,结果是将来自各个进程或节点的数据聚合到一个目标进程或节点中。其可以看成是scatter的反过程。

与之类似的是reduce,其用于将来自多个进程或节点的数据合并成单个值。通常由一个目标进程或节点执行归约操作,将来自其他进程或节点的数据集合成一个结果。可以看到,reduce相当于将gather中的数据合并成一个,而不再是gather中的一列。

下面我们来看all-gather与all-reduce。

all-gather将来自所有进程或节点的数据收集到所有其他进程或节点中,而不仅仅是一个目标进程或节点。其结果可以理解为其在gather基础上叠加broadcast的操作。主要用于分布式计算中共享数据,进行全局汇总或全局同步。

all-reduce将来自所有进程或节点的数据合并成单个值,将结果分发给所有其他进程或节点。其结果可以理解其在reduce基础上叠加broadcast的操作,通常用于分布式计算中计算全局统计量,对全局计算结果进行合并或进行全局同步。

除了以上组合方式外,reduce-scatter结合了归约和分散操作,首先将来自多个进程或节点的数据归约成单个值,然后将结果分散到所有进程或节点中。其主要用于将全局结果分发给各个参与者,以便它们可以在本地处理部分结果。

最后,all-all是在所有进程或节点之间进行全局数据交换,每个进程或节点都向所有其他进程或节点发送数据,并接收来自所有其他进程或节点的数据。

参考文章:

https://blog.csdn.net/u010420283/article/details/139396719

如果喜欢这篇文章或对您有帮助,可以:[☕] 请我喝杯咖啡 | [💓] 小额赞助