概述
TF Adapter提供的分布式优化器NPUDistributedOptimizer和npu_distributed_optimizer_wrapper可以让用户在不需要感知allreduce的情况下自动完成梯度聚合功能,实现数据并行训练方式。但为了能够同时满足用户灵活的使用方式,集合通信库HCCL提供了常用的rank管理、梯度切分功能、集合通信原型等接口。
HCCL为TensorFlow网络提供的Python API如表1所示。
| 分类 | 接口 | 简介 | 定义文件 | 
|---|---|---|---|
| rank管理 | 创建集合通信group。 | ${install_path}/python/site-packages/hccl/manage/api.py | |
| 销毁集合通信group。 | |||
| 获取group内rank数量(即Device数量)。 | |||
| 获取group内device所在服务器内的local rank数量。 | |||
| 获取device在group中对应的rank序号。 | |||
| 获取device在group中对应的local rank序号。 | |||
| 从group rank id,获取该进程对应的world rank id。 | |||
| 从world rank id,获取该进程在group中的group rank id。 | |||
| 梯度切分 | 基于梯度的索引id,在集合通信group内设置反向梯度切分策略。 | ${install_path}/python/site-packages/hccl/split/api.py | |
| 基于梯度数据量百分比,在集合通信group内设置反向梯度切分策略。 | |||
| 集合通信 | 提供group内的集合通信allreduce功能,对所有节点的同名张量进行约减。 | ${install_path}/python/site-packages/npu_bridge/hccl/hccl_ops.py | |
| 提供group内的集合通信allgather功能,将所有节点的输入Tensor合并起来。 | |||
| 提供group内的集合通信broadcast功能,将root节点的数据广播到其他rank。 | |||
| 提供group内的集合通信reducescatter功能。 | |||
| 提供group内点对点通信发送数据的send功能。 | |||
| 提供group内点对点通信发送数据的receive功能。 | |||
| 提供group内的集合通信reduce功能,对所有节点的同名张量进行规约,并将数据输出至root节点。 | |||
| 集合通信域alltoallv操作接口。向通信域内所有rank发送数据(数据量可以定制),并从所有rank接收数据。 | |||
| 集合通信域alltoallvc操作接口。向通信域内所有rank发送数据(数据量可以定制),并从所有rank接收数据。 alltoallvc通过输入参数send_count_matrix传入所有rank的收发参数,与alltoallv相比,性能更优。 |