集合通信原语

参考: 集合通信原语-HCCL集合通信库-CANN商用版8.2.RC1开发文档-昇腾社区

集合通信是一个进程组的所有进程都参与的全局通信操作,其最为基础的操作有发送、接收、复制、节点间进程同步等,这些基本的操作经过组合构成了一组通信模板,也称为通信原语,这些通信原语通过相应的集合通信算子实现。

1. Broadcast

Broadcast操作是将通信域内root节点的数据广播到其他rank。 注意:通信域内只能有一个root节点。

2. Scatter

Scatter操作是将通信域内root节点的数据均分并散布至其他rank。

注意:通信域内只能有一个root节点。

3. Reduce

Reduce操作是将通信域内所有rank的输入数据进行归约操作后(支持sum、prod、max、min),再把结果发送到root节点的输出buffer。

注意:通信域内只能有一个root节点。

4. AllGather

AllGather操作是将通信域内所有节点的输入按照rank id重新排序(rank id按照从小到大的顺序排序),然后拼接起来,再将结果发送到所有节点的输出buffer。

针对AllGather操作,每个节点都接收按照rank id重新排序后的数据集合,即每个节点的AllGather输出都是一样的。

5. AllGatherV

AllGatherV操作是将通信域内所有节点的输入按照rank id重新排序(rank id按照从小到大的顺序排序),然后拼接起来,再将结果发送到所有节点的输出。与AllGather操作不同的是,AllGatherV操作支持通信域内不同节点的输入配置不同大小的数据量。

针对AllGatherV操作,每个节点都接收按照 rank id重新排序后的数据集合,即每个节点的AllGatherV输出都是一样的。

6. AllReduce

AllReduce操作是将通信域内所有节点的输入数据进行归约操作后(支持sum、prod、max、min),再把结果发送到所有节点的输出buffer。

注意:每个rank只能有一个输入。

7. ReduceScatter

ReduceScatter操作是将通信域内所有rank的输入进行归约操作后(支持sum、prod、max、min),再把结果按照rank编号均匀分散到各个rank的输出buffer,每个进程拿到其他进程1/ranksize份的数据进行归约操作。

如下图所示,有rank0、rank1、rank2、rank3四个rank,每个rank的输入数据切分成4份,每个进程分别取每个rank的1/4份数据进行sum操作(或其他操作),将结果发送到输出buffer。

8. ReduceScatterV

ReduceScatterV操作是将所有rank的输入进行归约操作后(支持sum、prod、max、min),再把结果按照rank编号分散到各个rank的输出buffer,每个进程拿到其他进程对应rank编号的数据进行归约操作。与ReduceScatter操作不同的是,ReduceScatterV操作支持为通信域内不同的节点配置不同大小的数据量。

如下图所示,有rank0、rank1、rank2、rank3四个rank,每个进程分别取其他进程对应rank编号的数据进行sum操作(或其他操作),将结果发送到输出buffer。

9. AlltoAll

AlltoAll操作是向通信域内所有 rank 发送相同数据量的数据,并从所有 rank 接收相同数据量的数据。

AlltoAll操作将输入数据在特定的维度切分成特定的块数,并按顺序发送给其他rank,同时从其他rank接收输入,按顺序在特定的维度拼接数据。

简单来说,每个 rank 上的数据按照特定维度切分成 RankSize 块数据,AlltoAll 执行完之后的结果是: 所有 rank 把自己的的第 idx 块数据发送到 rank-idx的卡上,并在指定维度按照顺序拼接。

9.1. 与其他通信操作的对比

操作 描述 数据流 常见用途
Broadcast 一对多:一个进程将数据复制给所有其他进程。 P0 -> P0, P1, P2... 同步模型初始权重。
All-Reduce 多对多(聚合):所有进程贡献数据,计算出一个结果(如求和/平均),然后所有进程都获得这个最终结果。 P0,P1,P2 -> op() -> P0,P1,P2 数据并行中同步梯度。
All-to-All 多对多(重排) :每个进程向所有进程发送不同的数据块。 P_i -> P_j(for all i, j) MoE Token 路由,矩阵转置。

10. AlltoAllV

AlltoAllV操作是向通信域内所有rank发送数据(数据量可以定制),并从所有rank接收数据。

相关推荐
Charlie_lll6 分钟前
力扣解题-移动零
后端·算法·leetcode
chaser&upper7 分钟前
矩阵革命:在 AtomGit 解码 CANN ops-nn 如何构建 AIGC 的“线性基石”
程序人生·算法
weixin_4997715515 分钟前
C++中的组合模式
开发语言·c++·算法
iAkuya1 小时前
(leetcode)力扣100 62N皇后问题 (普通回溯(使用set存储),位运算回溯)
算法·leetcode·职场和发展
近津薪荼1 小时前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck1 小时前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
松☆1 小时前
CANN与大模型推理:在边缘端高效运行7B参数语言模型的实践指南
人工智能·算法·语言模型
打工的小王1 小时前
Spring Boot(三)Spring Boot整合SpringMVC
java·spring boot·后端
java干货1 小时前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法
皮皮哎哟1 小时前
数据结构:嵌入式常用排序与查找算法精讲
数据结构·算法·排序算法·二分查找·快速排序