news 2026/5/9 12:08:30

CANN/cann-bench:AddRmsNormDynamicQuant算子API描述

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/cann-bench:AddRmsNormDynamicQuant算子API描述

AddRmsNormDynamicQuant 算子 API 描述

【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台,推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench

1. 算子简介

Add、RMSNorm 和动态量化的融合。

主要应用场景

  • 大语言模型推理中残差连接 + 归一化 + 量化的融合加速
  • Transformer 模型中 RMSNorm 前的残差加法与后处理量化一体化
  • INT8/INT4 低精度推理的动态量化预处理

算子特征

  • 难度等级:L3(FusedComposite)
  • 多输入多输出,融合 Add、RMSNorm 和动态量化三个操作
  • 输入 x1、x2 为 ND 格式张量,gamma 为缩放参数

2. 算子定义

数学公式

$$ y, xOut, scaleOut = \text{quantize}(\text{rmsnorm}(x_1 + x_2) \times \gamma) $$

具体步骤:

  1. Add 操作:$xOut = x_1 + x_2$
  2. RMSNorm:$\text{normalized} = \frac{xOut}{\sqrt{\text{mean}(xOut^2) + \epsilon}} \times \gamma$
  3. 动态量化:根据 dst_type 将归一化结果量化为 INT8 或 INT4,同时输出量化 scale

3. 接口规范

算子原型

cann_bench.add_rms_norm_dynamic_quant(Tensor x1, Tensor x2, Tensor gamma, float epsilon, int dst_type) -> (Tensor y, Tensor xOut, Tensor scaleOut)

输入参数说明

参数类型默认值描述
x1Tensor必选第 1 个输入张量
x2Tensor必选第 2 个输入张量
gammaTensor必选缩放参数
epsilonfloat1e-6epsilon 值
dst_typeint0目标数据类型 (0:DT_INT8, 1:DT_INT4)

输出

参数Shapedtype描述
y与输入 x1 相同int8 / int4量化后的输出张量
xOut与输入 x1 相同float16 / bfloat16Add 结果,x1 + x2
scaleOut标量float32量化使用的 scale 值

数据类型

输入 (x1, x2, gamma) dtype输出 y dtype输出 xOut dtype输出 scaleOut dtype
float16int8 / int4float16float32
bfloat16int8 / int4bfloat16float32

注意:INT4 量化(dst_type=1)的输出值范围为 [-8, 7],由于 PyTorch 不支持 int4 dtype,实际存储为 int8 dtype。

规则与约束

  • x1 和 x2 的 shape 和 dtype 必须一致
  • gamma 的 dtype 须与 x1、x2 一致
  • x1 为 ND 格式
  • dst_type 取值:0 表示 DT_INT8,1 表示 DT_INT4
  • epsilon 用于 RMSNorm 的数值稳定性,默认 1e-6
  • scaleOut 为 float32 类型标量

4. 精度要求

采用生态算子精度标准进行验证。

误差指标

  1. 平均相对误差(MERE):采样点中相对误差平均值

    $$ \text{MERE} = \text{avg}(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)+\text{1e-7}}) $$

  2. 最大相对误差(MARE):采样点中相对误差最大值

    $$ \text{MARE} = \max(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)+\text{1e-7}}) $$

通过标准

数据类型FLOAT16BFLOAT16FLOAT32HiFLOAT32FLOAT8 E4M3FLOAT8 E5M2
通过阈值(Threshold)2^-102^-72^-132^-112^-32^-2

当平均相对误差 MERE < Threshold,最大相对误差 MARE < 10 * Threshold 时判定为通过。

5. 标准 Golden 代码

import torch """ AddRmsNormDynamicQuant 算子 Torch Golden 参考实现 Add、RMSNorm 和动态量化的融合 公式:y, xOut, scaleOut = quantize(rmsnorm(x1 + x2) * gamma) """ def add_rms_norm_dynamic_quant( x1: torch.Tensor, x2: torch.Tensor, gamma: torch.Tensor, epsilon: float = 1e-6, dst_type: int = 0 ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: """ Add、RMSNorm 和动态量化的融合 公式:y, xOut, scaleOut = quantize(rmsnorm(x1 + x2) * gamma) Args: x1: 第 1 个输入张量 x2: 第 2 个输入张量 gamma: 缩放参数 epsilon: epsilon 值 dst_type: 目标数据类型 (0:DT_INT8, 1:DT_INT4) Returns: y: 量化后的输出张量 xOut: Add 结果,x1 + x2 scaleOut: 量化使用的 scale 值 """ # Add 操作 xOut = x1 + x2 # RMSNorm variance = xOut.pow(2).mean(-1, keepdim=True) rms = torch.sqrt(variance + epsilon) normalized = xOut / rms y_norm = normalized * gamma # 动态量化 # 将 y_norm 转换为 float32 以保证 scale 计算精度和 dtype 正确 y_norm_f32 = y_norm.float() if dst_type == 0: # INT8 scale = (127.0 / y_norm_f32.abs().max()).to(torch.float32) y = torch.clamp((y_norm_f32 * scale.item()).round(), -128, 127).to(torch.int8) else: # INT4 (存储为 int8,值范围 [-8, 7]) scale = (7.0 / y_norm_f32.abs().max()).to(torch.float32) y = torch.clamp((y_norm_f32 * scale.item()).round(), -8, 7).to(torch.int8) return y, xOut, scale

6. 额外信息

算子调用示例

import torch import cann_bench x1 = torch.randn(2, 4096, dtype=torch.float16, device="npu") x2 = torch.randn(2, 4096, dtype=torch.float16, device="npu") gamma = torch.ones(4096, dtype=torch.float16, device="npu") y, xOut, scaleOut = cann_bench.add_rms_norm_dynamic_quant(x1, x2, gamma, 1e-6, 0) # INT8 量化 y, xOut, scaleOut = cann_bench.add_rms_norm_dynamic_quant(x1, x2, gamma, 1e-6, 1) # INT4 量化

【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台,推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 12:04:31

KrkrzExtract终极指南:三步掌握krkrz引擎资源解包神器

KrkrzExtract终极指南&#xff1a;三步掌握krkrz引擎资源解包神器 【免费下载链接】KrkrzExtract The next generation of KrkrExtract 项目地址: https://gitcode.com/gh_mirrors/kr/KrkrzExtract KrkrzExtract是一款专为krkrz游戏引擎设计的下一代资源处理工具&#x…

作者头像 李华
网站建设 2026/5/9 12:01:32

零基础上手 GPT-Image-2:在 kulaai 上生成第一张 AI 图片的图文教程

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…

作者头像 李华
网站建设 2026/5/9 12:00:34

卡梅德生物技术快报|豆科植物遗传转化:紫穗槐 AfRAP2 基因克隆与转化 豆科植物遗传转化技术全流程解析

1 研究背景与问题提出干旱、碱性盐胁迫严重影响植物生长&#xff0c;豆科植物遗传转化是分子育种核心技术。本文基于紫穗槐干旱转录组&#xff0c;克隆 AfRAP2 基因&#xff0c;完成豆科植物遗传转化全流程&#xff0c;实现烟草、山新杨异源过表达&#xff0c;验证其抗逆功能&a…

作者头像 李华
网站建设 2026/5/9 12:00:32

CANN算子Cumsum测试报告

【免费下载链接】cann-competitions 本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。 项目地址: https://gitcode.com/cann/cann-competitions 元信息&#xff08;请如实填写&#xff0c;此区块将由组委会脚本自动解析&#xf…

作者头像 李华
网站建设 2026/5/9 11:55:44

浅谈GaussDB (DWS)技术【玩转PB级数仓GaussDB(DWS)】

1、GaussDB(DWS) 介绍数据仓库服务GaussDB(DWS) 是一种基于华为云基础架构和平台的在线数据处理数据库&#xff0c;提供即开即用、可扩展且完全托管的分析型数据库服务。GaussDB(DWS)是基于华为融合数据仓库GaussDB产品的云原生服务 &#xff0c;兼容标准ANSI SQL 99和SQL 2003…

作者头像 李华
网站建设 2026/5/9 11:54:43

第二天打卡

数组 Array数组是一种线性表数据结构&#xff0c;它用一组连续的内存空间来存储一组具有相同数据类型的集合。数组中各个元素的存储是有先后顺序的&#xff0c;它们在内存中按照这个顺序连续存放到一起&#xff0c;内存地址连续。数组获取元素的时间复杂度为O(1)一维数组是最常…

作者头像 李华