开发者
下载
[object Object]

本节以AllReduce算子为例,介绍其在单算子执行模式下的使用方式,帮助用户快速体验集合通信功能。

[object Object]

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

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

[object Object]

用户可以点击获取完整样例代码,该样例基于root节点信息创建通信域,在一个进程中管理一个AI Server,其中每个NPU设备由一个线程进行管理,主要包含以下功能点:

  • 设备检测,通过aclrtGetDeviceCount( )接口查询可用设备数量。

  • 将rank0作为root节点,通过HcclGetRootInfo( )接口生成root节点的rootInfo标识信息。

  • 基于rootInfo,在每个线程中通过HcclCommInitRootInfo( )接口初始化通信域。

  • 调用HcclAllReduce( ) 接口,将通信域内所有rank的输入数据进行相加后,再把结果发送到所有节点,并打印结果。

[object Object]

在本样例代码目录下执行如下命令:

[object Object]
[object Object]

每个rank的数据初始化为0~7,经过AllReduce操作后,每个rank的结果是所有rank对应位置数据的和(8个rank的数据相加)。

[object Object]
[object Object]
  1. 将rank0作为root节点,生成rootInfo标识信息,主要包含:Device IP、Device ID等信息。此信息需广播至集群内所有rank用来初始化通信域。

    [object Object]
  2. 申请内存,构造输入数据。

    [object Object]
  3. 初始化通信域。

    [object Object]
  4. 执行AllReduce集合通信算子。

    [object Object]
  5. 释放资源。

    [object Object]