当前位置: 首页 > news >正文

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、BFLOAT16ND
x2输入表示AddLayerNorm中加法计算的输入,对应公式中的`x2`。FLOAT32、FLOAT16、BFLOAT16ND
gamma输入表示层归一化中的gamma参数,对应公式中的`gamma`。FLOAT32、FLOAT16、BFLOAT16ND
beta输入表示层归一化中的beta参数,对应公式中的`beta`。FLOAT32、FLOAT16、BFLOAT16ND
bias可选输入表示AddLayerNormQuantV2中加法计算的输入,对应公式中的`bias`。FLOAT32、FLOAT16、BFLOAT16ND
scales1可选输入表示第一个被融合的量化计算子中的scale/smooth输入,对应公式中的`scales1`。FLOAT32、FLOAT16、BFLOAT16ND
scales2可选输入表示第二个被融合的量化计算子中的scale/smooth输入,对应公式中的`scales2`。FLOAT32、FLOAT16、BFLOAT16ND
zero_points1可选输入表示第一个被融合的量化计算子中的zeroPoints输入,对应公式中的`zeroPoints1`。FLOAT32、FLOAT16、BFLOAT16ND
zero_points2可选输入表示第二个被融合的量化计算子中的zeroPoints输入,对应公式中的`zeroPoints2`。FLOAT32、FLOAT16、BFLOAT16ND
quant_mode可选属性
  • 用于确定融合算子融合的是静态还是动态量化算子,对应公式中的`quantMode`。取值可以是 "static"或 "dynamic"。
  • 默认值为"dynamic"。
String-
epsilon可选属性
  • 添加到分母中的值,以确保数值稳定,用于防止除0错误,对应公式中的`epsilon`。
  • 默认值为1e-5。
FLOAT-
additional_output可选属性
  • 表示是否开启x=x1+x2+bias的输出。
  • 默认值为false。
BOOL-
div_mode可选属性
  • 表示静态量化处理scale的方法是乘法或除法,对应公式中的`divMode`。
  • 默认值为true。
BOOL-
y1输出表示量化输出Tensor,对应公式中的`y1`。INT8ND
y2输出表示量化输出Tensor,对应公式中的`y2`。INT8ND
x输出表示x1和x2的和,对应公式中的`x`。FLOAT32、FLOAT16、BFLOAT16ND
layernormRes输出表示layernorm的结果输出,对应公式中的`x`。FLOAT32、FLOAT16、BFLOAT16ND
out_scales1输出表示通过scales1计算的动态量化缩放结果,对应公式中的`outScales1`。FLOAT32ND
out_scales2输出表示通过scales2计算的动态量化缩放结果,对应公式中的`outScales2`。FLOAT32ND
  • Atlas 推理系列产品 :不支持BFLOAT16。

约束说明

调用说明

调用方式样例代码说明
aclnn接口test_aclnn_add_layer_norm_quant_v2通过aclnnAddLayerNormQuantV2接口方式调用AddLayerNormQuantV2算子。

【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.rkmt.cn/news/1512010.html

相关文章:

  • 射频加热技术在家电除霜中的应用与SDS31300模块集成指南
  • STM32 TIM1双通道互补PWM工程包:支持死区可调、相位/占空比独立配置,兼容向上计数与中央对齐模式
  • Pandas多维聚合生产实践:金融级稳定性与业务语义实现
  • 实战指南:深入nocodb API开发与SDK集成方案
  • 别再死记MobileNet结构了!用PyTorch手写一个V1,从代码里理解深度可分离卷积
  • 终极AMD处理器调试指南:5个技巧全面掌握硬件性能调优
  • 嵌入式开发避坑指南:iMX8ULP勘误文档深度解析与实战规避
  • Zotero PDF Translate:学术翻译的全能助手使用指南
  • 2026长沙奢侈品黄金回收品牌排名风控维度测评 耀辉全流程安全体系登顶榜单 - 奢侈品回收
  • fMRI研究可重复性危机下,如何用DPARSF和CORR数据集提升你的结果可信度?
  • 贵州AI搜索推广怎么选?2026年服务商对比与选型指南 - 精选优质企业推荐官
  • 2026年合肥共达职业技术学院复读班怎么报名?招生办电话是多少? - 小张zc
  • 如何5分钟上手企业级工作流设计器:wflow可视化流程自动化完整指南
  • 深入解析NXP Kinetis K70:ARM Cortex-M4混合信号MCU的架构与实战应用
  • 掌握大数据表管理的利器:PyIceberg 让 Python 开发者轻松驾驭海量数据
  • 飞思卡尔Symphony双核音频DSP架构解析与高清音频处理实战
  • RVO2-CS完全指南:如何快速实现多智能体碰撞规避
  • 深入浅出解读Gold-YOLO:华为的GD机制如何让YOLOv8‘看’得更准?
  • IDC首发中国智能体开发平台私有化市场排名,蚂蚁数科位列第四
  • Rust Qt Binding Generator:如何快速实现Rust与Qt/QML的无缝集成
  • 教育机构招生报名+微信缴费一体化小程序(含可视化后台)
  • 终极JSON转换指南:如何用一款Mac应用快速生成5种语言的模型代码
  • 思源宋体TTF:免费中文专业字体终极指南
  • 2026年机械格栅厂家:解读行业三大核心趋势 - 资讯纵览
  • Obsidian Better Export PDF插件架构深度解析:从单文件导出到企业级批量处理方案
  • MQX RTOS深度解析:从内核机制到工业级嵌入式开发实战
  • AI 生产力工具产品化:用户反馈闭环与自动化需求挖掘的工程实践
  • 如何使用EntraExporter:从安装到导出的完整指南
  • 2026 年中国GEO 服务商权威测评:技术壁垒与产业落地双轮驱动,区域标杆崛起 - 速递信息
  • 快速上手AMD Ryzen调试工具:免费解锁CPU隐藏性能的完整指南