CANN/ops-nn加层归一化量化V2算子
AddLayerNormQuantV2【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn产品支持情况产品是否支持Ascend 950PR/Ascend 950DT×Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√Atlas 200I/500 A2 推理产品×Atlas 推理系列产品√Atlas 训练系列产品×功能说明接口功能 LayerNorm算子是大模型常用的归一化操作。AddLayerNormQuantV2算子将LayerNorm前的Add算子和LayerNorm归一化输出给1个或2个下游的量化算子融合起来减少搬入搬出操作。LayerNorm下游的量化算子可以是Quantize、AscendQuantV2或DynamicQuant算子具体的量化算子类型由attr入参divMode和quantMode决定。当下游有2个量化算子时2个量化算子的算子类型、输入输出dtype组合和可选输入的组合需要完全一致当前仅支持下游有1个AscendQuantV2量化算子。计算公式$$ x x1 x2 biasOptional $$$$ y {{x-E(x)}\over\sqrt {Var(x)epsilon}} * gamma beta $$当quantMode输入为static时输出outScales1Out和outScales2Out无实际意义。取决于divMode的输入融合的量化算子可能是Quantize或AscendQuantV2当divMode输入为true时融合的量化算子为Quantize计算公式如下所示$$ y1Out round(y / scales1Optional zeroPoints1Optional) $$$$ y2Out round(y / scales2Optional zeroPoints2Optional), \quad \text{当且仅当scales2Optional存在} $$当divMode输入为false时融合的量化算子为AscendQuantV2计算公式如下所示$$ y1Out round(y * scales1Optional zeroPoints1Optional) $$$$ y2Out round(y * scales2Optional zeroPoints2Optional), \quad \text{当且仅当scales2Optional存在} $$当quantMode输入为dynamic时输入zeroPoints1Optional和zeroPoints2Optional无实际意义。融合的量化算子是DynamicQuant此时divMode无效若scales1Optional和scales2Optional均无输入则y2Out和scale2Out输出无实际意义可忽略。计算公式如下所示$$ outScales1Out row_max(abs(y))/127 $$$$ y1Out round(y / outScales1Out) $$若仅输入scales1Optional则y2Out和scale2Out输出无实际意义可忽略。计算公式如下所示$$ tmp1 y * scales1Optional $$$$ outScales1Out row_max(abs(tmp1))/127 $$$$ y1Out round(tmp1 / outScales1Out) $$若scales1Optional和scales2Optional均存在则y2Out和scale2Out输出有效。计算公式如下所示$$ tmp1 y * scales1Optional, \quad tmp2 y * scales2Optional $$$$ outScales1Out row_max(abs(tmp1))/127, \quad outScales2Out row_max(abs(tmp2))/127 $$$$ y1Out round(tmp1 / outScales1Out),\quad y2Out round(tmp2 / outScales2Out) $$其中row_max代表对每行求最大值。参数说明参数名输入/输出/属性描述数据类型数据格式x1输入表示AddLayerNorm中加法计算的输入对应公式中的x1。FLOAT32、FLOAT16、BFLOAT16NDx2输入表示AddLayerNorm中加法计算的输入对应公式中的x2。FLOAT32、FLOAT16、BFLOAT16NDgamma输入表示层归一化中的gamma参数对应公式中的gamma。FLOAT32、FLOAT16、BFLOAT16NDbeta输入表示层归一化中的beta参数对应公式中的beta。FLOAT32、FLOAT16、BFLOAT16NDbias可选输入表示AddLayerNormQuantV2中加法计算的输入对应公式中的bias。FLOAT32、FLOAT16、BFLOAT16NDscales1可选输入表示第一个被融合的量化计算子中的scale/smooth输入对应公式中的scales1。FLOAT32、FLOAT16、BFLOAT16NDscales2可选输入表示第二个被融合的量化计算子中的scale/smooth输入对应公式中的scales2。FLOAT32、FLOAT16、BFLOAT16NDzero_points1可选输入表示第一个被融合的量化计算子中的zeroPoints输入对应公式中的zeroPoints1。FLOAT32、FLOAT16、BFLOAT16NDzero_points2可选输入表示第二个被融合的量化计算子中的zeroPoints输入对应公式中的zeroPoints2。FLOAT32、FLOAT16、BFLOAT16NDquant_mode可选属性用于确定融合算子融合的是静态还是动态量化算子对应公式中的quantMode。取值可以是 static或 dynamic。默认值为dynamic。String-epsilon可选属性添加到分母中的值以确保数值稳定用于防止除0错误对应公式中的epsilon。默认值为1e-5。FLOAT-additional_output可选属性表示是否开启xx1x2bias的输出。默认值为false。BOOL-div_mode可选属性表示静态量化处理scale的方法是乘法或除法对应公式中的divMode。默认值为true。BOOL-y1输出表示量化输出Tensor对应公式中的y1。INT8NDy2输出表示量化输出Tensor对应公式中的y2。INT8NDx输出表示x1和x2的和对应公式中的x。FLOAT32、FLOAT16、BFLOAT16NDlayernormRes输出表示layernorm的结果输出对应公式中的x。FLOAT32、FLOAT16、BFLOAT16NDout_scales1输出表示通过scales1计算的动态量化缩放结果对应公式中的outScales1。FLOAT32NDout_scales2输出表示通过scales2计算的动态量化缩放结果对应公式中的outScales2。FLOAT32NDAtlas 推理系列产品 不支持BFLOAT16。约束说明无调用说明调用方式样例代码说明aclnn接口test_aclnn_add_layer_norm_quant_v2通过aclnnAddLayerNormQuantV2接口方式调用AddLayerNormQuantV2算子。【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考