昇腾社区首页
中文
注册

AllReduceOperation

功能

将多个通信卡上的数据进行计算,支持相加、取最大、最小、相乘四种计算,然后发送到每张卡上。

该算子涉及多卡相关操作,可根据实际需求配置HCCL相关环境变量,具体请参见《CANN 环境变量参考》中的“集合通信相关配置”章节。配置TLS等相关操作可查看对应设备的《HCCN Tool 接口参考》

约束

rank、rankSize、rankRoot需满足以下条件。

  • 0 ≤ rank < rankSize
  • 0 ≤ rankRoot < rankSize
  • 多用户使用时需要使用ATB_SHARE_MEMORY_NAME_SUFFIX环境变量(请参见Transformer加速库环境变量说明)进行共享内存的区分,以进行初始化信息同步。
  • 当使用加速库的通信算子异常退出时,需要清空残留数据,避免影响之后的使用,命令参考如下:
    rm -rf /dev/shm/sem.lccl*
    rm -rf /dev/shm/sem.hccl*
    ipcrm -a

定义

struct AllReduceParam {
    int rank = 0;
    int rankSize = 0;
    int rankRoot = 0;
    std::string allReduceType = "sum";
    std::string backend = "hccl";
    HcclComm hcclComm = nullptr;
    CommMode commMode = COMM_MULTI_PROCESS;
    std::string rankTableFile;
    std::string commDomain;
};

成员

成员名称

描述

rank

每张卡所属通信编号。

rankSize

通信的卡的数量。

rankRoot

主通信编号。

allReduceType

通信计算类型。

支持“sum”(相加),“prod”(相乘),“max”(取最大)和“min”(取最小)。

backend

通信计算类型,仅支持“hccl”和“lccl”。

Atlas 推理系列产品仅支持backend为"hccl"。

  • “backend”“hccl”
    • 支持"sum","prod","max"和"min"。
    • “allReduceType”为"prod"时,不支持数据类型为int16和bf16。
    • Atlas 推理系列产品不支持int64、bf16,int16只有“allReduceType”为"sum"时支持。
  • “backend”“lccl”
    • 支持"sum","max"和"min"。
    • 不支持数据类型int64。
    • 机器拓扑为Atlas 800I A2推理产品单机16卡机器的拓扑时,只支持16卡全量拓扑通信或单节点内任意卡通信。

hcclComm

HCCL通信域指针。

默认为空,加速库为用户创建;若用户想要自己管理通信域,则需要传入该通信域指针,加速库使用传入的通信域指针来执行通信算子。

commMode

通信模式,CommMode类型枚举值。HCCL多线程仅支持外部传入通信域方式。

rankTableFile

集群信息的配置文件路径,用于单机以及多机通信场景,当前仅支持HCCL后端场景。

若单机配置了rankTable,则以ranktable来初始化通信域。

配置请参见。

commDomain

通信Device组用通信域名标识,多通信域时使用,当前仅支持“hccl”

输入

参数

维度

数据类型

格式

描述

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

  • "hccl": float16/float/int8/int16/int32/int64/bf16
  • "lccl":float16/float/int8/int16/int32/bf16

ND

输入Tensor。

输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

  • "hccl":float16/float/int8/int16/int32/int64/bf16
  • "lccl":float16/float/int8/int16/int32/bf16

ND

输出Tensor。