本节以AllReduce算子为例,介绍其在单算子执行模式下的使用方式,帮助用户快速体验集合通信功能。
AllReduce操作是将通信域内所有节点的输入数据进行归约操作后(支持sum、prod、max、min),再把结果发送到所有节点的输出buffer。
注意:每个rank只能有一个输入。
用户可以点击获取完整样例代码,该样例基于root节点信息创建通信域,在一个进程中管理一个AI Server,其中每个NPU设备由一个线程进行管理,主要包含以下功能点:
设备检测,通过aclrtGetDeviceCount( )接口查询可用设备数量。
将rank0作为root节点,通过HcclGetRootInfo( )接口生成root节点的rootInfo标识信息。
基于rootInfo,在每个线程中通过HcclCommInitRootInfo( )接口初始化通信域。
调用HcclAllReduce( ) 接口,将通信域内所有rank的输入数据进行相加后,再把结果发送到所有节点,并打印结果。
在本样例代码目录下执行如下命令:
[object Object]
每个rank的数据初始化为0~7,经过AllReduce操作后,每个rank的结果是所有rank对应位置数据的和(8个rank的数据相加)。
[object Object]
将rank0作为root节点,生成rootInfo标识信息,主要包含:Device IP、Device ID等信息。此信息需广播至集群内所有rank用来初始化通信域。
[object Object]申请内存,构造输入数据。
[object Object]初始化通信域。
[object Object]执行AllReduce集合通信算子。
[object Object]释放资源。
[object Object]