跳到主要内容

集体操作

集体操作必须为每个等级(因此是MUSA设备)调用,使用相同的计数和相同的数据类型,以形成一个完整的集体操作。不这样做将导致未定义的行为,包括挂起、崩溃或数据损坏。

AllReduce

AllReduce操作在设备间对数据(例如,求和、最小值、最大值)进行归约,并将结果存储在每个等级的接收缓冲区中。

k个等级之间的求和allreduce操作中,每个等级将提供一个包含N个值的数组,并在包含N个值的数组out中接收相同的结果,其中out[i] = in0[i] + in1[i] + ... + in(k-1)[i]。

All-Reduce操作:每个等级接收跨等级输入值的归约。

相关链接:mcclAllReduce()

Broadcast

广播操作从根等级复制一个N元素缓冲区到所有等级。

广播操作:所有等级从“根”等级接收数据。

重要说明:根参数是等级之一,不是设备编号,因此受到不同的等级到设备映射的影响。

相关链接:mcclBroadcast()

Reduce

归约操作执行与AllReduce相同的操作,但只将结果存储在指定根等级的接收缓冲区中。

归约操作:一个等级接收跨等级输入值的归约。

重要说明:根参数是等级之一(不是设备编号),因此受到不同的等级到设备映射的影响。

注意:归约后跟广播,等同于AllReduce操作。

相关链接:mcclReduce()

AllGather

AllGather 操作从k个等级中收集N个值到大小为k*N的输出缓冲区,并分配该结果到所有等级。

输出按等级索引排序。因此,AllGather操作受到不同的等级到设备映射的影响。

AllGather操作:每个等级按等级顺序接收来自所有等级的数据聚合。

注意:执行ReduceScatter后跟AllGather,等同于AllReduce操作。

相关链接:mcclAllGather()

ReduceScatter

ReduceScatter操作执行与归约相同的操作,但结果在等级之间以等大小的块分散,每个等级根据其等级索引获得一块数据。

由于等级决定数据布局,ReduceScatter操作受到不同的等级到设备映射的影响。

Reduce-Scatter操作:输入值在等级间归约,每个等级接收结果的子部分。

相关链接:mcclReduceScatter()