本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
add st_950 action in compile Co-authored-by: he_kan<hekan4@huawei.com> # message auto-generated for no-merge-commit merge: !9538 merge master into master add st_950 action in compile Created-by: he_kan Commit-by: he_kan Merged-by: cann-robot Description: ## 描述 将st_950,放到pr_smoke中 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9538 | 4 天前 | |
relu/softmax_v2/softplus算子支持新平台 Co-authored-by: ASCEND222<dongfei16@h-partners.com> # message auto-generated for no-merge-commit merge: !9463 merge master into master relu/softmax_v2/softplus算子支持新平台 Created-by: ASCEND222 Commit-by: ASCEND222 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 算子支持新平台 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5422 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9463 | 4 天前 | |
refactor(pooling):池化算子重复代码收编 Co-authored-by: ZhouChuping<24171214023@stu.xidian.edu.cn> # message auto-generated for no-merge-commit merge: !9305 merge 池化重构 into master refactor(pooling):池化算子重复代码收编 Created-by: qq_52056150 Commit-by: ZhouChuping Merged-by: cann-robot Description: ## 描述 降低池化类算子的代码重复率,抽取重复代码封装为函数,抽取基类。 1.抽取完全重复的函数到Pool_utils目录里 2.修改各处调用点,保证功能和重构前完全一致 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5370 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 本地验证通过,受影响算子门槛用例全部验证通过,无功能影响,线上David冒烟和OBP冒烟均通过 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 不涉及 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:降低代码重复率,重构池化类算子的代码 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9305 | 5 天前 | |
新增aclnnTopkV2接口适配TopkV2算子支持小k场景下的双调排序 Co-authored-by: caoyan_huawei<caoyan11@huawei.com> # message auto-generated for no-merge-commit merge: !8845 merge cy_br_npu_gpu_index into master 新增aclnnTopkV2接口适配TopkV2算子支持小k场景下的双调排序 Created-by: caoyan_huawei Commit-by: caoyan_huawei Merged-by: cann-robot Description: ## 概述 本 PR 为 Topk 算子新增带 sortPolicy 参数的 V2 接口 aclnnTopkV2,用于在指定条件下走 Bitonic 排序路径,使输出索引与 GPU 侧对齐。核心做法是:将原 aclnnTopkGetWorkspaceSize 的逻辑抽取为公共函数 aclnnTopkGetWorkspaceSizeCommon(新增 sortPolicy 参数),并让原 V1 接口与新 V2 接口共同复用;同时定义 Bitonic 排序的阈值与策略常量,新增 IsBitonicSort 判断,当 k 处于 [2, 32] 且 sorted 为 true、sortPolicy == 1 时,跳过原有的 IsSort/IsSortAndTopK 排序分支,改走 l0op::Topk 路径并把 sortPolicy 透传下去。 主要改动 1. 新增 TopkV2 对外接口:在 aclnn_topk.h 中声明 aclnnTopkV2GetWorkspaceSize 与 aclnnTopkV2,在 aclnn_topk.cpp 中实现,二者复用公共逻辑 aclnnTopkGetWorkspaceSizeCommon,并新增 sortPolicy 入参。 2. 重构 workspace 计算逻辑:原 aclnnTopkGetWorkspaceSize 函数体被抽取为带 sortPolicy 参数的 aclnnTopkGetWorkspaceSizeCommon,原接口作为兼容入口以默认值 0 调用公共函数,行为保持不变。 3. 新增 Bitonic 排序策略判断:定义常量 BITONIC_SORT_MAX_K_THRESTHOD(32)、BITONIC_SORT_MIN_K_THRESTHOD(2)、TOP_K_BITONIC_SORT_POLICY(1),并新增 IsBitonicSort 函数;在各排序分支(IsSort、IsSortAndTopK)条件中追加 !IsBitonicSort(...),使满足条件的场景不再走 sort 分支。 4. 扩展 l0op::Topk 接口:在 common/stub/op_api/level0/topk.h 中声明带 sortPolicy 参数的新 Topk 重载,并在 common/stub/op_api/op_api_stub.cpp 中补充对应的 stub 实现;aclnn_topk.cpp 中的各 l0op::Topk 调用点均改为传入 sortPolicy。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5236 ## 测试 ST, UT,二级冒烟测试正常 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8845 | 4 天前 | |
fix: 修复 npu_clear_float_status 算子 codecheck 告警(宏定义分号/const 修饰/头文件自包含) Co-authored-by: wuchengwen_oh<wuchengwen4@huawei.com> # message auto-generated for no-merge-commit merge: !9604 merge fix/npu_clear_float_status_codecheck into master fix: 修复 npu_clear_float_status 算子 codecheck 告警(宏定义分号/const 修饰/头文件自包含) Created-by: wuchengwen_oh Commit-by: wuchengwen_oh Merged-by: cann-robot Description: ## 描述 修复 npu_clear_float_status 算子的 codecheck 静态检查告警(共 7 条),改动均不涉及算子功能逻辑: 1. **宏定义末尾多余分号**( control/npu_clear_float_status/examples/test_geir_npu_clear_float_status.cpp) - 删除 ADD_INPUT_MODE / ADD_CONST_INPUT / ADD_OUTPUT_MODE 三个宏定义末尾的分号,由宏调用处提供分号,与仓内其他算子示例写法一致(如 confusion_softmax_grad 等) 2. **只读 context 指针参数补充 const 修饰** - op_host/npu_clear_float_status_infershape.cpp:InferShapeValidateDtype(gert::InferShapeContext* context) 改为 const gert::InferShapeContext* context - op_host/arch35/npu_clear_float_status_tiling_arch35.cpp:ValidateDtype(gert::TilingContext* context) 改为 const gert::TilingContext* context - 两处函数体内仅调用 const 成员函数(GetInputDesc/GetOutputDesc/GetNodeName),const 化安全无行为变化 3. **头文件自包含**(op_kernel/arch35/npu_clear_float_status_tiling_data.h) - 结构体使用 int32_t,补充 #include <cstdint>,使头文件可独立编译 ## 关联的Issue 关联Issue #5405 ## 测试 - [x] ophost UT:bash build.sh --ophost -u --ops=npu_clear_float_status --soc=ascend950,运行 nn_op_host_ut --gtest_filter='*NPUClearFloatStatus*',tiling/infershape 共 2 个用例全部 PASSED - [x] geir 示例:bash build.sh --run_example npu_clear_float_status graph --soc=ascend950,FP32_fixed_8_S 与 FP32_fixed_8_D 两个用例 Build/RunGraph/Output 均 OK,2/2 passed - [x] opkernel:bash build.sh --opkernel --ops=npu_clear_float_status --soc=ascend950,Build binary SUCCESS - [x] 头文件独立编译:g++ -std=c++17 -fsyntax-only npu_clear_float_status_tiling_data.h 通过 - 测试环境:Ascend950PR + cann-9.2.0 ## 文档更新 无 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9604 | 4 天前 | |
【文档易用性】修改属性初始值 Co-authored-by: yejiani<yejiani2@huawei.com> # message auto-generated for no-merge-commit merge: !9617 merge fix_doc into master 【文档易用性】修改属性初始值 Created-by: yejiani Commit-by: yejiani Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> convStrides、convPads等属性在后续aclCreateIntArray(xxx, 2)取值时只取了前两维,但数组却声明为4维,与文档"数组长度需等于input维度减2"的约束形式不符,容易误导读者 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5416 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 页面已更新显示为2维 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> aclnnConvolution.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9617 | 4 天前 | |
[CANNBot]NpuGetFloatStatus算子支持Ascend950 Co-authored-by: m0_46386992<wanghongbin19@huawei.com> # message auto-generated for no-merge-commit merge: !9091 merge add_npu_get_float_status into master [CANNBot]NpuGetFloatStatus算子支持Ascend950 Created-by: m0_46386992 Commit-by: m0_46386992 Merged-by: cann-robot Description: ## 描述 NpuGetFloatStatus算子支持Ascend950 该算子用于读取NPU硬件浮点溢出状态寄存器。在ascend950上为空壳实现(950不支持get_overflow_status接口),overflowStatus固定为0,不修改输入tensor,输出固定全零。 ## 关联的issue https://gitcode.com/cann/ops-nn/issues/5331 ## 测试 - GEIR通路验证通过(静态/动态) - 黑盒、白盒、网络用例通过100% - 二级冒烟测试通过 ## 文档更新 - 新增README.md - 更新docs/zh/op_list.md(control分类新增条目) ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述 ## AI/Agent 生成声明 代码来源: - [ ] 纯人工手写 - [ ] AI 辅助编写 - [x] AI 完全生成 人工审查:已完成 测试验证:已通过 合规检查:已完成 See merge request: cann/ops-nn!9091 | 5 天前 | |
modify examples/fast_kernel_launch_example/README.md Co-authored-by: yolic<chenyuning1@huawei.com> # message auto-generated for no-merge-commit merge: !9440 merge 0828_torch_readme into master modify examples/fast_kernel_launch_example/README.md Created-by: yolic Commit-by: yolic Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改 examples/fast_kernel_launch_example/README.md,新增soc说明 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#5302](https://gitcode.com/cann/ops-nn/issues/5302) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了 examples/fast_kernel_launch_example/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9440 | 8 天前 | |
AIDD扫描链接问题修改 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !9611 merge master into master AIDD扫描链接问题修改 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 AIDD扫描链接问题修改 ## 关联的Issue 例如:关联Issue #5254 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9611 | 5 天前 | |
fix(foreach_minimum_scalar_list):功能问题修复,重构 arch35 SIMT 实现,按 tensor 下发 VF_CALL 并改用结构体 tiling 数据 Co-authored-by: ZhouChuping<24171214023@stu.xidian.edu.cn> # message auto-generated for no-merge-commit merge: !9462 merge foreach_minimum_scalar_list into master fix(foreach_minimum_scalar_list):功能问题修复,重构 arch35 SIMT 实现,按 tensor 下发 VF_CALL 并改用结构体 tiling 数据 Created-by: qq_52056150 Commit-by: ZhouChuping Merged-by: cann-robot Description: ## 描述 修复 TensorList 多 Tensor 计算及 scalar 映射问题;重构 arch35 SIMT 实现,按 Tensor 获取地址、元素数和 scalar 并分别下发 VF_CALL;改用结构体 Tiling 数据传递 tensorCount/tensorElements;补齐 FP16/BF16/INT32 计算类型提升、NaN 传播及空 Tensor 处理。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5386 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 本地复跑问题case后精度pass,批跑白盒300条用例无功能问题,线上David冒烟和OBP冒烟均无异常。 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 不涉及 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9462 | 5 天前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 9 天前 | |
UnsortedSegmentMax性能优化 Co-authored-by: zhangxiyan7<zhangxiyan7@huawei.com> # message auto-generated for no-merge-commit merge: !9564 merge UnsortedSegmentMax into master UnsortedSegmentMax性能优化 Created-by: zhangxiyan7 Commit-by: zhangxiyan7 Merged-by: cann-robot Description: ## 描述 针对 UnsortedSegmentMax 的 OutFl 与 SortSimt 两个模板路径进行性能优化: 1. OutFl(输出全载)模板:SIMT 多行并行 - 多行缓冲的跨行步长 accStride 采用奇数块对齐,规避 bank 冲突; - 累加器数量 P 由固定 ROW_NUM(16) 改为动态 parallelNum,在 UB 空间不溢出的前提下提升并行行数; - innerDim == 1 时走专用特化路径,省去每行冗余的2次乘法和1次加法scalar计算。 2. SortSimt 模板:int64 排序键窄化 - segmentIds 为 int64 且 num_segments ≤ INT32_MAX 时启用窄化(narrowSortKey=1):排序dtype由 int64 窄化为 int32,排序数据量与 UB 占用减半,单批可排序规模上界提升。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5413 ## 测试 目标用例性能达标(换算带宽后实现 竞品耗时/NPU耗时 > 0.2),冒烟通过。 | # | 用例 / dtype | 输入形状(seg数) | 初始NPU耗时(µs) | 初始耗时比 | 最终NPU耗时(µs) | 最终耗时比 | |---|---|---|---|---|---|---| | 1 | 000000 int32/int32 | [6628011] (117) | 481.54 | 0.055 | 41.14 | 0.642 | | 2 | 000008 fp16/int32 | [2,5,78511,4,3] (431) | 664.57 | 0.059 | 84.28 | 0.468 | | 3 | 000031 fp32/int64 | [10,5487,2,2,2,2,2,2] (562) | 434.29 | 0.033 | 69.76 | 0.206 | | 4 | 000033 bf16/int64 | [8077011] (528) | 991.70 | 0.041 | 80.94 | 0.503 | | 5 | 000036 bf16/int32 | [3412,36,10] (369) | 91.46 | 0.079 | 19.11 | 0.376 | | 6 | 000050 int32/int32 | [1514,1710] (790) | 190.79 | 0.061 | 50.31 | 0.230 | | 7 | 000113 fp16/int64 | [4872008] (163) | 601.10 | 0.038 | 39.84 | 0.571 | | 8 | 000114 fp16/int32 | [793,1297] (928) | 77.62 | 0.082 | 24.33 | 0.263 | | 9 | 000133 fp32/int64 | [7,30773,7] (492) | 40.46 | 0.194 | 21.05 | 0.373 | | 10 | 000134 fp32/int32 | [13,19,31,39] (34) | 25.48 | 0.147 | 11.98 | 0.314 | | 11 | 000147 bf16/int64 | [163,4073] (71) | 86.71 | 0.057 | 20.13 | 0.246 | | 12 | 000148 bf16/int32 | [1,91,15700] (403) | 105.45 | 0.074 | 21.10 | 0.368 | | 13 | 000152 bf16/int32 | [6,6,8,313,76] (229) | 485.36 | 0.055 | 41.14 | 0.648 | | 14 | 000160 int32/int32 | [6982603] (445) | 506.42 | 0.055 | 117.41 | 0.235 | | 15 | 000168 int32/int32 | [1,2,724159,1,1] (96) | 109.50 | 0.069 | 18.62 | 0.406 | | 16 | 000171 int32/int64 | [2,388,2,220,2,2] (541) | 170.70 | 0.043 | 31.70 | 0.233 | | 17 | 000225 fp32/int32,int64 | [4678,4799] (742) | 1577.47 | 0.062 | 364.12 | 0.269 | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:UnsortedSegmentMax算子性能优化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9564 | 4 天前 | |
fix(op_host): 10 个算子补齐缺失的 InferDataType 注册 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9616 merge fix/infer-datatype-missing into master fix(op_host): 10 个算子补齐缺失的 InferDataType 注册 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 ### 问题 Relu6Grad、LambApplyOptimizerAssign、LambApplyWeightAssign、LambNextMV、LambNextMVWithDecay、LambNextRight、LambUpdateWithLr、LambUpdateWithLrV2、MultilabelMarginLoss、PoissonNllLoss 这 10 个算子在 op_host/*_infershape.cpp 中只注册了 InferShape,没有注册 InferDataType,GE 图通路上输出 dtype 缺少显式推导来源。这 10 个算子的 op_graph 原型、op_host def 与 op_kernel 均齐全,确属有 GE 图通路的算子。 ### 方法 在各算子已有的 op_host/*_infershape.cpp 中新增 InferDataType4<OpType>,并将原有 IMPL_OP_INFERSHAPE 注册扩展为 .InferShape(...).InferDataType(...)。各输出的 dtype 来源按算子语义逐个确定,未套用统一模板: | 算子 | 输出 dtype 来源 | |------|-----------------| | Relu6Grad | backprops ← gradients | | LambApplyOptimizerAssign | output0 ← grad;inputv / inputm 为同名 ref 输出,各自跟随同名输入 | | LambApplyWeightAssign | input_param 为同名 ref 输出,跟随第 5 个输入 | | LambNextMV | y1~y4 ← input_mul3 | | LambNextMVWithDecay | y1~y4 ← input_mul3 | | LambNextRight | y1、y2 ← input_square | | LambUpdateWithLr | y ← input_greater1 | | LambUpdateWithLrV2 | y ← x1 | | MultilabelMarginLoss | y ← x;**is_target ← target(INT32)** | | PoissonNllLoss | loss ← input_x | 其中 MultilabelMarginLoss 的 is_target 不能跟随 x,否则图上会把 INT32 的 is_target 推成浮点。各算子 def 中的 dtype 列表按位一一对应(lamb 系列为「全 fp16」或「全 fp32」两种组合,无混精),故以上取源自洽。 ### 关于摆放位置 仓内两种写法都有:以本 PR 基线计,op_host 的 IMPL_OP_INFERSHAPE(...).InferDataType(...) 共 323 个文件,op_graph 的 IMPL_OP(...).InferDataType(...) 共 90 个文件。本次按多数写法放在各算子已有的 op_host infershape 文件内,可直接扩展原注册行,每算子只改一个文件,diff 中仅删除 10 行旧注册行,未触碰存量代码格式。 ## 关联的Issue 关联 Issue #5417 ## 测试 bash build.sh -u --ophost --soc=ascend950 --ops=relu6_grad,lamb_apply_optimizer_assign,lamb_apply_weight_assign,lamb_next_m_v,lamb_next_m_v_with_decay,lamb_next_right,lamb_update_with_lr,lamb_update_with_lr_v2,multilabel_margin_loss,poisson_nll_loss 结果:**116 tests PASSED,0 FAILED**。其中包含本次为 10 个算子各新增的 1 条 infer_datatype 用例: [ OK ] relu6grad.relu6grad_infer_datatype [ OK ] MultilabelMarginLossInferShapeTest.multilabelmarginloss_infer_datatype [ OK ] PoissonNllLossInfershapeTest.poissonnllloss_infer_datatype [ OK ] LambApplyOptimizerAssignProtoTest.lambapplyoptimizerassign_infer_datatype [ OK ] LambApplyWeightAssignProtoTest.lambapplyweightassign_infer_datatype [ OK ] LambNextMVProtoTest.lambnextmv_infer_datatype [ OK ] LambNextMVWithDecayProtoTest.lambnextmvwithdecay_infer_datatype [ OK ] LambNextRightProtoTest.lambnextright_infer_datatype [ OK ] LambUpdateWithLrProtoTest.lambupdatewithlr_infer_datatype [ OK ] LambUpdateWithLrV2ProtoTest.lambupdatewithlrv2_infer_datatype 用例中的 ASSERT_NE(dataTypeFunc, nullptr) 实证该注册可被 OpImplRegistry 取到;MultilabelMarginLoss 那条显式断言 is_target 推导为 INT32;Relu6Grad 那条按 def 声明逐 dtype 覆盖 fp16 / fp32 / bf16。 门禁自检:clang-format 18.1.8 --style=file 20 个文件全通过;仓内 scripts/oat_check.sh 20 个文件 All checks passed;trailing-whitespace / end-of-file / 冲突标记检查通过。 **未覆盖**:本次仅验证到 op_host UT 层(用例通过 OpImplRegistry 取到 infer_datatype 函数指针后直接调用),未做真机与 GE 图 e2e 验证。 ## 文档更新 无。本次仅新增 InferDataType 注册与对应 UT,不涉及对外接口与算子资料变更。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9616 | 4 天前 | |
mmv3 support 8d input Co-authored-by: yolic<chenyuning1@huawei.com> # message auto-generated for no-merge-commit merge: !8785 merge mm8d-kernel-a2 into master mmv3 support 8d input Created-by: yolic Commit-by: yolic Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> aclnnmatmul接口支持八维输入 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#4067](https://gitcode.com/cann/ops-nn/issues/4067) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了aclnn文档 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8785 | 4 天前 | |
fix(batch_norm_grad_v3): 修复totalChannel整除MAX_CHANNEL_SIZE时dgamma/dbeta不写回GM的问题 Co-authored-by: renruhai<renruhai1@huawei.com> # message auto-generated for no-merge-commit merge: !9624 merge master into master fix(batch_norm_grad_v3): 修复totalChannel整除MAX_CHANNEL_SIZE时dgamma/dbeta不写回GM的问题 Created-by: renruhai Commit-by: renruhai Merged-by: cann-robot Description: ## 描述 修复 batch_norm_grad_v3 算子 splitLoad 路径中,当 totalChannel 能被 MAX_CHANNEL_SIZE 整除时 dgamma/dbeta 不写回 GM 的问题。 **根因**:splitLoad 路径中 copyNum = totalChannel % MAX_CHANNEL_SIZE,在整除场景下 copyNum == 0,导致 mod == copyNum - 1 永不成立,StoreOneTensor 不执行,dgamma/dbeta 计算结果停留在 UB 中不写回 GM。 **修复方案**:在 copy-in、CopyOutDBias、CopyOutDWeight 三处,当整除导致 copyNum == 0 时回退为 MAX_CHANNEL_SIZE,保证最后一轮循环的写回逻辑正常触发: cpp int64_t copyNum = MAX_CHANNEL_SIZE; if (loopId == CeilDiv(this->totalChannel, MAX_CHANNEL_SIZE) - 1) { copyNum = this->totalChannel % MAX_CHANNEL_SIZE; if (copyNum == 0) { copyNum = MAX_CHANNEL_SIZE; } } ## 关联的Issue 关联Issue #4518 ## 测试 在 0609 环境(Ascend910B3、CANN 9.1.0)编译 14 个 high_performance 变体 .o 并安装到运行时 OPP 目录,使用 issue 中的复现脚本验证: - **修复前**:触发用例(C=40960,4xCx56x56,40960 % MAX_CHANNEL_SIZE == 0 整除场景)dbeta 输出错误(gi0=-7),退出码 42(BUG_REPRODUCED) - **修复后**:触发用例与对照用例(C=30720,非整除)均通过,dbeta 输出 12544.0 与期望一致,VERDICT: NO_REPRO,退出码 0 ## 文档更新 无。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9624 | 4 天前 | |
fix(op_host): 10 个算子补齐缺失的 InferDataType 注册 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9616 merge fix/infer-datatype-missing into master fix(op_host): 10 个算子补齐缺失的 InferDataType 注册 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 ### 问题 Relu6Grad、LambApplyOptimizerAssign、LambApplyWeightAssign、LambNextMV、LambNextMVWithDecay、LambNextRight、LambUpdateWithLr、LambUpdateWithLrV2、MultilabelMarginLoss、PoissonNllLoss 这 10 个算子在 op_host/*_infershape.cpp 中只注册了 InferShape,没有注册 InferDataType,GE 图通路上输出 dtype 缺少显式推导来源。这 10 个算子的 op_graph 原型、op_host def 与 op_kernel 均齐全,确属有 GE 图通路的算子。 ### 方法 在各算子已有的 op_host/*_infershape.cpp 中新增 InferDataType4<OpType>,并将原有 IMPL_OP_INFERSHAPE 注册扩展为 .InferShape(...).InferDataType(...)。各输出的 dtype 来源按算子语义逐个确定,未套用统一模板: | 算子 | 输出 dtype 来源 | |------|-----------------| | Relu6Grad | backprops ← gradients | | LambApplyOptimizerAssign | output0 ← grad;inputv / inputm 为同名 ref 输出,各自跟随同名输入 | | LambApplyWeightAssign | input_param 为同名 ref 输出,跟随第 5 个输入 | | LambNextMV | y1~y4 ← input_mul3 | | LambNextMVWithDecay | y1~y4 ← input_mul3 | | LambNextRight | y1、y2 ← input_square | | LambUpdateWithLr | y ← input_greater1 | | LambUpdateWithLrV2 | y ← x1 | | MultilabelMarginLoss | y ← x;**is_target ← target(INT32)** | | PoissonNllLoss | loss ← input_x | 其中 MultilabelMarginLoss 的 is_target 不能跟随 x,否则图上会把 INT32 的 is_target 推成浮点。各算子 def 中的 dtype 列表按位一一对应(lamb 系列为「全 fp16」或「全 fp32」两种组合,无混精),故以上取源自洽。 ### 关于摆放位置 仓内两种写法都有:以本 PR 基线计,op_host 的 IMPL_OP_INFERSHAPE(...).InferDataType(...) 共 323 个文件,op_graph 的 IMPL_OP(...).InferDataType(...) 共 90 个文件。本次按多数写法放在各算子已有的 op_host infershape 文件内,可直接扩展原注册行,每算子只改一个文件,diff 中仅删除 10 行旧注册行,未触碰存量代码格式。 ## 关联的Issue 关联 Issue #5417 ## 测试 bash build.sh -u --ophost --soc=ascend950 --ops=relu6_grad,lamb_apply_optimizer_assign,lamb_apply_weight_assign,lamb_next_m_v,lamb_next_m_v_with_decay,lamb_next_right,lamb_update_with_lr,lamb_update_with_lr_v2,multilabel_margin_loss,poisson_nll_loss 结果:**116 tests PASSED,0 FAILED**。其中包含本次为 10 个算子各新增的 1 条 infer_datatype 用例: [ OK ] relu6grad.relu6grad_infer_datatype [ OK ] MultilabelMarginLossInferShapeTest.multilabelmarginloss_infer_datatype [ OK ] PoissonNllLossInfershapeTest.poissonnllloss_infer_datatype [ OK ] LambApplyOptimizerAssignProtoTest.lambapplyoptimizerassign_infer_datatype [ OK ] LambApplyWeightAssignProtoTest.lambapplyweightassign_infer_datatype [ OK ] LambNextMVProtoTest.lambnextmv_infer_datatype [ OK ] LambNextMVWithDecayProtoTest.lambnextmvwithdecay_infer_datatype [ OK ] LambNextRightProtoTest.lambnextright_infer_datatype [ OK ] LambUpdateWithLrProtoTest.lambupdatewithlr_infer_datatype [ OK ] LambUpdateWithLrV2ProtoTest.lambupdatewithlrv2_infer_datatype 用例中的 ASSERT_NE(dataTypeFunc, nullptr) 实证该注册可被 OpImplRegistry 取到;MultilabelMarginLoss 那条显式断言 is_target 推导为 INT32;Relu6Grad 那条按 def 声明逐 dtype 覆盖 fp16 / fp32 / bf16。 门禁自检:clang-format 18.1.8 --style=file 20 个文件全通过;仓内 scripts/oat_check.sh 20 个文件 All checks passed;trailing-whitespace / end-of-file / 冲突标记检查通过。 **未覆盖**:本次仅验证到 op_host UT 层(用例通过 OpImplRegistry 取到 infer_datatype 函数指针后直接调用),未做真机与 GE 图 e2e 验证。 ## 文档更新 无。本次仅新增 InferDataType 注册与对应 UT,不涉及对外接口与算子资料变更。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9616 | 4 天前 | |
fix: 重命名kernel侧头文件解决与host侧命名冲突并补充simt后缀 Co-authored-by: yu_qinfei<yuqinfei1@h-partners.com> # message auto-generated for no-merge-commit merge: !9554 merge rename_avg_pool_file into master fix: 重命名kernel侧头文件解决与host侧命名冲突并补充simt后缀 Created-by: yu_qinfei Commit-by: yu_qinfei Merged-by: cann-robot Description: ## 描述 重命名4个kernel侧头文件,解决与host侧头文件命名冲突并统一simt后缀命名规范: 1. pooling/avg_pool/op_kernel/arch35/avg_pool_common.h → avg_pool_kernel_common.h:与host侧 op_host/avg_pool_common.h 重名,改为 avg_pool_kernel_common.h 区分。同步更新6个引用该头文件的kernel文件(avg_pool_big_kernel.h、avg_pool_big_kernel_nhwc.h、avg_pool_nchw_small_kernel.h、avg_pool_nchw_small_kernel_pad.h、avg_pool_nhwc_small_kernel.h、avg_pool_nhwc_small_kernel_pad.h)。 2. index/gather_v2/op_kernel/arch35/gather_v2.h → gather_v2_simt.h:标识该头文件为SIMT实现,同步更新 gather_v2_apt.cpp 引用。 3. index/gather_elements/op_kernel/arch35/gather_elements.h → gather_elements_simt.h:同上,同步更新 gather_elements_apt.cpp 引用。 4. index/index_put_with_sort_v2/op_kernel/arch35/index_put_with_sort_v2.h → index_put_with_sort_v2_simt.h:同上,同步更新 index_put_with_sort_v2.cpp 引用。 所有改动仅涉及文件重命名、头文件保护宏(include guard)、文件注释及 #include 引用路径更新,不涉及任何类名或逻辑变更。 ## 关联的Issue - #5384 ## 测试 - 本地执行 pre-commit 检查全部通过(trailing-whitespace、end-of-file-fixer、clang-format、codespell、OAT Compliance Check) - 验证所有 include 引用已正确更新,无残留旧文件名引用 ## 文档更新 无 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!9554 | 5 天前 | |
fix: softmax_grad_ext fusion pass 代码审查修复(memcpy_s 安全函数)、quant_update_scatter 原型重构、leaky_relu mask 调整、tiling 告警消除及 classify_rule 测试分类调整 Co-authored-by: yuanbin_22<yuanbin22@huawei.com> # message auto-generated for no-merge-commit merge: !9190 merge fix/softmax-grad-ext-code-review into master fix: softmax_grad_ext fusion pass 代码审查修复(memcpy_s 安全函数)、quant_update_scatter 原型重构、leaky_relu mask 调整、tiling 告警消除及 classify_rule 测试分类调整 Created-by: yuanbin_22 Commit-by: yuanbin_22 Merged-by: cann-robot Description: ## 描述 本 PR 涵盖 softmax_grad_ext fusion pass 代码审查问题修复、quant_update_scatter 算子原型重构、leaky_relu arch35 内核 mask 计算调整、tiling prepare 函数未使用参数告警消除、以及 classify_rule.yaml 测试分类规则调整。共涉及 6 个文件(+150 -94 行)。 ### 涉及文件 | 文件 | 变更类型 | +行 | -行 | |------|----------|-----|-----| | activation/softmax_grad_ext/op_graph/fusion_pass/softmax_grad_ext_fusion_pass.cpp | 代码修复 | +49 | -28 | | classify_rule.yaml | 配置调整 | +45 | -88 | | index/quant_update_scatter/op_host/quant_update_scatter_def.cpp | 重构 | +46 | -63 | | quant/dynamic_block_quant/op_host/dynamic_block_quant_tiling.cpp | 告警修复 | +4 | -1 | | quant/dynamic_mx_quant/op_host/arch35/dynamic_mx_quant_tiling_arch35.cpp | 告警修复 | +4 | -1 | | activation/leaky_relu/op_kernel/arch35/leaky_relu_dag.h | 内核调整 | +2 | -3 | ### 变更内容 #### 1. softmax_grad_ext fusion pass 代码审查修复 - **严格别名违规修复**:GetAxisFromReduceSum 中 reinterpret_cast 直接解引用改为 memcpy_s(安全函数)拷贝到本地变量,并使用 OP_LOGE_IF 检查 memcpy_s 返回值是否为 EOK - **新增 #include "securec.h"**:引入 memcpy_s/EOK 定义 - **格式符修复**:axis_value(int64_t)的格式符从 %ld 改为 %lld - **返回值校验**:AddEdgeAndUpdatePeerDesc 调用使用 ES_ASSERT_GRAPH_SUCCESS 宏包装 - **魔法数字消除**:新增 9 个命名常量替换硬编码值(kUnknownShapeDim、kReduceLastAxis、kAxesShapeDim、kPatternV2VariantCount、kBinaryInputX1Idx、kBinaryInputX2Idx、kReduceSumInputXIdx、kNodeOutputIdx、kTargetSocVersion) - **日志增强**:平台不支持日志中的 Ascend950 改为引用 kTargetSocVersion 常量 #### 2. quant_update_scatter 算子原型重构 将 QuantUpdateScatter 类中各输入/输出的内联 DataType/Format/UnknownShapeFormat 向量提取为文件级 static const 命名向量(varDataType、indicesDataType、updatesDataType、quantScalesDataType、quantZeroPointsDataType、inputAndOutputFormat),消除重复代码,提升可维护性。 #### 3. leaky_relu arch35 内核 mask 计算调整 - 移除局部 constexpr uint64_t VECTOR_REG_WIDTH = 256UL(使用全局定义) - 将 Reg::UpdateMask 从循环外移入循环内,确保每次迭代 mask 与实际剩余元素匹配,避免最后一次循环处理越界 #### 4. tiling prepare 函数未使用参数告警消除 dynamic_block_quant 和 dynamic_mx_quant 的 TilingPrepare 函数中 context 参数未使用,添加 [[maybe_unused]] 属性消除编译告警,并格式化函数体。 #### 5. classify_rule.yaml 测试分类调整 将以下算子的测试代码从 activation-c@ops-nn(已发布分类)移至 VC1@ops-nn(未发布分类),并取消原 VC1 中的注释标记: - elu、elu_grad_v2、fast_gelu、fast_gelu_grad - ge_glu_grad_v2、ge_glu_v2、gelu、gelu_grad、gelu_grad_v2、gelu_quant、gelu_v2 - hardtanh_grad、leaky_relu、leaky_relu_grad、p_relu、relu、relu_grad - sigmoid、sigmoid_grad、silu_grad、swi_glu_grad、swish、swish_grad - ascend_quant ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/1323 ## 测试 - softmax_grad_ext fusion pass 功能验证通过 - quant_update_scatter 算子原型注册行为不受影响 - leaky_relu FP16/BF16/FP32 各 dtype 功能验证通过 - tiling 函数编译无新增告警 - classify_rule 分类调整后 CI 流水线通过(ci-pipeline-passed) ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9190 | 5 天前 | |
修复Gru算子执行报错问题 Co-authored-by: chenyifeng<chenyifeng27@h-partners.com> # message auto-generated for no-merge-commit merge: !9449 merge gru_0828 into master 修复Gru算子执行报错问题 Created-by: chen_0715 Commit-by: chenyifeng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复GRU算子执行报错507015的问题,通过对其baseN,解决UB越界报错。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5403 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地自验证200case没问题,问题case验证通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9449 | 5 天前 | |
feat: aclnnApplyTopKTopP support Ascend 310P Co-authored-by: gcw_QnqOAGbO<2835806969@qq.com> # message auto-generated for no-merge-commit merge: !7744 merge pr-aclnn-apply-top-k-top-p-310p into master feat: aclnnApplyTopKTopP support Ascend 310P Created-by: gcw_QnqOAGbO Commit-by: gcw_QnqOAGbO Merged-by: cann-robot Description: ## 描述 aclnnApplyTopKTopP 算子新增 Ascend 310P 支持。 主要改动: - 新增 arch20 kernel(310P 专用),适配 310P 平台约束:DataCopyPad 禁用(用 DataCopy + AlignUp 替代)、SetValue 到 GM 需管线同步(SToMTE3Sync/MTE3ToSSync)、无 BF16 硬件 - GROUP_SIZE = BLOCK_BYTES / sizeof(outputT),确保 group 批量输出时 DataCopy 长度对齐(fp32=8,fp16=16) - batch 间增加 SToMTE2Sync,防止 S 管线 scatter 读 sortedValueLocal 时被下一 batch 的 MTE2 DataCopy 覆盖 - top-p only 模式(tilingKey=2)在 310P 上复用 combined kernel + SetMode(2),kthValue=-1e30 旁路 top-k,避免独立 top-p kernel 的 v-split 跨 core softMaxGm 竞争问题 - def.cpp 新增 ascend310p AICore config,binary config 注册 fp32 + fp16 - tiling outTensorBytes 修正为 BLOCK_BYTES * dataNumInit_,匹配 kernel 实际分配 - aclnn 接口名 aclnnApplyTopKTopP,PR 合入后即为本实现,opplugin(torch_npu.npu_top_k_top_p)直接调用 ## 关联的Issue [Requirement|需求建议]: aclnnApplyTopKTopP 算子新增 Ascend 310P 支持 ## 测试 - C++ example 验证:8 组 shape × 2 dtype(fp32/fp16)= 16 个 case 全部 PASS - opplugin 全链路验证(torch_npu.npu_top_k_top_p):13 组 shape × 2 dtype × 3 模式(combined/top-k only/top-p only)= 78 个 case 全部 PASS - ATK 精度测试:fp32/fp16,combined/top-k/top-p 三种模式均通过(自定义对称差精度比对,允许 1 元素/batch 的 cumsum 精度边界差异) - 已知限制:batch ≥ 65534 时 CANN 内置 Sort 崩溃(非本算子问题),测试用例限制 batch ≤ 32768 ## 文档更新 - README.md:Atlas 推理系列产品支持状态改为 √ - aclnnApplyTopKTopP.md:Atlas 推理系列产品支持状态改为 √ - arch20 kernel 头部添加 DataCopy consumer contract 注释 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7744 | 5 天前 | |
add ut example Co-authored-by: zhangquanxin<zhangquanxin7@h-partners.com> # message auto-generated for no-merge-commit merge: !9308 merge conver_percent into master add ut example Created-by: zhangquanxin Commit-by: zhangquanxin Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 该 PR(add ut example)主要是为算子 tiling 逻辑补充/扩展单元测试示例,未涉及生产代码改动。其一,在 quant_batch_matmul_v4 的 per-group basic API tiling 测试 test_quant_batch_matmul_v4_pergroup_basic_api_tiling.cpp 中引入 variant 参数化机制,将原先写死的 transA、transB、groupSize、各输入/输出 dtype、x1Format、hasBias 等改为可配置,从而覆盖多种非法参数与边界场景;其二,重写 weight_quant_batch_matmul_v2 的 iterbatch tiling 测试 test_weight_quant_batch_matmul_v2_iterbatch_tiling.cpp,支持解析 enableUncache 与独立的权重 batch 维度,并新增 ASW(L2 uncache)与广播相关用例,扩大对 SetDisableL2cache、CalL1Tiling/GetBroadCastInfo 等分支的覆盖。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> issue https://gitcode.com/cann/ops-nn/issues/5266 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ut测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9308 | 7 天前 | |
add_rms_norm_dynamic_mx_quant算子新增可选输入x3及torch extension适配 Co-authored-by: wangqi_ai<wangqi195@hisilicon.com> # message auto-generated for no-merge-commit merge: !8520 merge feat/add_rms_norm_dynamic_mx_quant_x0 into master add_rms_norm_dynamic_mx_quant算子新增可选输入x3及torch extension适配 Created-by: wangqi_ai Commit-by: wangqi_ai Merged-by: cann-robot Description: ## 描述 为 add_rms_norm_dynamic_mx_quant 算子新增可选输入 x3,支持 x = (x3+x1)+x2 三路残差加法融合。x3 位于 beta 之后(输入索引 4),dtype 为 {FLOAT16, BFLOAT16}。当 x3 缺省时算子行为与 V1 完全一致;当 x3 传入时,计算公式变为 x = (x3+x1)+x2,加法顺序匹配残差加法语义。 同时新增 aclnnAddRmsNormDynamicMxQuantV2 两段式 API,将 FP8/FP4 分离 kernel 统一为模板类,修复 SPLIT_R pipeline race,并补充全量泛化测试。 torch_extension 层接口从算子私有目录迁移至 nn 仓公共目录并更名为 add_rms_norm_dynamic_quant(去掉 mx,为后续多量化类型统一接口预留);ST 用例 CSV 按 TTK 规范迁入 tests/st/arch35/。 ### 改动原因 大模型推理场景中,RmsNorm 前的 Add 常需融合三路输入(残差 x3 + x1 + x2)。原算子仅支持两路(x1+x2),上层需额外调用一次 torch.add 再传入算子,引入一次额外的 GM 搬入搬出。本 MR 将三路加法融合进 kernel 内部,在 fp32 域完成累加,减少一次 kernel launch 和数据搬运。 ### 改动方法 **1. proto/def — 新增 x3 可选输入** - add_rms_norm_dynamic_mx_quant_proto.h: 在 beta 之后新增 .OPTIONAL_INPUT(x3, ...),dtype {DT_FLOAT16, DT_BF16} - add_rms_norm_dynamic_mx_quant_def.cpp: x3 声明为 OPTIONAL,tilingKey 增加 HAS_X3 维度 - add_rms_norm_dynamic_mx_quant_binary.json: 二进制配置新增 x3 输入绑定 **2. op_api — V2 两段式 API** - 新增 aclnnAddRmsNormDynamicMxQuantV2GetWorkspaceSize / aclnnAddRmsNormDynamicMxQuantV2 - 抽取 GetWorkspaceSizeImpl 共享逻辑:V1 传 x3=nullptr,V2 透传 x3 - CheckNotNull 不校验 x3(nullptr 合法,等价 V1);tiling 层 CheckX3Input() 校验 x3 存在时 shape/dtype 必须与 x1 一致 **3. tiling — HAS_X3 编译期模板参数 + GE const-compile fallback** - HAS_X3 作为编译期模板参数(非 tiling data 运行时字段),编译器消除所有 x3 运行时分支 - HAS_X3=false 变体保留用于二进制向后兼容(V1 API 复用原二进制) - tilingKey 从 5 → 10 variant(COMPUTE_MODE × Y_DATA_TYPE × HAS_X3) - 抽取 PostTilingImpl + GetTilingKeyCommon 到基类(DRY) - tiling_reduce_empty_arch35.cpp: 补充 perCorePerLoopElements < ubAlignElems 的 FloorAlign 归零 fallback 处理 - **GE const-compile fallback**(移植自 add_layer_norm_quant 模式):CompileInfo 新增 4 字段 isRegbase/vRegSize/ubBlockSize/sysWorkspaceSize,TilingPrepare 预存;CanUseRegbase/GetPlatformInfo/GetWorkspaceSize 在 platformInfo==null(GE 编译期)时从 CompileInfo 读取,解决 PreSmoke ATK const-compile 失败 **4. kernel — 统一 FP8/FP4 + 修复 SPLIT_R race** - 统一 kernel:将 4 个分离类合并为 2 个统一类,通过 IsFP4Type<T_Y> type trait 编译期推导 FP8/FP4 分支,if constexpr 消除运行时开销。净减约 916 行重复代码 - 删除死代码:移除未调用的 MxQuantDeletePadData - 修复 SPLIT_R MTE2→V pipeline race:Phase1 写 x_out 到 GM(MTE3),Phase2 读回(MTE2)。替换粗粒度 PipeBarrier 为精确的 MTE3_MTE2 + MTE2_V event flag - 修复加法顺序:(x3+x1)+x2,匹配残差加法语义 **5. torch_extension — 迁移公共目录 + 接口更名** - 代码从算子私有目录 norm/add_rms_norm_dynamic_mx_quant/torch_extension/ 迁移至 nn 仓公共目录 torch_extension/cann_ops_nn/ops/norm/add_rms_norm_dynamic_quant/,便于后续多个量化场景算子共用该 torch 接口 - torch API 更名为 add_rms_norm_dynamic_quant(去掉 mx,为后续扩展其他量化类型的统一接口预留;底层 aclnn API 名 aclnnAddRmsNormDynamicMxQuantV2 与 GE 算子名 AddRmsNormDynamicMxQuant 保持不变) - csrc/add_rms_norm_dynamic_quant.cpp: C++ binding(始终走 V2 API,x3 为 None 时传 nullptr 等价 V1) - add_rms_norm_dynamic_quant.py: Python wrapper(schema/meta/PrivateUse1,meta 校验 FP4 scale_alg==0 与 C++ 一致) - graph_convert_add_rms_norm_dynamic_quant.py: torchair dynamo GE 图转换,含 FP4 打包后处理(Reshape→Bitcast→Reshape 链将 GE 层未打包 FP4 输出转为 torch 层 uint8 打包) **6. ST 用例规范化(TTK 目录与命名约定)** - 用例 CSV 从 tests/assets/ 迁移至 tests/st/arch35/,按 TTK 规范命名:ttk_kernel/ttk_aclnn/ttk_e2e/ttk_geir_add_rms_norm_dynamic_mx_quant_st.csv,CI(ops_st_test.sh)可自动发现执行 - golden.py 适配新版 TTK:删除手写 FrameworkApiInfoKeeper.register() 参数注册(签名改由算子自带 schema 自动解析),__spec__ 注册 4 段名 torch.ops.cann_ops_nn.add_rms_norm_dynamic_quant - golden 新增 pre_compare 钩子:将 NPU 侧 uint8 打包 FP4 输出解包为 float4,使比对走 requant 判据 - 修复 golden bf16 输入静默提升为 fp32 的问题(位保留 view 转换),消除 SPLIT_R 边界场景 mxscale 1-bit 级偏差 **7. 文档** - 新增 aclnnAddRmsNormDynamicMxQuantV2.md,格式对齐 V1 文档 - README 更新 torch_extension 调用说明(包名 cann_ops_nn、接口名、新代码路径) ## 测试 ### 精度验证(TTK 框架,Ascend950PR,上机实测) - Kernel 模式:105/105 PASS(10 tilingKey variant × 边界场景,86 条含 x3) - ACLNN 模式:105/105 PASS(V1 + V2 API × 全 dstType/scaleAlg/roundMode 组合,105 条含 x3/V2) - E2E 模式(torch extension 标准包 cann_ops_nn,接口名 add_rms_norm_dynamic_quant):41/41 PASS(V1/V2 × FP8_E4M3/E5M2/FP4_E2M1/E1M2 × SPLIT_R 边界/bfloat16/beta=None/1D-4D,4 输出 y/x/mxscale/rstd 全比对) - GEIR 模式:18 条用例 - golden.py 合并 e2e spec(__spec__ + torch<->numpy 适配),--plugin tests 一条参数通吃 kernel/aclnn/e2e 三模式 ### torch_extension 套件(pytest,上机实测) - 104 passed, 0 skipped:全 tilingKey 变体、图模式(torchair + torch.compile)、FP4/FP8、fp16/bf16、SPLIT_R 性能基准 - FP4 性能用例改为偶数 R 参数化收集(替代运行时 skip,报告无跳过项) ### 端到端上机验证(Ascend950PR + CANN 9.2.0) - CMake 裁剪单算子 + build.sh --pkg --soc=ascend950 --vendor_name=custom_nn 整包编译,run 包安装后 torch.ops.cann_ops_nn.add_rms_norm_dynamic_quant JIT 编译执行通过 - 冒烟数值验证:rstd 误差 5.96e-08、x_out 达 fp16 精度上限、FP4 打包输出 shape/dtype 正确 ### UT(CMake 编译) - test_aclnn_add_rms_norm_dynamic_mx_quant.cpp: 17 个 TEST_F - test_add_rms_norm_dynamic_mx_quant_tiling.cpp: 33 个 TEST_F(新增 tiling_prepare_stores_const_compile_fields 验证 TilingPrepare 预存 GE const-compile fallback 字段;同步 UT 镜像 CompileInfo 至 6 字段,修复 OOB 越界读;更正 7 个 tiling-key 期望值,**全量 45 UT PASS**) - test_add_rms_norm_dynamic_mx_quant_apt.cpp: 5 个 TEST_F ### 代码质量 - golden.py monkey-patch 加版本锁 assert(上游 dynamic_mx_quant golden API 变更时 fail-fast) - pre-commit 全部通过(clang-format / ruff-check / ruff-format / codespell) ## 文档更新 - 新增 docs/aclnnAddRmsNormDynamicMxQuantV2.md - 更新 docs/zh/menu_aclnn_api.md、docs/zh/op_api_list.md - 更新 README.md ## 关联的Issue - #4693(需求:新增可选输入 x3) - #4939(需求:torch extension 适配) ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8520 | 7 天前 | |
md大模型检测低错修复 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !9420 merge master into master md大模型检测低错修复 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> md aidd大模型检测低错修复 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5254 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> acl*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9420 | 8 天前 | |
修改matmul 算子atoll 异常反馈判断 Co-authored-by: chenqi317<chenqi317@huawei.com> # message auto-generated for no-merge-commit merge: !7083 merge master into master 修改matmul 算子atoll 异常反馈判断 Created-by: chenqi317 Commit-by: chenqi317 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改matmul 算子atoll 异常反馈判断,异常时返回默认值 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/3882 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7083 | 1 个月前 | |
动态库解耦 Co-authored-by: 18811725231<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !8927 merge master into master 动态库解耦 Created-by: yang-di52 Commit-by: 18811725231 Merged-by: cann-robot Description: ## 描述 本 PR 旨在将算子侧代码与 legacy 动态库(libophost_comm_legacy.so)解耦:LegacyCommonMgr 新增 isSupported_ 支持位与 IsSupport() 接口,依据编译宏 ASCEND_COMPUTE_UNIT 判断当前 SoC 版本是否属于受支持集合 SUPPORTED_VERS(ascend910b、ascend910_93、ascend310p、ascend310b、ascend910),仅受支持时才 dlopen 加载 legacy 库;各 legacy 封装接口在不受支持时提前短路返回,matmul 系列算子的 tiling 流程同步改为容忍 legacy 能力缺失而不再硬失败,并配套调整 CMake 编译宏与 UT 测试。 ## 关联的Issue [5093](https://gitcode.com/cann/ops-nn/issues/5093) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8927 | 11 天前 | |
aclnnQuantMatmulWeightNz 补充WeightQuantPreProcess接口aclnn资料 Co-authored-by: renzetao<renzetao2@huawei.com> # message auto-generated for no-merge-commit merge: !8866 merge data_revise into master aclnnQuantMatmulWeightNz 补充WeightQuantPreProcess接口aclnn资料 Created-by: renzetao Commit-by: renzetao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> aclnnQuantMatmulWeightNz补充weightQuantPreProcess的调用example ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4898](https://gitcode.com/cann/ops-nn/issues/4898) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> bash build.sh --run_example 测试通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> aclnnQuantMatmulWeightNz.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8866 | 17 天前 | |
fix: Modify the AIDD docs issue Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !8149 merge master into master fix: Modify the AIDD docs issue Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 修改AIDD扫描的核心资料问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#3939](https://gitcode.com/cann/ops-nn/issues/3939) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8149 | 1 个月前 | |
update download ops-test-kit and update case for st Co-authored-by: he_kan<hekan4@huawei.com> # message auto-generated for no-merge-commit merge: !9537 merge ci into master update download ops-test-kit and update case for st Created-by: he_kan Commit-by: he_kan Merged-by: cann-robot Description: ## 描述 1. 更新ops_st_test.sh脚本中下载ops-test-kit的方式,由原有的配置make文件下载,改为直接用git clone下载 2. 针对线上CI模式,不返回失败,在正式上线前不阻塞CI 3. 更新非量化mm类用例,减少执行时间 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> Issue #4426 ## 测试 <!--描述进行了哪些测试来验证你的改动。-->  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9537 | 5 天前 | |
产品文档中png文件改为英文名 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !8300 merge master into master 产品文档中png文件改为英文名 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 产品文档中的png图片名由中文改为英文 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#4260](https://gitcode.com/cann/ops-nn/issues/4260) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> NA ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> png和相关的link md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8300 | 1 个月前 | |
init | 11 个月前 | |
add hard_sigmoid for ascend950 Co-authored-by: tianyu52<tianyu52@huawei.com> # message auto-generated for no-merge-commit merge: !7874 merge master into master add hard_sigmoid for ascend950 Created-by: tianyu52 Commit-by: tianyu52 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> add hard_sigmoid for ascend950 hard_sigmoid适配950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> UT/ST pass ; ops-test-kit 测试900+ 用例pass ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> activation/hard_sigmoid/README.md activation/hard_sigmoid/docs/aclnnHardsigmoid&aclnnInplaceHardsigmoid.md docs/zh/op_api_list.md docs/zh/op_api_list.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7874 | 1 个月前 | |
cannsim改名为npusim Co-authored-by: liangbinglong<liangbinglong@huawei.com> # message auto-generated for no-merge-commit merge: !8349 merge master into master cannsim改名为npusim Created-by: liangbinglong Commit-by: liangbinglong Merged-by: cann-robot Description: ## 描述 经TSC评审,cannsim工具正式更名为npusim,相关命令行、资料同步刷新,cannsim作为别名兼容一段时间,需要尽快切换 ## 关联的Issue NA ## 测试 使用最新链接版本测试,相关命令行已经全部更名为npusim ## 文档更新 更新doc下面的调优部分文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8349 | 29 天前 | |
fix: Modify the AIDD docs issue Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !8149 merge master into master fix: Modify the AIDD docs issue Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 修改AIDD扫描的核心资料问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#3939](https://gitcode.com/cann/ops-nn/issues/3939) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8149 | 1 个月前 | |
fix Third_Party_Open_Source_Software_List.yaml Co-authored-by: liuyufan0725<liuyufan9@huawei.com> # message auto-generated for no-merge-commit merge: !1879 merge fix_yaml into master fix Third_Party_Open_Source_Software_List.yaml Created-by: liuyufan0725 Commit-by: liuyufan0725 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新三方依赖清单Third_Party_Open_Source_Software_List.yaml 1、增加protobuf 2、将nlohmann/json修改为json ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#1042](https://gitcode.com/cann/ops-nn/issues/1042) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 不涉及 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了Third_Party_Open_Source_Software_List.yaml ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!1879 | 6 个月前 | |
【描 述】 eigen update to 5.0.0 Co-authored-by: j00427146<jialimin1@huawei.com> # message auto-generated for no-merge-commit merge: !1152 merge master into master 【描 述】 eigen update to 5.0.0 Created-by: jialimin1 Commit-by: j00427146 Merged-by: cann-robot Description: ## 描述 现开源软件eigen 3.4.0 EOM,Eigen 从3.4.0版本升级到5.0.0,解决生命周期问题。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-nn/issues/975 https://gitcode.com/cann/ops-nn/issues/389 ## 测试   ## 文档更新 SECURITY.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:Update Eigen to 5.0.0 See merge request: cann/ops-nn!1152 | 6 个月前 | |
fix(build): 修复run_example默认模式判断libascendcl.so时[ ]缺空格导致错误链接-lacl_rt的问题 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !9181 merge index_example into master fix(build): 修复run_example默认模式判断libascendcl.so时[ ]缺空格导致错误链接-lacl_rt的问题 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复run_example默认模式判断libascendcl.so时[ ]缺空格导致错误链接-lacl_rt的问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5128 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9181 | 10 天前 | |
fix: softmax_grad_ext fusion pass 代码审查修复(memcpy_s 安全函数)、quant_update_scatter 原型重构、leaky_relu mask 调整、tiling 告警消除及 classify_rule 测试分类调整 Co-authored-by: yuanbin_22<yuanbin22@huawei.com> # message auto-generated for no-merge-commit merge: !9190 merge fix/softmax-grad-ext-code-review into master fix: softmax_grad_ext fusion pass 代码审查修复(memcpy_s 安全函数)、quant_update_scatter 原型重构、leaky_relu mask 调整、tiling 告警消除及 classify_rule 测试分类调整 Created-by: yuanbin_22 Commit-by: yuanbin_22 Merged-by: cann-robot Description: ## 描述 本 PR 涵盖 softmax_grad_ext fusion pass 代码审查问题修复、quant_update_scatter 算子原型重构、leaky_relu arch35 内核 mask 计算调整、tiling prepare 函数未使用参数告警消除、以及 classify_rule.yaml 测试分类规则调整。共涉及 6 个文件(+150 -94 行)。 ### 涉及文件 | 文件 | 变更类型 | +行 | -行 | |------|----------|-----|-----| | activation/softmax_grad_ext/op_graph/fusion_pass/softmax_grad_ext_fusion_pass.cpp | 代码修复 | +49 | -28 | | classify_rule.yaml | 配置调整 | +45 | -88 | | index/quant_update_scatter/op_host/quant_update_scatter_def.cpp | 重构 | +46 | -63 | | quant/dynamic_block_quant/op_host/dynamic_block_quant_tiling.cpp | 告警修复 | +4 | -1 | | quant/dynamic_mx_quant/op_host/arch35/dynamic_mx_quant_tiling_arch35.cpp | 告警修复 | +4 | -1 | | activation/leaky_relu/op_kernel/arch35/leaky_relu_dag.h | 内核调整 | +2 | -3 | ### 变更内容 #### 1. softmax_grad_ext fusion pass 代码审查修复 - **严格别名违规修复**:GetAxisFromReduceSum 中 reinterpret_cast 直接解引用改为 memcpy_s(安全函数)拷贝到本地变量,并使用 OP_LOGE_IF 检查 memcpy_s 返回值是否为 EOK - **新增 #include "securec.h"**:引入 memcpy_s/EOK 定义 - **格式符修复**:axis_value(int64_t)的格式符从 %ld 改为 %lld - **返回值校验**:AddEdgeAndUpdatePeerDesc 调用使用 ES_ASSERT_GRAPH_SUCCESS 宏包装 - **魔法数字消除**:新增 9 个命名常量替换硬编码值(kUnknownShapeDim、kReduceLastAxis、kAxesShapeDim、kPatternV2VariantCount、kBinaryInputX1Idx、kBinaryInputX2Idx、kReduceSumInputXIdx、kNodeOutputIdx、kTargetSocVersion) - **日志增强**:平台不支持日志中的 Ascend950 改为引用 kTargetSocVersion 常量 #### 2. quant_update_scatter 算子原型重构 将 QuantUpdateScatter 类中各输入/输出的内联 DataType/Format/UnknownShapeFormat 向量提取为文件级 static const 命名向量(varDataType、indicesDataType、updatesDataType、quantScalesDataType、quantZeroPointsDataType、inputAndOutputFormat),消除重复代码,提升可维护性。 #### 3. leaky_relu arch35 内核 mask 计算调整 - 移除局部 constexpr uint64_t VECTOR_REG_WIDTH = 256UL(使用全局定义) - 将 Reg::UpdateMask 从循环外移入循环内,确保每次迭代 mask 与实际剩余元素匹配,避免最后一次循环处理越界 #### 4. tiling prepare 函数未使用参数告警消除 dynamic_block_quant 和 dynamic_mx_quant 的 TilingPrepare 函数中 context 参数未使用,添加 [[maybe_unused]] 属性消除编译告警,并格式化函数体。 #### 5. classify_rule.yaml 测试分类调整 将以下算子的测试代码从 activation-c@ops-nn(已发布分类)移至 VC1@ops-nn(未发布分类),并取消原 VC1 中的注释标记: - elu、elu_grad_v2、fast_gelu、fast_gelu_grad - ge_glu_grad_v2、ge_glu_v2、gelu、gelu_grad、gelu_grad_v2、gelu_quant、gelu_v2 - hardtanh_grad、leaky_relu、leaky_relu_grad、p_relu、relu、relu_grad - sigmoid、sigmoid_grad、silu_grad、swi_glu_grad、swish、swish_grad - ascend_quant ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/1323 ## 测试 - softmax_grad_ext fusion pass 功能验证通过 - quant_update_scatter 算子原型注册行为不受影响 - leaky_relu FP16/BF16/FP32 各 dtype 功能验证通过 - tiling 函数编译无新增告警 - classify_rule 分类调整后 CI 流水线通过(ci-pipeline-passed) ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9190 | 5 天前 | |
fix: Modify the AIDD docs issue Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !8149 merge master into master fix: Modify the AIDD docs issue Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 修改AIDD扫描的核心资料问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#3939](https://gitcode.com/cann/ops-nn/issues/3939) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8149 | 1 个月前 | |
调整nn仓第三方依赖 Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !7845 merge pr_6933 into master 调整nn仓第三方依赖 Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 1. 文档声称 install_deps.sh 可一键安装所有列出的基础依赖("上述依赖可通过项目脚本一键安装"),但实际脚本仅安装了 GCC、CMake、pigz、dos2unix、patch,未安装 googletest(文档明确列为基础依赖项之一),开发者需手动下载源码、编译并安装 googletest,与文档"一键安装"的描述不符 2. python requirements多两个不需要的依赖 ### 主要修改 为install_deps.sh 增加了安装gtest的功能 删除requirements中多余的两个依赖 ## 关联的Issue [#4256](https://gitcode.com/cann/ops-nn/issues/4256) [#4154](https://gitcode.com/cann/ops-nn/issues/4154) ## 测试  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7845 | 1 个月前 | |
调整nn仓第三方依赖 Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !7845 merge pr_6933 into master 调整nn仓第三方依赖 Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 1. 文档声称 install_deps.sh 可一键安装所有列出的基础依赖("上述依赖可通过项目脚本一键安装"),但实际脚本仅安装了 GCC、CMake、pigz、dos2unix、patch,未安装 googletest(文档明确列为基础依赖项之一),开发者需手动下载源码、编译并安装 googletest,与文档"一键安装"的描述不符 2. python requirements多两个不需要的依赖 ### 主要修改 为install_deps.sh 增加了安装gtest的功能 删除requirements中多余的两个依赖 ## 关联的Issue [#4256](https://gitcode.com/cann/ops-nn/issues/4256) [#4154](https://gitcode.com/cann/ops-nn/issues/4154) ## 测试  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7845 | 1 个月前 | |
Remove the dependency asc-tool Co-authored-by: cong-jiyu<congjiyu@h-partners.com> # message auto-generated for no-merge-commit merge: !5220 merge eng into master Remove the dependency asc-tool Created-by: cong-jiyu Commit-by: cong-jiyu Merged-by: cann-robot Description: ## 描述 Remove the dependency asc-tool ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 工程编译验证 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!5220 | 3 个月前 |
ops-nn
🔥Latest News
- [2026/05] 优化kernel编译配置项,减少simplified_key和ascendc_config配置文件(!3330)。
- [2026/05] 引入ops-tensor,基于分层结构优化Cube类算子,减少偏移量计算和简化指令参数(!5036)。
- [2026/05] 发布生态算子的精度验收标准(!4572)。
- [2026/03] 开源算子支持下一代芯片:Ascend950PR(!450)。
- [2026/03] 新增<<<>>>的算子开发样例(!620)。
- [2026/03] 低bit类算子和融合算子支持更多数据类型:fp8/mxfp8/hifp8/mxfp4等,并支持pertensor/perchannel/pertoken/pergroup/perblock等不同量化和组合方式:全量化融合算子:quant_batch_matmul_v4,伪量化融合算子:weight_quant_batch_matmul_v2。
- [2026/03] 支持SIMD/SIMT新同构编程算子实现:[MapIndex](#660),[ScatterSub](#710)。
- [2026/01] 新增QuickStart,指导新手零基础入门算子项目部署(支持Docker环境)、算子开发和贡献流程。
- [2025/12] 开源算子支持Ascend 950PR/Ascend 950DT/KirinX90,可以通过NPU Simulator仿真工具开发调试;优化指南类文档,聚焦算子开发指南,明确最小交付件和关键示例代码,针对Ascend/samples仓算子提供迁移本项目的指导;新支持稀疏4:2量化matmul算子,针对稀疏矩阵开启硬件加速能力。
- [2025/11] 新支持算子index_fill、masked_scatter、scatter、tf_scatter_add、fused_cross_entropy_loss_with_max_sum。
- [2025/10] 新增experimental目录,完善贡献指南,支持开发者调试并贡献自定义算子。
- [2025/09] ops-nn项目首次上线,开源算子支持Atlas A2/A3系列产品。
🚀概述
ops-nn是CANN(Compute Architecture for Neural Networks)算子库中提供神经网络计算能力的高阶算子库,包括matmul类、activation类等算子,算子库架构图如下:

📌版本配套
本项目源码会跟随CANN软件版本发布,关于CANN软件版本与本项目标签的对应关系请参阅release仓库中的相应版本说明。 请注意,为确保您的源码定制开发顺利进行,请选择配套的CANN版本与Gitcode标签源码,使用master分支可能存在版本不匹配的风险。
🛠️环境准备
环境部署是体验本项目能力的前提,请先完成NPU驱动、CANN包安装等,确保环境正常。
⬇️源码下载
环境准备好后,下载与CANN版本配套的分支源码,通用命令如下,${tag_version}替换为分支标签名。以9.0.0分支源码下载为例:
# 通用命令:git clone -b ${tag_version} https://gitcode.com/cann/ops-nn.git
git clone -b 9.0.0 https://gitcode.com/cann/ops-nn.git
说明:若环境中已存在配套分支源码,可跳过本步骤,例如CANNLab默认已提供最新版本CANN对应的源码。
📖学习教程
💬相关信息
PS:本项目功能和文档正在持续更新和完善中,欢迎您关注最新版本。