aclnnQuantReduceScatter
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
说明: 使用该接口时,请确保驱动固件包和CANN包都为配套的8.0.RC2版本或者配套的更高版本,否则将会引发报错,比如BUS ERROR等。
功能说明
-
算子功能:实现quant + reduceScatter融合计算。
-
计算公式:
output=Reduce(AllToAllScales∗AllToAllData)output=Reduce(AllToAllScales * AllToAllData)
AllToAllData=AllToAll(x)AllToAllData=AllToAll(x)
AllToAllScales=AllToAll(scales)AllToAllScales=AllToAll(scales)
其中的Reduce计算是将来自不同rank的数据进行reduce计算。
参数名 输入/输出 描述 使用说明 数据类型 数据格式 维度(shape) 连续Tensor x 输入 公式中的输入x - 不支持空Tensor。
- 支持的shape为:(BS, H)或者(B, S, H)。B为batch size,S为sequence length,H为hidden size。当前版本输入x的H支持1024~8192中任意128对齐泛化。
INT8, HIFLOAT8, FLOAT8_E4M3FN, FLOAT8_E5M2 ND 2-3 √ scales 输入 公式中的输入scales - 不支持空Tensor。
- 当scales的数据类型为FLOAT8_E8M0时,x的数据类型必须为FLOAT8_E4M3FN、FLOAT8_E5M2,x的shape为(BS, H)或者(B, S, H),scales的shape必须对应x的shape为(BS, H/64, 2)或者(B, S, H/64, 2)。
- 当scales的数据类型为FLOAT时,x的数据类型必须为INT8、HIFLOAT8、FLOAT8_E4M3FN、FLOAT8_E5M2,x的shape为(BS, H)或者(B, S, H),scales的shape必须对应x的shape为(BS, H/128)或者(B, S, H/128)。
FLOAT, FLOAT8_E8M0 ND 2-4 √ group 输入 通信域标识 通信域标识 String - - - reduceOp 输入 公式中的reduce操作类型。 当前仅支持"sum" string - - - output 输出 公式中的输出output。 - 不支持空Tensor。
- 当x的shape是(BS,H)的时候,output的shape必须为(BS/rankNum,H); 当x的shape是(B,S,H)的时候,output的shape必须为(B*S/rankNum,H)。rankNum表示通信域大小。
FLOAT、FLOAT16、BFLOAT16 ND 2 √ workspaceSize 输出 返回需要在Device侧申请的workspace大小。 - - - - - executor 输出 返回op执行器,包含了算子计算流程。 - - - - -
约束说明
- 当x的数据类型为FLOAT8_E4M3FN, FLOAT8_E5M2并且scales的数据类型为FLOAT8_E8M0时,输入数据的量化方式为mx量化。
- 当x的数据类型为INT8、HIFLOAT8、FLOAT8_E4M3FN, FLOAT8_E5M2并且scales的数据类型为FLOAT时,输入数据的量化方式为pertoken-pergroup量化(groupSize=128)。
- 只在Ascend950系列平台使能。
- 不支持空tensor输入。
- 通信引擎约束:
- Ascend950PR/Ascend950DT: 仅支持UB-Memory通信。
- 通信域大小支持2、4、8。
- 通信域使用约束:同一通信域内仅允许连续执行
aclnnQuantAllReduce和aclnnQuantReduceScatter算子,且该通信域中不允许有其他通信算子。 HCCL_BUFFSIZE:调用本算子前需检查HCCL_BUFFSIZE环境变量取值是否合理,该环境变量表示单个通信域占用内存大小,单位MB,不配置时默认为200MB。要求满足HCCL_BUFFSIZE>= 2 * (xDataSize+scalesDataSize + 1)。其中xDataSize为输入x的数据大小,计算公式为:xDataSize = BS * H * 1 (Byte),scalesDataSize为scales的数据大小,当量化方式为pertoken-pergroup量化时,计算公式为:scalesDataSize = BS * H / 128 * 4 (Byte),当量化方式为mx量化时,计算公式为:scalesDataSize = BS * H / 32 * 1 (Byte)。- H范围仅支持[1024, 8192],要求128对齐。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_quant_reduce_scatter.cpp | 通过aclnnQuantReduceScatter接口方式调用quant_reduce_scatter算子。 |