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、BFLOAT16 | ND |
| x2 | 输入 | 用于Add计算的第二个输入,对应公式中的`x2`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| gamma | 输入 | 表示RmsNorm的缩放因子(权重),对应公式中的`g`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| epsilon | 可选属性 |
| FLOAT32 | - |
| x1 | 输出 | 表示最后的输出,Device侧的aclTensor,对应公式中的`RmsNorm(x)`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| rstd | 输出 | 表示归一化后的标准差倒数,对应公式中的`rstd`。 | FLOAT32 | ND |
| x2 | 输出 | 表示Add计算的结果,对应公式中的`x`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
Atlas 推理系列产品 :
- 所有输入参数和输出参数
x1、x2的数据类型不支持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),仅供参考
