aclnnGroupNormBackward
支持的产品型号
- Atlas 训练系列产品。
- Atlas A2训练系列产品/Atlas 800I A2推理产品。
接口原型
每个算子分为undefined,必须先调用“aclnnGroupNormBackwardGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnGroupNormBackward”接口执行计算。
aclnnStatus aclnnGroupNormBackwardGetWorkspaceSize(const aclTensor* gradOut, const aclTensor* input, const aclTensor* mean, const aclTensor* rstd, const aclTensor* gamma, int64_t N, int64_t C, int64_t HxW, int64_t group, const aclBoolArray* outputMask, aclTensor* gradInput, aclTensor* gradGammaOut, aclTensor* gradBetaOut, uint64_t* workspaceSize, aclOpExecutor** executor)
aclnnStatus aclnnGroupNormBackward(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)
功能描述
- 接口功能:undefined的反向计算。
aclnnGroupNormBackwardGetWorkspaceSize
参数说明:
gradOut(aclTensor*, 计算输入):反向计算的梯度tensor,Device侧的aclTensor。shape支持0-8维,元素个数需要等于N*C*HxW,数据类型与input相同,undefined支持ND,支持undefined。
- Atlas 训练系列产品:数据类型支持FLOAT16、FLOAT。
- Atlas A2训练系列产品/Atlas 800I A2推理产品:数据类型支持FLOAT16、FLOAT、BFLOAT16。
input(aclTensor*, 计算输入):正向计算的首个输入,Device侧的aclTensor。shape支持0-8维,元素个数需要等于N*C*HxW,数据类型与gradOut相同,undefined支持ND,支持undefined。
- Atlas 训练系列产品:数据类型支持FLOAT16、FLOAT。
- Atlas A2训练系列产品/Atlas 800I A2推理产品:数据类型支持FLOAT16、FLOAT、BFLOAT16。
mean(aclTensor*, 计算输入):正向计算的第二个输出,表示input分组后每个组的均值,Device侧的aclTensor。shape支持0-8维,元素个数需要等于N*group,数据类型与gradOut相同,undefined支持ND,支持undefined。
- Atlas 训练系列产品:数据类型支持FLOAT16、FLOAT。
- Atlas A2训练系列产品/Atlas 800I A2推理产品:数据类型支持FLOAT16、FLOAT、BFLOAT16。
rstd(aclTensor*, 计算输入): 正向计算的第三个输出,表示input分组后每个组的标准差倒数,Device侧的aclTensor。shape支持0-8维,元素个数需要等于N*group,数据类型与gradOut相同,undefined支持ND,支持undefined。
- Atlas 训练系列产品:数据类型支持FLOAT16、FLOAT。
- Atlas A2训练系列产品/Atlas 800I A2推理产品:数据类型支持FLOAT16、FLOAT、BFLOAT16。
gamma(aclTensor*, 计算输入): 表示每个channel的缩放系数,Device侧的aclTensor。shape支持0-8维,元素个数需要等于C,数据类型与gradOut相同,undefined支持ND,支持undefined。
- Atlas 训练系列产品:数据类型支持FLOAT16、FLOAT。
- Atlas A2训练系列产品/Atlas 800I A2推理产品:数据类型支持FLOAT16、FLOAT、BFLOAT16。
N(int64_t, 计算输入): INT64常量,表示输入gradOut在N维度上的空间大小。
C(int64_t, 计算输入): INT64常量,表示输入gradOut在C维度上的空间大小。
HxW(int64_t, 计算输入): INT64常量,表示输入gradOut在除N、C维度外的空间大小。
group(int64_t, 计算输入): INT64常量,表示将输入gradOut的C维度分为group组,group需大于0,且C必须可以被group整除。
outputMask(aclBoolArray*, 计算输入): 数据类型支持BOOL,size大小为3。分别表示是否输出gradInput, gradGammaOut, gradBetaOut,若为true则输出,否则输出对应位置返回空。
gradInput(aclTensor*, 计算输出): 输出张量,数据类型与gradOut相同,shape与input相同,Device侧的aclTensor。undefined支持ND,支持undefined。
- Atlas 训练系列产品:数据类型支持FLOAT16、FLOAT。
- Atlas A2训练系列产品/Atlas 800I A2推理产品:数据类型支持FLOAT16、FLOAT、BFLOAT16。
gradGammaOut(aclTensor*, 计算输出): 输出张量,数据类型与gradOut相同,shape与gamma相同,Device侧的aclTensor。undefined支持ND,支持undefined。
- Atlas 训练系列产品:数据类型支持FLOAT16、FLOAT。
- Atlas A2训练系列产品/Atlas 800I A2推理产品:数据类型支持FLOAT16、FLOAT、BFLOAT16。
gradBetaOut(aclTensor*, 计算输出): 输出张量,数据类型与gradOut相同,shape与gamma相同,Device侧的aclTensor。undefined支持ND,支持undefined。
- Atlas 训练系列产品:数据类型支持FLOAT16、FLOAT。
- Atlas A2训练系列产品/Atlas 800I A2推理产品:数据类型支持FLOAT16、FLOAT、BFLOAT16。
workspaceSize(uint64_t*, 出参): 返回用户需要在npu device侧申请的workspace大小。
executor(aclOpExecutor**, 出参): 返回op执行器,包含了算子计算流程。
返回值:
aclnnStatus: 返回状态码,具体参见undefined。
[object Object]
aclnnGroupNormBackward
参数说明:
- workspace(void*, 入参):在Device侧申请的workspace内存地址。
- workspaceSize(uint64_t, 入参):在Device侧申请的workspace大小,由第一段接口aclnnGroupNormBackwardGetWorkspaceSize获取。
- executor(aclOpExecutor*, 入参):op执行器,包含了算子计算流程。
- stream(aclrtStream, 入参):执行任务的AscendCL Stream流。
返回值:
aclnnStatus:返回状态码,具体参见undefined。
约束与限制
- Atlas A2训练系列产品/Atlas 800I A2推理产品:在训练场景下C / group 的结果不支持超过 8000
调用示例
示例代码如下,仅供参考,具体编译和执行过程请参考undefined。