将多个通信卡上的数据进行计算,支持相加、取最大、最小、相乘四种计算,然后发送到每张卡上。
该算子涉及多卡相关操作,可根据实际需求配置HCCL相关环境变量,具体请参见《CANN 环境变量参考》中的“集合通信”章节。
多对多。在所有节点上都执行相同的Reduce操作(相加、取最大、最小、相乘),将所有节点的数据规约运算得到的结果发送到所有的节点上(broadcast)。
应用场景:
使用示例:
x=[-4,-50] output=[-8,-100]
npu1:
x=[-4,-50] output=[-8,-100]
x=[4,20] output=[10,50]
npu1:
x=[10,50] output=[10,50]
x=[3,100] output=[3,20]
npu1:
x=[3,20] output=[3,20]
x=[-93,-48] output=[8649,2304]
npu1:
x=[-93,-48] output=[8649,2304]
x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] scale=[1] offset=[0] output=[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]
x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] scale=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] offset=[0] output=[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32]
struct AllReduceParam { enum QuantType : int { QUANT_TYPE_UNDEFINED = 0, QUANT_TYPE_PER_TENSOR = 1, QUANT_TYPE_PER_CHANNEL = 2, QUANT_TYPE_MAX = 3, }; 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; QuantType quantType = QUANT_TYPE_UNDEFINED; aclDataType outDataType = ACL_DT_UNDEFINED; };
成员名称 |
类型 |
默认值 |
描述 |
---|---|---|---|
rank |
int |
0 |
当前卡所属通信编号。 |
rankSize |
int |
0 |
通信的卡的数量。 |
rankRoot |
int |
0 |
主通信编号。 |
allReduceType |
string |
"sum" |
通信计算类型。 支持“sum”(相加),“prod”(相乘),“max”(取最大)和“min”(取最小)。 |
backend |
string |
"hccl" |
通信计算类型,仅支持“hccl”和“lccl”。
|
hcclComm |
HcclComm |
nullptr |
HCCL通信域指针。 默认为空,加速库为用户创建;若用户想要自己管理通信域,则需要传入该通信域指针,加速库使用传入的通信域指针来执行通信算子。 |
commMode |
CommMode |
COMM_MULTI_PROCESS |
通信模式,CommMode类型枚举值。hccl多线程仅支持外部传入通信域方式。 |
rankTableFile |
string |
- |
集群信息的配置文件路径,用于单机以及多机通信场景,当前仅支持HCCL后端场景。 若单机配置了ranktable,则以ranktable来初始化通信域。 配置请参见《TensorFlow 1.15模型迁移指南》的“准备ranktable资源配置文件”。 |
commDomain |
string |
- |
通信Device组用通信域名标识,多通信域时使用,当前仅支持“hccl”。 |
quantType |
QuantType |
QUANT_TYPE_UNDEFINED |
量化类型。 QUANT_TYPE_UNDEFINED:默认值。 QUANT_TYPE_PER_TENSOR:对整个张量进行量化。 QUANT_TYPE_PER_CHANNEL:对张量中每个channel分别进行量化。 QUANT_TYPE_MAX:枚举类型最大值。 |
outDataType |
aclDataType |
ACL_DT_UNDEFINED |
|
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
[dim_0,dim_1,... ,dim_n] |
|
ND |
输入tensor。 |
output |
[dim_0,dim_1,... ,dim_n] |
|
ND |
输出tensor。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
[dim_0,dim_1,... ,dim_n] |
int8 |
ND |
输入tensor,最后一维n的大小是16的整数倍。 |
scale |
[1] |
float16 |
ND |
输入。scale中元素要求为标量。 |
offset |
[1] |
float16 |
ND |
输入。offset中元素要求为标量。 |
y |
[dim_0,dim_1,... ,dim_n] |
float16 |
ND |
量化输出结果;x和y的shape一致。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
[dim_0,dim_1,... ,dim_n] |
int8 |
ND |
输入tensor,最后一维n的大小是16的整数倍。 |
scale |
[1, n] 或 [n] |
float16 |
ND |
输入。scale中元素要求不为0。最后一维n的大小是16的整数倍。 |
offset |
[1] |
float16 |
ND |
输入。offset中元素要求为标量。 |
y |
[dim_0,dim_1,... ,dim_n] |
float16 |
ND |
量化输出结果;x和y的shape一致。 |
rank、rankSize、rankRoot需满足以下条件。
rm -rf /dev/shm/sem.lccl* rm -rf /dev/shm/sem.hccl* ipcrm -a