API介绍

简介

高阶接口NPUDistributedOptimizer可以让用户在不需要感知allreduce的情况下自动完成梯度聚合功能,实现数据并行训练方式。同时为了满足用户灵活的使用方式,提供集合通信原子粒度通信API,可实现数据并行的原生表达。

当前支持allreduce/broadcast/allgather/reduce_scatter/send/receive操作,同时支持自定义参与集合通信的进程组,比如8块昇腾AI处理器,可以按2组,每组4块昇腾AI处理器分别进行集合通信。集合通信提供了常用的rank管理、梯度切分功能、集合通信原型等接口。

接口列表

表1 接口列表

分类

接口

简介

定义文件

rank管理

create_group

创建集合通信group。

${install_path}/python/site-packages/hccl/manage/api.py

destroy_group

销毁集合通信group。

get_rank_size

获取group内rank数量(即Device数量)。

get_local_rank_size

获取group内device所在服务器内的local rank数量。

get_rank_id

获取device在group中对应的rank序号。

get_local_rank_id

获取device在group中对应的local rank序号。

get_world_rank_from_group_rank

从group rank id,获取该进程对应的world rank id。

get_group_rank_from_world_rank

从world rank id,获取该进程在group中的group rank id。

梯度切分

set_split_strategy_by_idx

基于梯度的索引id,在集合通信group内设置反向梯度切分策略。

${install_path}/python/site-packages/hccl/split/api.py

set_split_strategy_by_size

基于梯度数据量百分比,在集合通信group内设置反向梯度切分策略。

集合通信算子

allreduce

提供group内的集合通信allreduce功能,对所有节点的同名张量进行约减。

${install_path}/python/site-packages/npu_bridge/hccl/hccl_ops.py

allgather

提供group内的集合通信allgather功能,将所有节点的输入Tensor合并起来。

broadcast

提供group内的集合通信broadcast功能,将root节点的数据广播到其他rank。

reduce_scatter

提供group内的集合通信reducescatter功能。

send

提供group内点对点通信发送数据的send功能。

receive

提供group内点对点通信发送数据的receive功能。

reduce

提供group内的集合通信reduce功能,对所有节点的同名张量进行规约,并将数据输出至root节点。

具体请参考集合通信接口参考

相关概念

表2 相关概念

概念

介绍

ranktable文件

ranktable文件,用于描述参与集合通信的集群信息,包括Server,Device,容器等的组织信息。

rank

rank,指参与集合通信的进程。

group

group,指参与集合通信的进程组,包括:

  • hccl world group:默认的全局group,包含所有参与集合通信的rank,通过ranktable文件创建。
  • 自定义group:hccl world group包含的进程组的子集,可以通过create_group接口将ranktable中的rank定义成不同的group,并行执行集合通信算法。

rank size

  • rank size,指整个group的rank数量,最大值为4096。
  • local rank size,指group内进程在其所在Server内的rank数量,范围:1/2/4/8。

rank id

  • rank id,指进程在group中对应的rank标识序号。范围:0~(rank size-1)。对于用户自定义group,rank在本group内从0开始进行重排;对于hccl world group,rank id和world rank id相同。
  • world rank id,指进程在hccl world group中对应的rank标识序号,范围:0~(rank size-1)。
  • local rank id,指group内进程在其所在Server内的rank编号,范围:0~(local rank size-1)。

梯度切分

在训练神经网络的反向计算阶段,将GE优化计算图中多个参数的allreduce融合分段。按梯度产生顺序,逐段进行allreduce更新网络反向计算参数,实现计算资源优化及通信时间与反向计算时间的并行优化。