| Files | Last commit | Last update |
|---|---|---|
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 3 months ago | |
format cpp Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !6784 merge issue_fix into master format cpp Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 批量刷新cpp代码格式 ## 关联的Issue [#3791](https://gitcode.com/cann/ops-nn/issues/3791) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!6784 | 4 months ago | |
format cpp Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !6784 merge issue_fix into master format cpp Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 批量刷新cpp代码格式 ## 关联的Issue [#3791](https://gitcode.com/cann/ops-nn/issues/3791) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!6784 | 4 months ago | |
修改addrmsnorm算子文档 Co-authored-by: liangyuhua<liangyuhua@noreply.gitcode.com> # message auto-generated for no-merge-commit merge: !1558 merge addrmsnorm into master 修改addrmsnorm算子文档 Created-by: liangyuhua Commit-by: liangyuhua Merged-by: cann-robot Description: ## 描述 修改addrmsnorm算子文档中对于eps的描述,增加eps值需要大于零的约束。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 更新了aclnnAddRmsNorm.md文件 更新了add_rms_norm_proto.h文件 更新了README.md文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!1558 | 9 months ago | |
format cpp Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !6784 merge issue_fix into master format cpp Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 批量刷新cpp代码格式 ## 关联的Issue [#3791](https://gitcode.com/cann/ops-nn/issues/3791) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!6784 | 4 months ago | |
aclnn_add_rms_norm算子开发适配Timer-S1模型 Co-authored-by: 熊盛武<wuxs68@chinaunicom.cn> # message auto-generated for no-merge-commit merge: !6301 merge add-aclnn-add-rms-norm into master aclnn_add_rms_norm算子开发适配Timer-S1模型 Created-by: wuxs68 Commit-by: wuxs68;熊盛武 Merged-by: cann-robot Description: ## 描述 本 PR 贡献全新开发的 aclnn_add_rms_norm 融合算子,提供 ACLNN 接口 aclnnAddRmsNorm,用于将大模型中常见的残差 Add + RMSNorm 组合合并为单个融合算子。 该算子按照 ops-nn 算子开发要求补齐 Host 侧、Kernel 侧、CMake、UT/ST、文档和性能验证材料,形成完整的全新算子开发贡献。Timer-S1 是本算子的需求来源、典型 shape 和重点验证场景。 算子实现语义如下: x = x1 + x2 rstd = 1 / sqrt(mean(x * x, axis=-1, keepdims=True) + epsilon) y = x * rstd * gamma 目标验证场景为 Timer-S1 残差 Add 后接 RMSNorm,重点验证 BF16 [1,360,1024],gamma=[1024],rstd 为 FP32 的路径。该 PR 通过一个 ACLNN 融合算子替换原模型中的分解 Add + RMSNorm 组合,减少框架侧拆分调度和中间 Tensor 读写开销。 主要改动: - 全新整理并提交 norm/add_rms_norm 算子目录,包含 op_graph、op_host、op_kernel、framework、examples、docs、tests 和 CMake。 - 新增 aclnnAddRmsNorm ACLNN 接口相关声明、shape 推导、tiling、平台配置和 kernel 调度。 - 实现 Add、RMS 计算、rstd 输出、gamma 缩放和 Add 结果 x 输出的一体化 AscendC kernel。 - 针对 BF16 MergeN 路径优化 gamma 转换逻辑:gamma 为行向量,仅按 numColAlign 转换并跨行复用,避免按完整 tile 重复转换。 - 修正 MergeN 路径 rstd 行广播实现:Brcb repeat 使用 ceil(rows / 8),本地 rstd 缓冲区按 8 个 FP32 元素对齐,避免尾行场景越界读取。 - 新增 Ops-NN op_host/op_kernel UT,覆盖 BF16 MergeN tiling、ICPU kernel 路径和非对齐隐藏维度路径。 - 新增目标 shape 的 ACLNN ST/CMake 测试与性能对比材料。 ## 关联的Issue 关联Issue [#3457](https://gitcode.com/cann/ops-nn/issues/3457) ## 测试 ### 1. Ops-NN UT 构建 测试指令: bash build.sh -u --ops=add_rms_norm --ophost --opkernel --noexec -j8 测试结果: build success targets: build/tests/ut/op_host/nn_op_host_ut build/tests/ut/op_kernel/nn_op_kernel_ut_ascend910B1 ### 2. Ops-NN op_host UT 测试指令: build/tests/ut/op_host/nn_op_host_ut \ --gtest_filter='AddRmsNormTiling.add_rms_norm_tiling_timer_s1_bf16_merge_n' 测试结果: AddRmsNormTiling.add_rms_norm_tiling_timer_s1_bf16_merge_n result: PASSED error_count=0 验证内容: - BF16 [360,1024] MergeN tiling key。 - block dim、row/block factor、aligned column count。 - FP32/FP16 repeat-loop/tail 参数。 - epsilon 与 average factor。 ### 3. Ops-NN op_kernel UT 测试指令: build/tests/ut/op_kernel/nn_op_kernel_ut_ascend910B1 \ --gtest_filter='add_rms_norm_test.test_case_32_timer_s1_bf16_merge_n:add_rms_norm_test.test_case_32_bf16_merge_n_non_aligned_col' 测试结果: add_rms_norm_test.test_case_32_timer_s1_bf16_merge_n add_rms_norm_test.test_case_32_bf16_merge_n_non_aligned_col result: PASSED error_count=0 验证内容: - Ascend910B1 BF16 MergeN ICPU kernel path。 - BF16 [360,1024] tiling 参数。 - BF16 MergeN 非对齐隐藏维度路径,包含 num_col_align=1008 和非零 fp32/fp16 tail。 ### 4. ACLNN ST 目标 shape 测试 测试指令: cmake -S /ddhome/timers1_lxz/ascend-cann/operators/norm/add_rms_norm/tests/st/timer_s1 \ -B /tmp/add_rms_norm_timer_s1_st_build \ -DADD_RMS_NORM_BUILD_TIMER_S1_ST=ON \ -DADD_RMS_NORM_ASCEND_HOME=/ddhome/timers1_lxz/Ascend/cann-8.5.0 \ -DADD_RMS_NORM_CUSTOM_OPAPI_ROOT=/ddhome/timers1_lxz/Ascend/cann-8.5.0/opp/vendors/custom_nn/op_api cmake --build /tmp/add_rms_norm_timer_s1_st_build \ --target run_add_rms_norm_timer_s1_aclnn_test 测试结果: shape=(360,1024), epsilon=1e-6, dtype=BF16 y_vs_cann_formula failures=0 rstd_vs_cann_formula failures=0 xOut_vs_add failures=0 CORRECTNESS PASS BENCHMARK avg_us=11.193 workspace_bytes=16777472 ### 5. Standalone ACLNN 冒烟测试 测试指令: bash /ddhome/timers1_lxz/ascend-cann/scripts/run_add_rms_norm_aclnn_test.sh \ --dtype bf16 --rows 360 --cols 1024 --warmup 20 --iters 100 测试结果: shape=(360,1024), epsilon=1e-6, dtype=BF16 y_vs_cann_formula failures=0 rstd_vs_cann_formula failures=0 xOut_vs_add failures=0 CORRECTNESS PASS BENCHMARK avg_us=11.341 workspace_bytes=16777472 ### 6. 正确性与性能套件 测试结果: pre-submit suite: 11 cases, correctness pass, performance pass, overall pass extra perf suite: 10 cases, correctness pass, performance pass, overall pass 关键正确性比较均通过: fused_y_vs_decomposed_formula pass fused_rstd_vs_decomposed_formula pass fused_x_vs_decomposed_add pass fused_y_vs_add_plus_npu_rms_norm pass fused_rstd_vs_add_plus_npu_rms_norm pass fused_x_vs_add_plus_npu_rms_norm pass ## 算子性能测试结果补充 ### 测试环境 - 容器:timers1_lxz - CANN:/ddhome/timers1_lxz/Ascend/cann-8.5.0 - 设备:Ascend NPU - 目标 dtype:BF16 - Timer-S1 目标场景 shape:[360, 1024] - epsilon:1e-6 ### 算子级性能对比 对 Timer-S1 中的 Add + RMSNorm 组合进行了融合替换测试,比较对象包括: 1. 原始拆分实现:add + pow + mean + rsqrt + mul 2. 半融合路径:torch add + npu_rms_norm 3. 本 PR 融合算子:aclnn_add_rms_norm | Case | Shape | 原始拆分 Median | Add + npu_rms_norm Median | aclnn_add_rms_norm Median | 相比原始拆分 | 相比 Add+npu_rms_norm | | --- | ---: | ---: | ---: | ---: | ---: | ---: | | Timer-S1 rank3 target | [1,360,1024] | 327.070 us | 162.810 us | 125.135 us | 2.614x,时延下降 61.741% | 1.301x,时延下降 23.140% | | Timer-S1 rank2 target | [360,1024] | 304.410 us | 158.045 us | 124.240 us | 2.450x,时延下降 59.187% | 1.272x,时延下降 21.389% | | Larger batch rank3 | [2,360,1024] | 312.035 us | 162.075 us | 126.965 us | 2.458x,时延下降 59.311% | 1.277x,时延下降 21.663% | 补充 micro benchmark: | Path | Median | | --- | ---: | | Timer-S1 decomposed add + pow + mean + rsqrt + mul | 264.730 us | | torch add + npu_rms_norm | 152.155 us | | fused aclnn_add_rms_norm | 118.440 us | 该 micro benchmark 中,aclnn_add_rms_norm 相比 Timer-S1 原始拆分路径提升约 2.235x,时延下降约 55.26%;相比 torch add + npu_rms_norm 提升约 1.285x,时延下降约 22.16%。 ### 正确性结果 性能测试同时校验了融合算子的输出正确性: - fused_y_vs_decomposed_formula:通过 - fused_rstd_vs_decomposed_formula:通过 - fused_x_vs_decomposed_add:通过 - fused_y_vs_add_plus_npu_rms_norm:通过 - fused_rstd_vs_add_plus_npu_rms_norm:通过 - fused_x_vs_add_plus_npu_rms_norm:通过 所有目标性能 case 均为 0 allclose failures。 ### Timer-S1 端到端替换补充 | Pattern | Horizon | Output Allclose | Baseline Median | Fused Median | Median Speedup | | --- | ---: | ---: | ---: | ---: | ---: | | mixed | 1 | 0/9 failures | 0.499139 s | 0.466367 s | 7.027% | | mixed | 96 | 0/864 failures | 0.604372 s | 0.577120 s | 4.722% | | seasonal | 16 | 0/144 failures | 0.488832 s | 0.474400 s | 3.042% | | trend | 16 | 0/144 failures | 0.363972 s | 0.380780 s | -4.414% | | random | 16 | 0/144 failures | 0.455869 s | 0.469090 s | -2.818% | ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!6301 | 4 months ago | |
add_cases Co-authored-by: zhaogrug<zhaohai16@h-partners.com> # message auto-generated for no-merge-commit merge: !7583 merge add_cases into master add_cases Created-by: zhaogrug Commit-by: zhaogrug Merged-by: cann-robot Description: ## 描述 新增仓内新版ttk用例 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue [#4223](https://gitcode.com/cann/ops-nn/issues/4223) <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 冒烟测试,本地验证 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:用例添加 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7583 | 3 months ago | |
AddLayerNorm/AddLayerNormQuant/AddRmsNorm/AddRmsNormCast/AddRmsNormDynamicQuant/AddRmsNormQuant/InplaceAddRmsNorm/RmsNorm/RmsNormGrad算子支持下一代芯片 Co-authored-by: cai-chengchao<caichengchao1@h-partners.com> # message auto-generated for no-merge-commit merge: !993 merge nn_ops_fix_1 into master AddLayerNorm/AddLayerNormQuant/AddRmsNorm/AddRmsNormCast/AddRmsNormDynamicQuant/AddRmsNormQuant/InplaceAddRmsNorm/RmsNorm/RmsNormGrad算子支持下一代芯片 Created-by: cai-chengchao Commit-by: cai-chengchao Merged-by: cann-robot Description: ## 描述 AddLayerNorm/AddLayerNormQuant/AddRmsNorm/AddRmsNormCast/AddRmsNormDynamicQuant/AddRmsNormQuant/InplaceAddRmsNorm/RmsNorm/RmsNormGrad算子支持下一代芯片 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!993 | 9 months ago | |
modified md files(for readability improvement) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !5496 merge master into master modified md files(for readability improvement) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 modified md files(for readability improvement) ## 关联的Issue Data issue ## 测试 Optimizing the data format ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-nn!5496 | 5 months ago |
AddRmsNorm
产品支持情况
| 产品 | 是否支持 |
|---|---|
| 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算子融合起来,减少搬入搬出操作。
-
计算公式:
xi=x1i+x2ix_i=x1_{i}+x2_{i} xi=x1i+x2i
RmsNorm(xi)=xiRms(x)gi, where Rms(x)=1n∑i=1nxi2+eps\operatorname{RmsNorm}(x_i)=\frac{x_i}{\operatorname{Rms}(\mathbf{x})} g_i, \quad \text { where } \operatorname{Rms}(\mathbf{x})=\sqrt{\frac{1}{n} \sum_{i=1}^n x_i^2+eps} RmsNorm(xi)=Rms(x)xigi, where Rms(x)=n1i=1∑nxi2+eps
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x1 | 输入 | 用于Add计算的第一个输入,对应公式中的`x1`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| x2 | 输入 | 用于Add计算的第二个输入,对应公式中的`x2`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| gamma | 输入 | 表示RmsNorm的缩放因子(权重),对应公式中的`g`。shape需要与`x1`后几维保持一致,后几维为x1需要norm的维度。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| epsilon | 可选属性 |
|
FLOAT | - |
| y | 输出 | 表示最后的输出,Device侧的aclTensor,对应公式中的`RmsNorm(x)`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
| rstd | 输出 | 表示归一化后的标准差,对应公式中的`Rms(x)`。 | FLOAT32 | ND |
| x | 输出 | 表示Add计算的结果,对应公式中的`x`。 | FLOAT32、FLOAT16、BFLOAT16 | ND |
-
Atlas 推理系列产品:参数
x1、x2、gamma、y、x的数据类型不支持BFLOAT16。 -
Kirin X90/Kirin 9030处理器系列产品:x1、x2、gamma、y和x的数据类型不支持BFLOAT16。
约束说明
无
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_add_rms_norm | 通过aclnnAddRmsNorm接口方式调用AddRmsNorm算子。 |
| 图模式 | - | 通过算子IR构图方式调用AddRmsNorm算子。 |