aclnnAddRmsNormDynamicQuantV2
产品支持情况
产品 | 是否支持 |
---|---|
[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] | × |
功能说明
算子功能:RmsNorm算子是大模型常用的归一化操作,相比LayerNorm算子,其去掉了减去均值的部分。DynamicQuant算子则是为输入张量进行对称动态量化的算子。AddRmsNormDynamicQuant算子将RmsNorm前的Add算子和RmsNorm归一化输出给到的1个或2个DynamicQuant算子融合起来,减少搬入搬出操作。
计算公式:
- 若smoothScale1Optional和smoothScale2Optional均不输入,则y2Out和scale2Out输出无实际意义。计算过程如下所示:
- 若仅输入smoothScale1Optional,则y2Out和scale2Out输出无实际意义。计算过程如下所示:
- 若smoothScale1Optional和smoothScale2Optional均输入,则算子的五个输出均为有效输出。计算过程如下所示:
其中row_max代表每行求最大值。
函数原型
每个算子分为undefined,必须先调用aclnnAddRmsNormDynamicQuantV2GetWorkspaceSize
接口获取入参并根据计算流程所需workspace大小,再调用`aclnnAddRmsNormDynamicQuantV2接口执行计算。
aclnnStatus aclnnAddRmsNormDynamicQuantV2GetWorkspaceSize( const aclTensor *x1, const aclTensor *x2, const aclTensor *gamma, const aclTensor *smoothScale1Optional, const aclTensor *smoothScale2Optional, const aclTensor *betaOptional, double epsilon, const aclTensor *y1Out, const aclTensor *y2Out, const aclTensor *xOut, const aclTensor *scale1Out, const aclTensor *scale2Out, uint64_t *workspaceSize, aclOpExecutor **executor)
aclnnStatus aclnnAddRmsNormDynamicQuantV2(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)
aclnnAddRmsNormDynamicQuantV2GetWorkspaceSize
参数说明:
- x1(aclTensor*,计算输入):表示标准化过程中的源数据张量,Device侧的aclTensor。shape支持2-8维,数据类型支持FLOAT16、BFLOAT16。undefined支持ND,支持undefined,不支持空Tensor。
- x2(aclTensor*,计算输入):表示标准化过程中的源数据张量,Device侧的aclTensor。shape和数据类型需要与x1保持一致。undefined支持ND,支持undefined,不支持空Tensor。
- gamma(aclTensor*,计算输入):表示标准化过程中的权重张量,Device侧的aclTensor。shape支持1维,shape需要与x1最后一维一致,数据类型需要与x1保持一致。undefined支持ND,支持undefined,不支持空Tensor。
- smoothScale1Optional(aclTensor*,计算输入):表示量化过程中得到y1使用的smoothScale张量,Device侧的aclTensor。可选参数,支持传入空指针。shape和数据类型需要与gamma保持一致。undefined支持ND,支持undefined,不支持空Tensor。
- smoothScale2Optional(aclTensor*,计算输入):表示量化过程中得到y2使用的smoothScale张量,Device侧的aclTensor。可选参数,支持传入空指针。必须与smoothScale1Optional配套使用。shape和数据类型需要与gamma保持一致。undefined支持ND,支持undefined,不支持空Tensor。
- betaOptional(aclTensor*,计算输入):表示标准化过程中的偏置项,公式中的
beta
,Device侧的aclTensor。shape需要与gamma
的shape保持一致,数据类型需要与gamma
保持一致。undefined支持ND,支持非连续的Tensor,不支持空Tensor。 - epsilon(double,计算输入):用于防止除0错误,数据类型为double,建议传入较小正数,如1e-6。
- y1Out(aclTensor*,计算输出):表示量化输出Tensor,Device侧的aclTensor。shape需要与输入x1/x2一致,或者是二维并且第一维等于x1除最后一维的维度乘积,第二维等于x1的最后一维,数据类型支持INT8,undefined支持ND,支持undefined,不支持空Tensor。
- y2Out(aclTensor*,计算输出):表示量化输出Tensor,Device侧的aclTensor。当smoothScale2Optional不存在时,此输出无意义。shape需要与y1Out一致,数据类型支持INT8,undefined支持ND,支持undefined,不支持空Tensor。
- xOut(aclTensor*,计算输出):表示x1和x2的和,Device侧的aclTensor。shape和数据类型需要与输入x1/x2一致,undefined支持ND,支持undefined,不支持空Tensor。
- scale1Out(aclTensor*,计算输出):第一路量化的输出,Device侧的aclTensor。shape需要与输入x1除最后一维后的shape一致,或者与x1除最后一维的乘积一致,数据类型支持FLOAT32。undefined支持ND,支持undefined,不支持空Tensor。
- scale2Out(aclTensor*,计算输出):第二路量化的输出,Device侧的aclTensor。当smoothScale2Optional不存在时,此输出无意义。shape需要与scale1Out一致,数据类型支持FLOAT32。undefined支持ND,支持undefined,不支持空Tensor。
- workspaceSize(uint64_t*,出参):返回需要在Device侧申请的workspace大小。
- executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
返回值:
aclnnStatus: 返回状态码,具体参见undefined。
[object Object]
aclnnAddRmsNormDynamicQuantV2
参数说明:
- workspace(void*,入参):在Device侧申请的workspace内存地址。
- workspaceSize(uint64_t,入参):在Device侧申请的workspace大小,由第一段接口aclnnAddRmsNormDynamicQuantV2GetWorkspaceSize获取。
- executor(aclOpExecutor*,入参):op执行器,包含了算子计算流程。
- stream(aclrtStream,入参):指定执行任务的Stream。
返回值:
aclnnStatus:返回状态码。(具体参见undefined)
约束说明
- 数据格式说明
所有输入输出tensor的数据格式推荐使用ND格式,其他数据格式会由框架默认转换成ND格式进行处理。
各产品型号支持数据类型说明
x1数据类型 x2数据类型 gamma数据类型 smoothScale1Optional数据类型 smoothScale2Optional数据类型 betaOptional数据类型 y1Out数据类型 y2Out数据类型 scale1Out数据类型 scale2Out数据类型 FLOAT16 FLOAT16 FLOAT16 FLOAT16 FLOAT16 FLOAT16 INT8 INT8 FLOAT32 FLOAT32 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 BFLOAT16 INT8 INT8 FLOAT32 FLOAT32
调用示例
示例代码如下,仅供参考,具体编译和执行过程请参考undefined。
[object Object]