aclnnGroupNormBackward
产品支持情况
产品 | 是否支持 |
---|---|
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object] | √ |
[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object] | √ |
[object Object]Atlas 200I/500 A2 推理产品[object Object] | × |
[object Object]Atlas 推理系列产品 [object Object] | × |
[object Object]Atlas 训练系列产品[object Object] | √ |
功能说明
- 算子功能:undefined的反向计算。用于计算输入张量的梯度,以便在反向传播过程中更新模型参数。
- 计算公式:
函数原型
每个算子分为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, const aclrtStream stream)
aclnnGroupNormBackwardGetWorkspaceSize
参数说明:
gradOut(aclTensor*,计算输入):反向计算的梯度tensor,Device侧的aclTensor。对应公式中的
dy
,shape支持0-8维,元素个数需要等于N*C*HxW,数据类型与input相同,undefined支持ND,支持undefined。- [object Object]Atlas 训练系列产品[object Object]:数据类型支持FLOAT16、FLOAT。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、FLOAT、BFLOAT16。
input(aclTensor*,计算输入):正向计算的首个输入,Device侧的aclTensor。对应公式中的
x
,shape支持0-8维,元素个数需要等于N*C*HxW,数据类型与gradOut相同,undefined支持ND,支持undefined。- [object Object]Atlas 训练系列产品[object Object]:数据类型支持FLOAT16、FLOAT。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、FLOAT、BFLOAT16。
mean(aclTensor*,计算输入):正向计算的第二个输出,表示input分组后每个组的均值,Device侧的aclTensor。对应公式中的
mean
,shape支持0-8维,元素个数需要等于N*group,undefined支持ND,支持undefined。- [object Object]Atlas 训练系列产品[object Object]:数据类型支持FLOAT16、FLOAT。数据类型与gradOut相同。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、FLOAT、BFLOAT16。数据类型与gradOut相同。
rstd(aclTensor*,计算输入):正向计算的第三个输出,表示input分组后每个组的标准差倒数,Device侧的aclTensor。对应公式中的
rstd
,shape支持0-8维,元素个数需要等于N*group,数据类型与mean相同,undefined支持ND,支持undefined。- [object Object]Atlas 训练系列产品[object Object]:数据类型支持FLOAT16、FLOAT。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、FLOAT、BFLOAT16。
gamma(aclTensor*,计算输入):表示每个channel的缩放系数,Device侧的aclTensor。对应公式中的
γ
,shape支持0-8维,元素个数需要等于C,数据类型与mean相同,undefined支持ND,支持undefined。- [object Object]Atlas 训练系列产品[object Object]:数据类型支持FLOAT16、FLOAT。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、FLOAT、BFLOAT16。
N(int64_t,计算输入):Host侧的aclTensor,INT64常量,表示输入gradOut在N维度上的空间大小。
C(int64_t,计算输入):Host侧的aclTensor,INT64常量,表示输入gradOut在C维度上的空间大小。
HxW(int64_t,计算输入):Host侧的aclTensor,INT64常量,表示输入gradOut在除N、C维度外的空间大小。
group(int64_t,计算输入):Host侧的aclTensor,INT64常量,表示将输入gradOut的C维度分为group组,group需大于0,且C必须可以被group整除。
outputMask(aclBoolArray*,计算输入):Host侧的aclTensor,数据类型支持BOOL,size大小为3。分别表示是否输出gradInput,gradGammaOut,gradBetaOut,若为true则输出,否则输出对应位置返回空。
gradInput(aclTensor*,计算输出):计算输出的梯度,用于更新输入数据的梯度。对应公式中的
dx
,数据类型与gradOut相同,shape与input相同,Device侧的aclTensor。undefined支持ND,支持undefined。- [object Object]Atlas 训练系列产品[object Object]:数据类型支持FLOAT16、FLOAT。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、FLOAT、BFLOAT16。
gradGammaOut(aclTensor*,计算输出):计算输出的梯度,用于更新缩放参数的梯度。对应公式中的
dγ
,数据类型与mean相同,shape与gamma相同,Device侧的aclTensor。undefined支持ND,支持undefined。- [object Object]Atlas 训练系列产品[object Object]:数据类型支持FLOAT16、FLOAT。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、FLOAT、BFLOAT16。
gradBetaOut(aclTensor*,计算输出):计算输出的梯度,用于更新偏置参数的梯度。对应公式中的
dβ
,数据类型与mean相同,shape与gamma相同,Device侧的aclTensor。undefined支持ND,支持undefined。- [object Object]Atlas 训练系列产品[object Object]:数据类型支持FLOAT16、FLOAT。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持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,入参):指定执行任务的Stream。
返回值:
aclnnStatus:返回状态码,具体参见undefined。
约束说明
是否支持空Tenor:支持空进空出。
调用示例
示例代码如下,仅供参考,具体编译和执行过程请参考undefined。