CANN/ops-nn: 原位加法RMS归一化算子

📅 2026/7/5 9:40:51 👁️ 阅读次数 📝 编程学习
CANN/ops-nn: 原位加法RMS归一化算子

InplaceAddRmsNorm

【免费下载链接】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 训练系列产品×
Kirin X90 处理器系列产品
Kirin 9030 处理器系列产品

功能说明

  • 算子功能:RmsNorm算子是大模型常用的归一化操作,相比LayerNorm算子,其去掉了减去均值的部分。AddRmsNorm算子将RmsNorm前的Add算子融合起来,减少搬入搬出操作。InplaceAddRmsNorm是一种结合了原位加法和RMS归一化的操作。

  • 计算公式:

    $$ x_i=x1_{i}+x2_{i} $$

    $$ \operatorname{RmsNorm}(x_i)= g_i * (x_i * \operatorname{rstd}(\mathbf{x})), \quad \text { where } \operatorname{rstd}(\mathbf{x})=\frac{1}{\sqrt{\frac{1}{n} \sum_{i=1}^n x_i^2+eps}} $$

参数说明

参数名输入/输出/属性描述数据类型数据格式
x1输入用于Add计算的第一个输入,对应公式中的`x1`。FLOAT32、FLOAT16、BFLOAT16ND
x2输入用于Add计算的第二个输入,对应公式中的`x2`。FLOAT32、FLOAT16、BFLOAT16ND
gamma输入表示RmsNorm的缩放因子(权重),对应公式中的`g`。FLOAT32、FLOAT16、BFLOAT16ND
epsilon可选属性
  • 添加到分母中的值,以确保数值稳定,用于防止除0错误,对应公式中的`eps`。
  • 默认值为1e-6f。
FLOAT32-
x1输出表示最后的输出,Device侧的aclTensor,对应公式中的`RmsNorm(x)`。FLOAT32、FLOAT16、BFLOAT16ND
rstd输出表示归一化后的标准差倒数,对应公式中的`rstd`。FLOAT32ND
x2输出表示Add计算的结果,对应公式中的`x`。FLOAT32、FLOAT16、BFLOAT16ND
  • Atlas 推理系列产品 :

    • 所有输入参数和输出参数x1x2的数据类型不支持BFLOAT16。
    • 在当前产品下的使用场景下,输出参数rstd为无效参数,输出的值不生效。
  • Kirin X90/Kirin 9030处理器系列产品:所有输入、输出的数据类型不支持BFLOAT16。

约束说明

调用说明

调用方式样例代码说明
aclnn接口test_aclnn_inplace_add_rms_norm通过aclnnInplaceAddRmsNorm接口方式调用InplaceAddRmsNorm算子。
图模式-通过算子IR构图方式调用InplaceAddRmsNorm算子。

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

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