背景
在分布式集群上执行大模型任务时候,往往使用到数据并行,流水线并行,张量并行等技术,这些技术本质上也就是对数据进行各种方案的切分,然后放到不同的节点上运算。不同节点在计算的过程中需要对数据分发或者同步等操作的通信,本文将通过图解的方式,帮助快速区分并理解不同的通信原语所代表的含义。
通信原语集合
broadcast
在并行计算领域,广播(Broadcast)用于将数据从一个进程或节点发送到所有其他进程或节点。通常由一个源进程或节点发送数据,然后所有其他进程或节点都接收相同的数据。
用途:广播通常用于在并行计算中将全局数据分发给所有参与者,以便它们可以共享相同的信息
scatter
在并行计算领域,分散(scatter)用于将数据从一个进程或节点发送到多个进程或节点。通常由一个源进程或节点发送数据,然后所有其他进程或节点都接收部分数据。
用途:分散通常用于将全局数据分配给各个参与者,以便它们可以分别处理自己的部分数据。
gather
在并行计算领域,收集(gather)用于将来自多个进程或节点的数据收集到单个进程或节点中。结果是将来自各个进程或节点的数据聚合到一个目标进程或节点中。
用途:收集通常用于在并行计算中汇总数据,进行统计分析或在单个节点上进行处理。
all-gather
在并行计算领域,全收集(all-gather)类似于收集操作,但不同之处在于它将来自所有进程或节点的数据收集到所有其他进程或节点中,而不仅仅是一个目标进程或节点。
用途:全收集通常用于在分布式计算中共享数据,进行全局汇总或进行全局同步。
reduce
在并行计算领域,归约(reduce)用于将来自多个进程或节点的数据合并成单个值。通常由一个目标进程或节点执行归约操作,并将来自其他进程或节点的数据聚合成一个结果。
用途:归约通常用于在并行计算中汇总数据,计算全局统计量或合并各个部分的计算结果。
all-reduce
在并行计算领域,全归约(all-reduce)类似于归约操作,但不同之处在于它将来自所有进程或节点的数据合并成单个值,并将结果分发给所有其他进程或节点。
用途:全归约通常用于在分布式计算中计算全局统计量,合并全局计算结果或进行全局同步。
reduce-scatter
在并行计算领域,归约-分散(reduce-scatter)结合了归约和分散操作。它首先将来自多个进程或节点的数据归约成单个值,然后将结果分散到所有进程或节点中。
用途:归约-分散通常用于将全局计算结果分发给各个参与者,以便它们可以在本地处理部分结果。
all-all
在并行计算领域,全-全(all-all)它在所有进程或节点之间进行全局数据交换。每个进程或节点都向所有其他进程或节点发送数据,并接收来自所有其他进程或节点的数据。
用途:全-全通常用于实现全局同步、全局数据交换或分布式计算中的其他全局操作。