用于昇腾NPU上AI模型的算子开发、调用与调优。提供matmul、activation等高阶算子,支持fp8/mxfp8等数据类型及量化融合算子,覆盖Atlas A2/A3、Ascend 950PR等芯片,附快速入门与开发指南。【此简介由AI生成】
| Files | Last commit | Last update |
|---|---|---|
修复ut_report Co-authored-by: cui_jiahao<cuijiahao5@h-partners.com> # message auto-generated for no-merge-commit merge: !12517 merge master into master 修复ut_report Created-by: cui_jiahao Commit-by: cui_jiahao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12517 | 20 days ago | |
修改ClippedSwiglu算子torch_extension图模式键值顺序 Co-authored-by: clwsy1<wangsiyang3@huawei.com> # message auto-generated for no-merge-commit merge: !12465 merge dev into master 修改ClippedSwiglu算子torch_extension图模式键值顺序 Created-by: clwsy1 Commit-by: clwsy1 Merged-by: cann-robot Description: ## 描述 修改ClippedSwiglu算子torch_extension图模式键值顺序 ## 关联的Issue [#7197](https://gitcode.com/cann/ops-nn/issues/7197) ## 测试 全量用例测试通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12465 | 20 days ago | |
Ascend960 quant_batch_matmul_v4 A8W4 Co-authored-by: chaoying-zhang<zhangchaoying@huawei.com> # message auto-generated for no-merge-commit merge: !11520 merge to_master into master Ascend960 quant_batch_matmul_v4 A8W4 Created-by: chaoying-zhang Commit-by: chaoying-zhang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. Ascend960 quant_batch_matmul_v4 支持MxFp8Fp4/MxFp8Hif4/Fp8Fp4 TCG/S8S4 KCG 2. Ascend960 支持trans_quant_param_v2 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#6964](https://gitcode.com/cann/ops-nn/issues/6964) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 1. Ascend950 MxFp8Fp4/Fp8Fp4 TCG用例验证通过 2. Ascend960 MxFp8Fp4/MxFp8Hif4/Fp8Fp4 TCG/S8S4 KCG用例验证通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> NA ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11520 | 21 days ago | |
fix: hash trailing bytes after processed blocks Co-authored-by: yr923096443<923096443@qq.com> # message auto-generated for no-merge-commit merge: !11393 merge fix/murmur-hash-tail into master fix: hash trailing bytes after processed blocks Created-by: yr923096443 Commit-by: yr923096443 Merged-by: cann-robot Description: ## 描述 合入背景:源码审查发现,输入长度为 4n+1/2/3(n>=1)时,三份主机侧哈希函数会忽略实际尾部,导致仅尾部不同的输入产生系统性碰撞;CommonHash 还会把上一完整块的旧值混入尾部。此修复恢复尾部参与哈希的语义,并补齐仓库内回归测试。相关函数用于 Tiling 缓存及运行时知识库索引,实际影响取决于调用方的 key 长度。Issue 中提供了函数级复现与修复前后实测结果。 修复两份 MurmurHash 实现(common/src/op_host/bank_mgr/hash.cpp、matmul/common/op_host/op_tiling/hash.cpp)和 RuntimeKb::CommonHash 的尾部读取起点:处理完整的 4 字节块后,从已推进的 key / ky 读取剩余字节。 CommonHash 使用自己的 HashCombine 逻辑,仅在 (len & 3U) != 0U 时清零 tmp_ky,再组装实际尾部字节;最后一次 HashCombine(tmp_ky, hash_ky) 保留在条件之外。这样修复部分块携带前一完整块旧值的问题,同时保留长度为 4 字节倍数(含 0)以及长度小于 4 时的既有结果。 回归测试覆盖三份实际实现: - common/tests/ut/op_host/test_common_hash_tiling.cpp:保留 5 项 CommonHash 测试。 - common/tests/ut/op_host/test_murmur_hash_tiling.cpp:通过公开头文件直接调用 Ops::NN::HostTiling::MurmurHash。 - matmul/quant_batch_matmul_v3/tests/ut/op_host/test_murmur_hash_tiling.cpp:直接调用 matmul 版 Ops::NN::MurmurHash。 两个新增文件均由现有 test_*_tiling.cpp CMake 规则收集,无需额外运行仓库外脚本。 ## 关联的Issue Fixes #6976 [缺陷背景、复现步骤及验证日志](https://gitcode.com/cann/ops-nn/issues/6976)。 ## 测试 - 2026-10-20 补充独立复现:在 WSL x86_64 / GCC 15.2.0 上编译基线 c54aa50 与当前 e218d160 的三份真实源码,仅对外部日志提供桩。01 02 03 04 05 / 01 02 03 04 06 在 len=5, seed=271828 下,三份实现修复前均碰撞,修复后均能区分;同一输入长度 0、1、2、3、4、8 的结果保持一致。ASan/UBSan 无报错,详细输出见关联 Issue。 - 每份 MurmurHash 实现覆盖长度 0–16 × seed 0、1、271828、UINT32_MAX 的 68 个固定向量,另检查默认 seed。向量由 [SMHasher 的 MurmurHash3_x86_32](https://github.com/aappleby/smhasher/blob/07bb4de10a63e8cc2e1724865454eba635742383/src/MurmurHash3.cpp) 生成,并经独立 Python 计算核对;期望值固化在 UT 中。完整块使用对齐的重复字节 word,尾部使用互不相同的 80 37 e9,覆盖 1/2/3 字节尾部、多个完整块及高位字节。 - CommonHash 的 68 个独立计算向量、默认 seed 和空指针检查保持不变;其结果与 MurmurHash 分别验证。 - 编译真实的三份生产源码、仓库头文件和 GoogleTest 1.17.0,仅对外部日志提供桩;使用 g++ -std=c++17 -Wall -Wextra -Werror -fsanitize=address,undefined -fno-omit-frame-pointer -fno-strict-aliasing,9/9 测试通过,无 sanitizer 报错。 - 对两份 MurmurHash 分别进行变异验证:将尾部起点改回 src,每份失败 45 项断言;将下标改为 rest_key[i],每份失败 60 项;颠倒尾部字节读取顺序,每份失败 40 项。当前实现全部通过。 - 使用仓库真实 add_modules_ut_sources、add_all_ut_sources 和两个目录的实际 CMake 入口,确认三份测试文件被收集;最小主机构建及 CTest 通过。完整 CANN SDK 构建由本次 PR CI 验证。 - 两个新增文件的 pre-commit 检查通过(含 clang-format 18.1.8、codespell、OAT),git diff --check 通过。远端提交 e218d160 的代码树与本地验证版本一致。 ## 文档更新 无独立文档变更,已更新本 PR 的修复说明和验证记录。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 ## AI/Agent生成声明 - [x] AI辅助编写 本次修复、回归测试和验证由 Codex 辅助完成。 See merge request: cann/ops-nn!11393 | 20 days ago | |
sleep算子支持Ascend960 Co-authored-by: hw-zhangpanpan<zhangpanpan5@huawei.com> # message auto-generated for no-merge-commit merge: !11793 merge master into master sleep算子支持Ascend960 Created-by: hw-zhangpanpan Commit-by: hw-zhangpanpan Merged-by: cann-robot Description: ## 描述 为 sleep 算子新增 Ascend 960 平台(ascend960dt / ascend960pr)支持,使其可在最新 Ascend960 硬件上正常编译与运行。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/6909 ## 测试 泛化和冒烟测试 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11793 | 22 days ago | |
refactor(conv3d_backprop_filter_v2): DW算子移除 tiling 中冗余的 IsArchAfter35 判断 Co-authored-by: zjls10<zhangjiahui70@huawei.com> # message auto-generated for no-merge-commit merge: !12070 merge tiling-redundant-91095 into master refactor(conv3d_backprop_filter_v2): DW算子移除 tiling 中冗余的 IsArchAfter35 判断 Created-by: zjls10 Commit-by: zjls10 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/6887 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 1982 rdv+custom ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [√ ] 其他,请描述:cleancode ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [√ ] AI辅助编写 See merge request: cann/ops-nn!12070 | 20 days ago | |
迁移 AddRmsNormQuantFusionPass 与 AddRmsNormDynamicQuantFusionPass 两条融合规则 Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !12407 merge arn_quant_pass into master 迁移 AddRmsNormQuantFusionPass 与 AddRmsNormDynamicQuantFusionPass 两条融合规则 Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 迁移 AddRmsNormQuantFusionPass 与 AddRmsNormDynamicQuantFusionPass 两条 GE 自定义量化融合规则至本仓库,将 AddRmsNorm 与下游量化算子的组合融合为 AddRmsNormQuant / AddRmsNormDynamicQuant 算子,消除中间结果的冗余访存与算子调度开销。同步补充 UT 和文档。 ### 改动原因 量化场景中 AddRmsNorm 的输出常随后接量化算子(静态 Quantize,或动态 DynamicQuant),二者独立调度时中间结果需落回 Global Memory 再读出,存在冗余访存与调度开销。两条量化融合规则迁移至本仓库统一维护,匹配后替换为融合算子节点,提升量化场景端到端性能。 ### 改动方法 1. **静态量化规则 AddRmsNormQuantFusionPass**:识别 AddRmsNorm 后接 Quantize(可选中间 Reshape)的组合,融合为 AddRmsNormQuant 算子: - 场景一:AddRmsNorm → Quantize 直接融合; - 场景二:AddRmsNorm → Reshape → Quantize(gamma shape 与 scales/zero_points 维度不一致时使用)。 2. **动态量化规则 AddRmsNormDynamicQuantFusionPass**:识别 AddRmsNorm 后接 DynamicQuant 的组合,融合为 AddRmsNormDynamicQuant 算子,支持单路/双路模式及可选 smooth_scales(dtype 须与 x1 一致)。 3. **准入校验**:融合前 AddRmsNorm 不输出 rstd(被外部消费则拒绝)、输入 dtype 一致性、量化输出类型(int8 等)等条件校验;平台限定。 4. **UT**:AddRmsNormQuantFusionTest 5 个用例(Direct/Reshape × 无/有 offset、bf16、拒绝 rstd 被消费)、AddRmsNormDynamicQuantFusionTest 5 个用例(单路/双路 × 无/有 smooth、bf16、Reshape、拒绝 rstd 被消费)。 5. **文档**:新增 2 篇融合规则文档(融合模式、使用约束、支持型号)及 4 张配图。 6. **构建接入**:两个算子的 op_graph/CMakeLists.txt 更新,通过 _proto_headers 声明模式构造依赖的算子原型头(add_rms_norm + quantize/dynamic_quant proto);新增 UT 构建配置。 两条规则均通过 REG_FUSION_PASS(...).Stage(kAfterBuiltinFusionPass) 注册。除 op_graph/CMakeLists.txt 构建配置接入外,不修改任何既有文件逻辑。 涉及文件(16 个,+1383): - norm/add_rms_norm_quant/op_graph/fusion_pass/add_rms_norm_quant_fusion_pass.cpp/.h - norm/add_rms_norm_quant/docs/AddRmsNormQuantFusionPass.md - norm/add_rms_norm_quant/tests/ut/op_graph/test_add_rms_norm_quant_fusion_pass.cpp、CMakeLists.txt - norm/add_rms_norm_quant/op_graph/CMakeLists.txt(修改,+6) - norm/add_rms_norm_dynamic_quant/op_graph/fusion_pass/add_rms_norm_dynamic_quant_fusion_pass.cpp/.h - norm/add_rms_norm_dynamic_quant/docs/AddRmsNormDynamicQuantFusionPass.md - norm/add_rms_norm_dynamic_quant/tests/ut/op_graph/test_add_rms_norm_dynamic_quant_fusion_pass.cpp、CMakeLists.txt - norm/add_rms_norm_dynamic_quant/op_graph/CMakeLists.txt(修改,+6) - docs/zh/figures/add_rms_norm_quant_fusion_pass_1~2.png、add_rms_norm_dynamic_quant_fusion_pass_1~2.png ## 关联的Issue -https://gitcode.com/cann/ops-nn/issues/7185 ## 测试 - 新增 UT 共 10 个用例:融合命中(静态 Direct/Reshape × offset、动态单/双路 × smooth、bf16)与拒绝(rstd 被外部消费)场景。 ## 文档更新 - 新增 AddRmsNormQuantFusionPass.md:静态量化融合模式(直接/经 Reshape)、使用约束、支持型号 - 新增 AddRmsNormDynamicQuantFusionPass.md:动态量化融合模式(单/双路)、dtype/shape/attr 约束、支持型号 - 新增 4 张融合模式配图 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!12407 | 20 days ago | |
[L1] fix: ascend.cmake 的 include 列表有 4 行用 U+00A0 缩进 → CMake 把它当成 8 个独立列表项(实测),改为 ASCII 空格 Co-authored-by: eieiei<3901796952@qq.com> # message auto-generated for no-merge-commit merge: !11442 merge fix-nbsp-indent-in-ascend-cmake into master [L1] fix: ascend.cmake 的 include 列表有 4 行用 U+00A0 缩进 → CMake 把它当成 8 个独立列表项(实测),改为 ASCII 空格 Created-by: wsnidie1 Commit-by: eieiei Merged-by: cann-robot Description: ## 问题 examples/fast_kernel_launch_example/cmake/ascend.cmake 里 set(ASCEND_INCLUDE_DIRS ...) 这个列表, 第 65、67、68、69 这 4 行的行首缩进**不是普通空格,而是不换行空格 U+00A0**(每行两个,UTF-8 字节为 C2 A0): console $ sed -n '65p' examples/fast_kernel_launch_example/cmake/ascend.cmake | od -c | head -2 0000000 302 240 302 240 $ { A S C E N D _ D 0000020 I R } / o p p / b u i l t - i n 同一个列表里其余 15 行用的都是 4 个 ASCII 空格。 **CMake 不认为 U+00A0 是空白**(它的参数分隔只认空格/制表/换行),所以这 4 行不是"缩进丑一点", 而是**每个非 ASCII 空格都会变成一个独立的列表项**。在昇腾开发机(cmake 3.20.5)上按同样的字节复现: console $ cat /tmp/nbsp_demo.cmake set(INCS aa/bb cc/dd ee/ff ) list(LENGTH INCS N) message(STATUS "N=${N}") foreach(i ${INCS}) message(STATUS "item=[${i}]") endforeach() $ cmake -P /tmp/nbsp_demo.cmake -- N=5 ← 期望 3 个元素,实际 5 个 -- item=[aa/bb] -- item=[ ] ← NBSP 单独成项 -- item=[ ] ← NBSP 单独成项 -- item=[cc/dd] -- item=[ee/ff] 对应到本文件:ASCEND_INCLUDE_DIRS 会多出 **8 个内容只有一个 NBSP 的"目录"**, 它们再经 CMakeLists.txt:37 进入 INCLUDE_DIRECTORIES 参与编译。 现在的后果是列表被污染(这些"目录"不存在,编译器只会忽略); 但它是个真实的陷阱:**只要哪天这种缩进后面少打一个 ASCII 空格**, ${ASCEND_DIR}/… 就会粘成**一个**项, 路径开头带 NBSP,头文件搜索静默失效,排查成本很高。 ## 修改 把这 4 行的行首缩进换成与同文件其它行一致的 4 个 ASCII 空格,**只动行首的 8 个字符,路径本身一字不改**: diff - ${ASCEND_DIR}/opp/built-in/op_impl/ai_core/tbe/impl/ops_nn/ascendc/conv3d_v2/arch35 + ${ASCEND_DIR}/opp/built-in/op_impl/ai_core/tbe/impl/ops_nn/ascendc/conv3d_v2/arch35 - ${CMAKE_CURRENT_SOURCE_DIR}/../../conv/common/op_host/op_tiling/arch35 + ${CMAKE_CURRENT_SOURCE_DIR}/../../conv/common/op_host/op_tiling/arch35 - ${CMAKE_CURRENT_SOURCE_DIR}/../../conv/conv3d_v2/op_host/op_tiling/arch35 + ${CMAKE_CURRENT_SOURCE_DIR}/../../conv/conv3d_v2/op_host/op_tiling/arch35 - ${CMAKE_CURRENT_SOURCE_DIR}/../../conv + ${CMAKE_CURRENT_SOURCE_DIR}/../../conv ## 复验 1. 脚本硬断言:全文件 U+00A0 恰为 8 个,且全部位于第 65/67/68/69 行的行首(\xc2\xa0 \xc2\xa0 前缀), 改完文件里 \xc2\xa0 为 0; 2. 脚本硬断言:同一个列表里其余 15 行( ${…} 形式)都是 ASCII 缩进(本改动是向既有风格对齐,不是引入新风格); 3. CMake 的空白判定与"U+00A0 会单独成项"是在昇腾开发机上用 cmake -P 实测的(上面 N=5),不是推断; 4. 不改任何路径、变量名、编译选项,也不动其它文件。 See merge request: cann/ops-nn!11442 | 20 days ago | |
[L1] docs: aclnnSwishBackward.md 闭合围栏误写成 l 致代码块未闭合 Co-authored-by: eieiei<3901796952@qq.com> # message auto-generated for no-merge-commit merge: !11575 merge fix-swishbackward-fence-close into master [L1] docs: aclnnSwishBackward.md 闭合围栏误写成 l 致代码块未闭合 Created-by: wsnidie1 Commit-by: eieiei Merged-by: cann-robot Description: ## 问题 experimental/activation/swish_grad/docs/aclnnSwishBackward.md 第 52 行用 `Cpp 开启 aclnnSwishBackward 接口签名代码块,但第 58 行的闭合围栏被误写成 `l (末尾多了一个 l)。按 GFM 规则,带 info 串的 不能闭合已开启的代码块,于是该签名块未闭合、其后所有内容围栏配对整体错位(实测文件末尾残留 2 层未闭合),文档渲染异常。 ## 修复 把第 58 行 ``l 还原为闭合围栏 ` 。改后全篇代码围栏配对平衡(42/50、52/58、234/382)。 - 级别:L1(文档渲染缺陷) - 改动:1 文件,1 行(删除误入字符 l) See merge request: cann/ops-nn!11575 | 20 days ago | |
修正 ForeachRoundOffNumber README 中 roundMode Tensor 类型说明 Co-authored-by: KaranocaVe<karanocave@qq.com> # message auto-generated for no-merge-commit merge: !12126 merge fix/2026-10-14-foreach-round-off-number-roundmode-int8-doc-01 into master 修正 ForeachRoundOffNumber README 中 roundMode Tensor 类型说明 Created-by: KaranocaVe Commit-by: KaranocaVe Merged-by: cann-robot Description: 修正 ForeachRoundOffNumber README 中 roundMode Tensor 的类型说明为 INT8。算子 Proto 和经典 ACLNN 文档均只支持 INT8;INT64 适用于 V2 的 aclScalar 参数。 验证:补丁通过 git apply --check;仅修改文档,未运行构建或设备测试。 关联 Issue: https://gitcode.com/cann/ops-nn/issues/6785 See merge request: cann/ops-nn!12126 | 20 days ago | |
[feat] EmbeddingHashTableEvict算子支持960DT Co-authored-by: wsunmoon<wangming176@huawei.com> # message auto-generated for no-merge-commit merge: !12112 merge indexEmbedding into master [feat] EmbeddingHashTableEvict算子支持960DT Created-by: wsunmoon Commit-by: wsunmoon Merged-by: cann-robot Description: ## 描述 EmbeddingHashTableEvict算子适配960DT: 新增960DT二进制配置json文件 CMakeLists.txt文件配置960DT 算子信息库新增960DT ## 关联的Issue 关联Issue [#6380](https://gitcode.com/cann/ops-nn/issues/6380) ## 测试 950编译没问题; UT, ST冒烟通过 ## 文档更新 不涉及 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!12112 | 20 days ago | |
fix(non_zero): 适配 GE 图模式并补充 arch22 tiling UT Co-authored-by: xiafengkou<luojiangtao4@huawei.com> # message auto-generated for no-merge-commit merge: !12323 merge master into master fix(non_zero): 适配 GE 图模式并补充 arch22 tiling UT Created-by: xiafengkou Commit-by: xiafengkou Merged-by: cann-robot Description: ## 描述 修复 NonZero 算子(arch22 / A2、A3)在 GE 图模式(含 jit_compile=True 的整网训练默认路径)下的执行缺陷,并补齐图模式所需的 dtype 变体与 tiling 布局。 ### 改动原因 1. 图模式下 GE 的 NonZeroFusionPass 会将 NonZero 输出改写为 int32 + 后置 Cast,而 op_def / binary 仅声明 int64 输出变体,导致 FE 探测 op store 时被拒、静默回落内置 legacy 实现,tiling 布局错配产生错误结果。 2. 原 tiling 结构体约 200B,超出 GE JIT 路径对该算子的 128B 容量约束,执行期直接失败。 ### 改动方法 - **注册补齐**:non_zero_def.cpp 与 ascend910b/ascend910_93 的 non_zero_binary.json 同步新增 12 条变体(6 输入 dtype × int32/int64 输出),与内置 / arch35 对齐。 - **tiling 压缩**:将 tiling 结构体压缩为 15×int64 = 120B 以适配 128B 约束;删除冗余字段,transpose 改为 bit0=输出布局、bit1=输出 int32 位编码,xElemSize 用符号位编码 bf16。 - **kernel 适配**:实现 transpose 双布局直写、int32/int64 输出分支;WriteOutShape 恒定按 int64 协议写出 [0x80000002, dim0, dim1],与输出值位宽解耦。 ## 关联的Issue ## 测试 - **ATK 精度**:V1(aclnnNonzero)200/200 通过、V2(aclnnNonzeroV2)220/220 通过。 - **三模式矩阵回归**:eager / ge0(jit_compile=False)/ ge1 共 30/30 用例通过。 - **UT**:新增 tests/ut/op_host/arch22/test_non_zero_tiling.cpp,覆盖切核策略与 tiling 字段编码全路径。 ## 文档更新 本次改动不涉及文档更新。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!12323 | 20 days ago | |
[fix] 修正 14 个 CMakeLists.txt/Python 文件许可头中的 NBSP(U+00A0) Co-authored-by: NUAAwqy<162230229@nuaa.edu.cn> # message auto-generated for no-merge-commit merge: !11488 merge fix/issue-6381-nbsp-non-cpp-license-headers into master [fix] 修正 14 个 CMakeLists.txt/Python 文件许可头中的 NBSP(U+00A0) Created-by: NUAA_wqy Commit-by: NUAAwqy Merged-by: cann-robot Description: ## 描述 **现状问题**:14 个非 C/C++ 文件(6 个 CMakeLists.txt + 8 个 Python)的许可头写成 #<NBSP>This program is free software, ...,即注释符 # 后直接是一个 NBSP(U+00A0) 再跟正文,而本仓 14900+ 个文件 写的是 # This program is free software, ...。与 #6335(C/C++ 文件版)是同一判据、不同文件集,按原文精确匹配的 许可/合规扫描同样认不出这 14 个头。 **改动方法**:每个文件把许可头里的 #<NBSP>This program is free software 替换为 # This program is free software (仅在文件前 1200 字节内首次出现处替换)。 **影响面**:14 个文件各 1 行,各只改 1 个不可见字符。 ## 变更类型 - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [x] 🧹 代码/许可规范修复,请描述:许可头中 NBSP 的合规修复(C/C++ 之外的剩余文件) ## 关联的Issue #6381 ## 测试 已完成的测试用例和场景: 1. 对 git ls-files 中全部 .py/.txt/.cmake/.sh 扫描 #\xc2\xa0This program is free software,命中 **14** 个文件并完成替换。 2. 逐文件 git diff 确认每处变更都是 #<NBSP> → # 的单个字符替换,git diff --shortstat 为 14 files changed, 14 insertions(+), 14 deletions(-)。 3. 8 个 Python 文件逐文件 python -m py_compile 通过(PYCOMPILE_OK)。 4. 复扫修改后文件前 1200 字节:该 NBSP 写法剩余 0 处。 补充的UT用例:无(不涉及算子计算逻辑)。 ## 文档更新 NA ## 合入检查 - [x] 已阅读 CONTRIBUTING.md,commit message 含类型标签与 DCO 签名(Signed-off-by) - [x] 代码/文档遵循项目整体风格,改动最小且聚焦于该 Issue - [x] 已完成本地验证,验证方法见"测试"章节 ## DCO Signed-off-by: NUAAwqy <162230229@nuaa.edu.cn> See merge request: cann/ops-nn!11488 | 20 days ago | |
fix(gemm_syrk): aclnn布局校验改为基于shape/stride,修复3D张量(NCL标签)被误拒 Co-authored-by: justsozl<zhaolun3@hisilicon.com> # message auto-generated for no-merge-commit merge: !12270 merge fix/gemm-syrk-nd-layout into master fix(gemm_syrk): aclnn布局校验改为基于shape/stride,修复3D张量(NCL标签)被误拒 Created-by: justsozl Commit-by: justsozl Merged-by: cann-robot Description: ## 描述 修复 issue #6884: aclnnGemmSyrk 的入参校验 CheckFormat 以 aclTensor::GetStorageFormat() == FORMAT_ND 作为 ND 准入门槛,判据过粗——校验的是 storage format 标签而非实际内存布局。经 at::Tensor -> aclTensor 桥接构造的 3D 张量(测试框架 AclTensor t_a(a) / torch_extension ConvertType)按 CANN dimNum 约定被标记为 ACL_FORMAT_NCL,存储实为行主序 ND,直接被误拒("a only supports ND format.")。 改动(matmul/gemm_syrk/op_api/aclnn_gemm_syrk.cpp): 1. CheckFormat 改为以 **view shape/stride/offset** 判定"线性(ND)存储上的合法视图"(IsAcceptableLinearView),不再以 storage format 标签为准入门槛: - 拒绝 FRACTAL_NZ:分形存储无行主序 shape/stride 表示,l0op::Contiguous 无法物化 - 拒绝描述符不自洽者:stride 数组与 viewShape 维度数不一致、维度或 stride 为负 - 其余全部放行(连续 / NCL 标签 3D 稠密 / 转置视图 / 带洞切片 / 非零 offset / 扩维),非连续视图由既有 l0op::Contiguous 统一物化(已连续时为 no-op),与文档承诺一致(aclnnGemmSyrk.md 非连续tensor 列为 √、torchapi_gemm_syrk.md:164"支持非连续Tensor,无需额外做contiguous") 2. **容量校验仅在显式声明 storage 时进行**:storageDims 缺省时框架把 storageShape 取作 viewShape,它不携带真实 buffer 容量,原无条件判据 storageSize > maxOffset 会退化为"视图跨度不得超过视图自身元素数",把 (shape, stride, offset) 形式的合法非连续张量误拦(如 docs/zh/context/non_contiguous_tensor.md 示例1:(6,5)/(10,1)/offset=22)。改为 storageShape != viewShape(调用方显式声明 storage)时才做容量校验 3. 校验顺序修正:先完整校验各维(负维度/负 stride),再处理空张量判定与容量校验,避免提前返回跳过剩余维度 4. 函数更名 IsNdLayout -> IsAcceptableLinearView 并修正注释:明确本检查**不判定"排布是否连续"**(物化与正确性由 l0op::Contiguous 兜底),容量校验只针对显式声明的 storage 5. 报错信息补充 shape/strides/storage format 三元信息 ## 测试 - [x] UT gemm_syrk_3d_ncl_label_dense(tests/ut/op_api/test_aclnn_gemm_syrk.cpp):NCL 标签的 3D 行主序稠密输入应返回 ACLNN_SUCCESS(旧校验下必然失败),与既有 gemm_syrk_3d_bf16_default_scale(ND 标签)构成对照 - [x] e2e ST 用例 e2e_gemm_syrk_bf16_sliced_a(tests/st/arch35/ttk_e2e_gemm_syrk_basic_st.csv):a 为 (1,128,64) 视图 / (1,128,128) 存储 / strides (8192,128,1) 的**带洞切片**,验证非稠密线性视图被接受且结果与标杆一致(旧严格口径会拒) - [x] 既有 ND 路径行为不变(仅准入判据变化,ND 稠密张量仍通过) - [ ] 待跑:本机无 CANN 构建环境,UT/ST 未经本地执行;建议合入前在 CI/A5 环境跑 gemm_syrk UT 与 ST 全量 - 说明:storageDims=nullptr 路径无法用现有 op_api UT 框架构造(TensorDesc 无 stride/storage/offset 接口),该分支由代码审查 + IsSameShape 判定覆盖;如需板端覆盖可在外部测试框架(AclTensor t_a(a) 路径)补测 ## 文档更新 - 无(本次改动使实现与既有文档承诺一致,接口签名与约束不变) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!12270 | 20 days ago | |
迁移 AddRmsNormQuantFusionPass 与 AddRmsNormDynamicQuantFusionPass 两条融合规则 Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !12407 merge arn_quant_pass into master 迁移 AddRmsNormQuantFusionPass 与 AddRmsNormDynamicQuantFusionPass 两条融合规则 Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 迁移 AddRmsNormQuantFusionPass 与 AddRmsNormDynamicQuantFusionPass 两条 GE 自定义量化融合规则至本仓库,将 AddRmsNorm 与下游量化算子的组合融合为 AddRmsNormQuant / AddRmsNormDynamicQuant 算子,消除中间结果的冗余访存与算子调度开销。同步补充 UT 和文档。 ### 改动原因 量化场景中 AddRmsNorm 的输出常随后接量化算子(静态 Quantize,或动态 DynamicQuant),二者独立调度时中间结果需落回 Global Memory 再读出,存在冗余访存与调度开销。两条量化融合规则迁移至本仓库统一维护,匹配后替换为融合算子节点,提升量化场景端到端性能。 ### 改动方法 1. **静态量化规则 AddRmsNormQuantFusionPass**:识别 AddRmsNorm 后接 Quantize(可选中间 Reshape)的组合,融合为 AddRmsNormQuant 算子: - 场景一:AddRmsNorm → Quantize 直接融合; - 场景二:AddRmsNorm → Reshape → Quantize(gamma shape 与 scales/zero_points 维度不一致时使用)。 2. **动态量化规则 AddRmsNormDynamicQuantFusionPass**:识别 AddRmsNorm 后接 DynamicQuant 的组合,融合为 AddRmsNormDynamicQuant 算子,支持单路/双路模式及可选 smooth_scales(dtype 须与 x1 一致)。 3. **准入校验**:融合前 AddRmsNorm 不输出 rstd(被外部消费则拒绝)、输入 dtype 一致性、量化输出类型(int8 等)等条件校验;平台限定。 4. **UT**:AddRmsNormQuantFusionTest 5 个用例(Direct/Reshape × 无/有 offset、bf16、拒绝 rstd 被消费)、AddRmsNormDynamicQuantFusionTest 5 个用例(单路/双路 × 无/有 smooth、bf16、Reshape、拒绝 rstd 被消费)。 5. **文档**:新增 2 篇融合规则文档(融合模式、使用约束、支持型号)及 4 张配图。 6. **构建接入**:两个算子的 op_graph/CMakeLists.txt 更新,通过 _proto_headers 声明模式构造依赖的算子原型头(add_rms_norm + quantize/dynamic_quant proto);新增 UT 构建配置。 两条规则均通过 REG_FUSION_PASS(...).Stage(kAfterBuiltinFusionPass) 注册。除 op_graph/CMakeLists.txt 构建配置接入外,不修改任何既有文件逻辑。 涉及文件(16 个,+1383): - norm/add_rms_norm_quant/op_graph/fusion_pass/add_rms_norm_quant_fusion_pass.cpp/.h - norm/add_rms_norm_quant/docs/AddRmsNormQuantFusionPass.md - norm/add_rms_norm_quant/tests/ut/op_graph/test_add_rms_norm_quant_fusion_pass.cpp、CMakeLists.txt - norm/add_rms_norm_quant/op_graph/CMakeLists.txt(修改,+6) - norm/add_rms_norm_dynamic_quant/op_graph/fusion_pass/add_rms_norm_dynamic_quant_fusion_pass.cpp/.h - norm/add_rms_norm_dynamic_quant/docs/AddRmsNormDynamicQuantFusionPass.md - norm/add_rms_norm_dynamic_quant/tests/ut/op_graph/test_add_rms_norm_dynamic_quant_fusion_pass.cpp、CMakeLists.txt - norm/add_rms_norm_dynamic_quant/op_graph/CMakeLists.txt(修改,+6) - docs/zh/figures/add_rms_norm_quant_fusion_pass_1~2.png、add_rms_norm_dynamic_quant_fusion_pass_1~2.png ## 关联的Issue -https://gitcode.com/cann/ops-nn/issues/7185 ## 测试 - 新增 UT 共 10 个用例:融合命中(静态 Direct/Reshape × offset、动态单/双路 × smooth、bf16)与拒绝(rstd 被外部消费)场景。 ## 文档更新 - 新增 AddRmsNormQuantFusionPass.md:静态量化融合模式(直接/经 Reshape)、使用约束、支持型号 - 新增 AddRmsNormDynamicQuantFusionPass.md:动态量化融合模式(单/双路)、dtype/shape/attr 约束、支持型号 - 新增 4 张融合模式配图 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!12407 | 20 days ago | |
[fix] 修正 14 个 CMakeLists.txt/Python 文件许可头中的 NBSP(U+00A0) Co-authored-by: NUAAwqy<162230229@nuaa.edu.cn> # message auto-generated for no-merge-commit merge: !11488 merge fix/issue-6381-nbsp-non-cpp-license-headers into master [fix] 修正 14 个 CMakeLists.txt/Python 文件许可头中的 NBSP(U+00A0) Created-by: NUAA_wqy Commit-by: NUAAwqy Merged-by: cann-robot Description: ## 描述 **现状问题**:14 个非 C/C++ 文件(6 个 CMakeLists.txt + 8 个 Python)的许可头写成 #<NBSP>This program is free software, ...,即注释符 # 后直接是一个 NBSP(U+00A0) 再跟正文,而本仓 14900+ 个文件 写的是 # This program is free software, ...。与 #6335(C/C++ 文件版)是同一判据、不同文件集,按原文精确匹配的 许可/合规扫描同样认不出这 14 个头。 **改动方法**:每个文件把许可头里的 #<NBSP>This program is free software 替换为 # This program is free software (仅在文件前 1200 字节内首次出现处替换)。 **影响面**:14 个文件各 1 行,各只改 1 个不可见字符。 ## 变更类型 - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] 🚀 性能优化 - [x] 🧹 代码/许可规范修复,请描述:许可头中 NBSP 的合规修复(C/C++ 之外的剩余文件) ## 关联的Issue #6381 ## 测试 已完成的测试用例和场景: 1. 对 git ls-files 中全部 .py/.txt/.cmake/.sh 扫描 #\xc2\xa0This program is free software,命中 **14** 个文件并完成替换。 2. 逐文件 git diff 确认每处变更都是 #<NBSP> → # 的单个字符替换,git diff --shortstat 为 14 files changed, 14 insertions(+), 14 deletions(-)。 3. 8 个 Python 文件逐文件 python -m py_compile 通过(PYCOMPILE_OK)。 4. 复扫修改后文件前 1200 字节:该 NBSP 写法剩余 0 处。 补充的UT用例:无(不涉及算子计算逻辑)。 ## 文档更新 NA ## 合入检查 - [x] 已阅读 CONTRIBUTING.md,commit message 含类型标签与 DCO 签名(Signed-off-by) - [x] 代码/文档遵循项目整体风格,改动最小且聚焦于该 Issue - [x] 已完成本地验证,验证方法见"测试"章节 ## DCO Signed-off-by: NUAAwqy <162230229@nuaa.edu.cn> See merge request: cann/ops-nn!11488 | 20 days ago | |
[修复] 更正 AvgPoolV2 README 的 padding 输出形状公式 Co-authored-by: KaranocaVe<karanocave@qq.com> # message auto-generated for no-merge-commit merge: !12188 merge fix/2026-10-15-ops-nn-avgpool-v2-asymmetric-padding-output-shape-doc-01 into master [修复] 更正 AvgPoolV2 README 的 padding 输出形状公式 Created-by: KaranocaVe Commit-by: KaranocaVe Merged-by: cann-robot Description: # [修复] 更正 AvgPoolV2 README 的 padding 输出形状公式 AvgPoolV2 README 当前把每个空间维度的 padding 写成单侧值的两倍。 pads 实际按 [top, bottom, left, right] 提供,因此非对称 padding 下文档推导会偏离 Host 输出 shape。将高度和宽度公式分别改为使用上下、左右 padding 之和,并在公式旁明确 pads 顺序。 对于输入空间尺寸 7×9、窗口 3×3、步长 2×2、pads=[1,0,0,2] 的 CALCULATED floor 模式,修正文档公式与 Host 均得到 3×5。 关联 Issue: https://gitcode.com/cann/ops-nn/issues/6822 See merge request: cann/ops-nn!12188 | 20 days ago | |
fix: aclnnAscendQuant补充x维度下界校验,rank=0返回161002 Co-authored-by: cuijie25<cuijie24@h-partners.com> # message auto-generated for no-merge-commit merge: !12557 merge fix/ascend-quant-rank0-check into master fix: aclnnAscendQuant补充x维度下界校验,rank=0返回161002 Created-by: cuijie25 Commit-by: cuijie25 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> aclnnAscendQuant 的第一段接口未校验 x/y 的 rank 下界:0 维(标量)输入被直接接受并正常执行返回 0,而资料 quant/ascend_quant_v2/docs/aclnnAscendQuant.md 中 x/scale/offset/y 的维度均声明为 1-8,错误码 161002 子项也明确覆盖「shape 不满足限制条件」(详见关联 Issue)。 修改内容: 1. CheckShape 中在既有 OP_CHECK_MAX_DIM(x, 8) 前新增 OP_CHECK_MIN_DIM(x, 1, return false),与 glu/selu_grad 等算子既有用法一致;只校验 x 即可覆盖 y(int8 路径 y shape 必须与 x 全等,int32/int4 路径本就拒绝标量)。 2. 清理 CheckDim 中 dimNum == 0 时按 1 维处理的历史遗留代码(来自初始提交的防御式写法,加入下界校验后不可达)。 3. UT 新增 ascend910B2_output_int8_scalar_error 用例,镜像既有 int4/int32 标量报错用例的写法。 同算子家族口径已对齐:本接口 int32/int4 路径已拒绝标量("dtype int32/int4 does not support scalar"),V3 接口有 CheckInputScalar 显式拒绝,本次补齐 int8 路径。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#7094](https://gitcode.com/cann/ops-nn/issues/7094) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 1. UT:A2(910B3)环境 bash build.sh -u --opapi --ops=ascend_quant_v2 -j8,52/52 全部通过,含新增 int8 标量用例。 2. 实卡验证(A2 / 910B3,内置 CANN 9.1.0 基线 vs 打补丁 vendor 包): - rank=0 标量 x/y int8:基线 ret=0(复现缺陷)→ 修复后 ret=161002; - rank=9(上界对照):修复前后均 ret=161002; - 正常 1D x={1,2}:修复前后均 ret=0 且 y={1,2},无回归。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无。资料已声明维度为 1-8,本次是代码对齐资料,无需更新文档。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12557 | 20 days ago | |
style(conv): 修复 convolution_backward 与 dynamic_rnn op_api CodeCheck 规范问题 Co-authored-by: xiafengkou<luojiangtao4@huawei.com> # message auto-generated for no-merge-commit merge: !12413 merge fix/conv-lstm-codecheck into master style(conv): 修复 convolution_backward 与 dynamic_rnn op_api CodeCheck 规范问题 Created-by: xiafengkou Commit-by: xiafengkou Merged-by: cann-robot Description: ## 变更说明 修复 CodeCheck 静态检查报告的 4 类规范问题,仅做等价整改,不改变运行逻辑与对外接口(共 3 文件,+14/-8)。 1. **G.EXP.16 避免使用 const_cast(6 处)** — conv/convolution_backward/op_api/convolutionbackward.cpp TransposeConv3DBackpropFilterInputs 中 6 处 const_cast<aclTensor*>(x)->Set*Format() 直接调用,提取为命名局部变量 mutableInput/mutableOutBackprop 后再设置 format。l0op::Transpose 按接口设计返回 const 指针,此处仅需修改新 tensor 的 format 元数据,与同文件 N2HOptimize 及已合入 MR !11334 的修复范式一致。 2. **G.CNS.04 只读引用参数加 const** — conv/convolution_backward/op_api/aclnn_convolution_backward.cpp CastInputByCubeMathType 函数体内只读 params.cubeMathType,形参改为 const ConvolutionBackwardParams&。 3. **G.EXP.08 指针使用前确保已初始化** — rnn/dynamic_rnn/op_api/aclnn_lstm.cpp SingleLayerLstm 分支在解引用 initH/initC 前,已有 OP_CHECK_NULL 宏判空,但宏经 IsNullptr 模板函数封装,静态检查无法识别其保护(前次 MR !11334 已加宏检查,报告仍告警)。补充等价的显式空指针判断并提前返回,非空场景行为完全不变。 4. **G.CNS.02 魔法数字** — conv/convolution_backward/op_api/aclnn_convolution_backward.cpp CalcPostDilationPadAmount 中 padding->Size() == 4 改用同文件既有的命名常量 CONV2DINPUTDIM,与同文件其余 padding 长度判断写法一致。 ## 关联 Issue ## 测试报告 - pre-commit(clang-format / codespell / OAT 等):全部通过。 - 编译验证(ascend910_93):ophost 库与 kernel binary 均编译成功,零 error。 ## 文档 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:CodeCheck 静态检查缺陷整改(const_cast / const 引用 / 空指针判空 / 魔法数字) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!12413 | 20 days ago | |
[feat] EmbeddingHashTableEvict算子支持960DT Co-authored-by: wsunmoon<wangming176@huawei.com> # message auto-generated for no-merge-commit merge: !12112 merge indexEmbedding into master [feat] EmbeddingHashTableEvict算子支持960DT Created-by: wsunmoon Commit-by: wsunmoon Merged-by: cann-robot Description: ## 描述 EmbeddingHashTableEvict算子适配960DT: 新增960DT二进制配置json文件 CMakeLists.txt文件配置960DT 算子信息库新增960DT ## 关联的Issue 关联Issue [#6380](https://gitcode.com/cann/ops-nn/issues/6380) ## 测试 950编译没问题; UT, ST冒烟通过 ## 文档更新 不涉及 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!12112 | 20 days ago | |
fix: hash trailing bytes after processed blocks Co-authored-by: yr923096443<923096443@qq.com> # message auto-generated for no-merge-commit merge: !11393 merge fix/murmur-hash-tail into master fix: hash trailing bytes after processed blocks Created-by: yr923096443 Commit-by: yr923096443 Merged-by: cann-robot Description: ## 描述 合入背景:源码审查发现,输入长度为 4n+1/2/3(n>=1)时,三份主机侧哈希函数会忽略实际尾部,导致仅尾部不同的输入产生系统性碰撞;CommonHash 还会把上一完整块的旧值混入尾部。此修复恢复尾部参与哈希的语义,并补齐仓库内回归测试。相关函数用于 Tiling 缓存及运行时知识库索引,实际影响取决于调用方的 key 长度。Issue 中提供了函数级复现与修复前后实测结果。 修复两份 MurmurHash 实现(common/src/op_host/bank_mgr/hash.cpp、matmul/common/op_host/op_tiling/hash.cpp)和 RuntimeKb::CommonHash 的尾部读取起点:处理完整的 4 字节块后,从已推进的 key / ky 读取剩余字节。 CommonHash 使用自己的 HashCombine 逻辑,仅在 (len & 3U) != 0U 时清零 tmp_ky,再组装实际尾部字节;最后一次 HashCombine(tmp_ky, hash_ky) 保留在条件之外。这样修复部分块携带前一完整块旧值的问题,同时保留长度为 4 字节倍数(含 0)以及长度小于 4 时的既有结果。 回归测试覆盖三份实际实现: - common/tests/ut/op_host/test_common_hash_tiling.cpp:保留 5 项 CommonHash 测试。 - common/tests/ut/op_host/test_murmur_hash_tiling.cpp:通过公开头文件直接调用 Ops::NN::HostTiling::MurmurHash。 - matmul/quant_batch_matmul_v3/tests/ut/op_host/test_murmur_hash_tiling.cpp:直接调用 matmul 版 Ops::NN::MurmurHash。 两个新增文件均由现有 test_*_tiling.cpp CMake 规则收集,无需额外运行仓库外脚本。 ## 关联的Issue Fixes #6976 [缺陷背景、复现步骤及验证日志](https://gitcode.com/cann/ops-nn/issues/6976)。 ## 测试 - 2026-10-20 补充独立复现:在 WSL x86_64 / GCC 15.2.0 上编译基线 c54aa50 与当前 e218d160 的三份真实源码,仅对外部日志提供桩。01 02 03 04 05 / 01 02 03 04 06 在 len=5, seed=271828 下,三份实现修复前均碰撞,修复后均能区分;同一输入长度 0、1、2、3、4、8 的结果保持一致。ASan/UBSan 无报错,详细输出见关联 Issue。 - 每份 MurmurHash 实现覆盖长度 0–16 × seed 0、1、271828、UINT32_MAX 的 68 个固定向量,另检查默认 seed。向量由 [SMHasher 的 MurmurHash3_x86_32](https://github.com/aappleby/smhasher/blob/07bb4de10a63e8cc2e1724865454eba635742383/src/MurmurHash3.cpp) 生成,并经独立 Python 计算核对;期望值固化在 UT 中。完整块使用对齐的重复字节 word,尾部使用互不相同的 80 37 e9,覆盖 1/2/3 字节尾部、多个完整块及高位字节。 - CommonHash 的 68 个独立计算向量、默认 seed 和空指针检查保持不变;其结果与 MurmurHash 分别验证。 - 编译真实的三份生产源码、仓库头文件和 GoogleTest 1.17.0,仅对外部日志提供桩;使用 g++ -std=c++17 -Wall -Wextra -Werror -fsanitize=address,undefined -fno-omit-frame-pointer -fno-strict-aliasing,9/9 测试通过,无 sanitizer 报错。 - 对两份 MurmurHash 分别进行变异验证:将尾部起点改回 src,每份失败 45 项断言;将下标改为 rest_key[i],每份失败 60 项;颠倒尾部字节读取顺序,每份失败 40 项。当前实现全部通过。 - 使用仓库真实 add_modules_ut_sources、add_all_ut_sources 和两个目录的实际 CMake 入口,确认三份测试文件被收集;最小主机构建及 CTest 通过。完整 CANN SDK 构建由本次 PR CI 验证。 - 两个新增文件的 pre-commit 检查通过(含 clang-format 18.1.8、codespell、OAT),git diff --check 通过。远端提交 e218d160 的代码树与本地验证版本一致。 ## 文档更新 无独立文档变更,已更新本 PR 的修复说明和验证记录。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 ## AI/Agent生成声明 - [x] AI辅助编写 本次修复、回归测试和验证由 Codex 辅助完成。 See merge request: cann/ops-nn!11393 | 20 days ago | |
fix(add_rms_norm_dynamic_quant): 顶层入口对非int标量做原始类型校验,修复dispatcher归一化绕过 Co-authored-by: wangqi<wangqi195@hisilicon.com> # message auto-generated for no-merge-commit merge: !10891 merge fix/add-rms-norm-quant-public-entry-validation into master fix(add_rms_norm_dynamic_quant): 顶层入口对非int标量做原始类型校验,修复dispatcher归一化绕过 Created-by: wangqi_ai Commit-by: wangqi Merged-by: cann-robot Description: ## 关联 issue fixes #6055 ## 问题 顶层入口 cann_ops_nn.add_rms_norm_dynamic_quant(文档单算子示例路径)解析为 dispatcher OpOverloadPacket,标量参数在进入算子代码前被 schema 静默归一化(torch.int4 -> 40、torch.uint7 -> 36、np.int64(36) -> 36 等)。torch.uint6/uint7/int4/int5 四个 dtype 的序号恰好完整覆盖合法 dst_type 值域 {35,36,40,41},导致传入非 int 类型完全不报错、静默按"碰巧"的量化类型执行,与约束说明承诺的入口 TypeError 不符。详见 #6055。 ## 修改内容 1. torch_extension/cann_ops_nn/ops/norm/add_rms_norm_dynamic_quant/add_rms_norm_dynamic_quant.py 拆分 PrivateUse1 kernel(原逻辑逐字保留)与公开入口 add_rms_norm_dynamic_quant:先 _validate_arg_types 校验**原始**参数,再委托 torch.ops.cann_ops_nn.add_rms_norm_dynamic_quant 分发;公开入口携带 _cann_ops_nn_public_entry_ 标记。 2. torch_extension/cann_ops_nn/__init__.py __getattr__ 优先导出带标记的公开入口(而非 dispatcher 句柄);未携带标记的算子保持原行为——opt-in 机制,对其余算子零影响。 3. norm/add_rms_norm_dynamic_mx_quant/tests/ut/torch_extension/test_torch_extension_param_validation.py 入口结构锁定用例更新为断言"公开入口 + 与 raw 入口同一函数对象"(标量拦截覆盖经同一性断言传递至既有用例);删除与 test_scalar_type_interception 完全重复(同函数×同 7 个坏值×同断言)的参数化用例。 4. norm/add_rms_norm_dynamic_mx_quant/docs/torchapi_add_rms_norm_dynamic_quant.md 约束说明修正严格校验适用入口(补充顶层入口;dispatcher 归一化说明限定为直接经 torch.ops 调用场景);两个调用示例改为打印 shape/dtype,避免大 shape 输出刷屏。 ## 为什么委托 torch.ops 而非直调 C++ 模块 保证图模式行为不变:torch.compile 下 Dynamo 将公开入口内联后,torch.ops 调用仍作为 FX 图节点(实测 node.target 与修复前同为 OpOverloadPacket、逐节点一致),graph_convert 注册的 torchair GE 转换不受影响;若直调 C++ 模块则会在 builder.load() 处 graph break,图模式静默退化为 eager(mxscale dtype 等文档承诺行为改变)。 ## 验证(Ascend 950PR 实测) - 参数校验 UT:**42 passed**(meta/CPU,设备无关) - NPU UT test_torch_extension.py:**113 passed** - 文档 eager 示例路径实测:torch.int4/uint6/uint7/int5、torch.float8_e5m2/e4m3fn、np.int64/np.int32、36.0、"36"、True 全部抛指名 TypeError(如 dst_type must be a Python int (35=FP8_E5M2, 36=FP8_E4M3FN, 40=FP4_E2M1, 41=FP4_E1M2), but got torch.dtype: torch.int4);dst_type=36 正常输出 float8_e4m3fn (4,64),示例新打印语句输出与返回值说明表一致 - 图模式:FX 图与修复前逐节点一致;graph(trace) 与 eager 数值 torch.equal 为 True;torch.compile 下传 torch.int4 在 trace 阶段即 TypeError - pre-commit run(ruff check / ruff format / codespell / OAT 等)全部通过,零自动改动 ## 兼容性 - eager 合法调用(Python 原生 int/str/bool/float、IntEnum)行为不变 - torch.ops.cann_ops_nn.* 直调路径行为不变(框架归一化 + 值域兜底,文档已说明) - 其余算子顶层入口解析行为不变(仅带标记的公开入口生效) See merge request: cann/ops-nn!10891 | 1 month ago | |
更新MSDAGrad算子文档 Co-authored-by: wanshilin<wanshilin@h-partners.com> # message auto-generated for no-merge-commit merge: !12240 merge master into master 更新MSDAGrad算子文档 Created-by: wanshilin Commit-by: wanshilin Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新MSDAGrad算子文档 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/6732 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12240 | 21 days ago | |
修改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 | 4 months ago | |
docs: 新增图融合规则说明文档 Co-authored-by: linzehui2058<2602241040@qq.com> # message auto-generated for no-merge-commit merge: !9676 merge fusion_pass_doc into master docs: 新增图融合规则说明文档 Created-by: linzehui2058 Commit-by: linzehui2058 Merged-by: cann-robot Description: ## 描述 对于已开源的图融合算子,进行对应的资料开源,包含MatmulToGemmOpFusionPass、MatmulReshapeTransposeFusionPass、GemmToMatmulFusionPass、BatchMatMul2MulFusionPass 其中的png图片格式,使用lfs进行托管 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5541 ## 文档更新 matmul\batch_mat_mul_v3\docs\BatchMatMul2MulFusionPass.md matmul\mat_mul_v3\docs\MatmulToGemmOpFusionPass.md matmul\mat_mul_v3\docs\MatmulReshapeTransposeFusionPass.md matmul\mat_mul_v3\docs\GemmToMatmulFusionPass.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9676 | 2 months ago | |
动态库解耦 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 | 2 months ago | |
docs:修改代码块缺闭合围栏问题 Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !11686 merge master into master docs:修改代码块缺闭合围栏问题 Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#6434](https://gitcode.com/cann/ops-nn/issues/6434) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> codearts_check_rule_config.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11686 | 26 days ago | |
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 | 3 months ago | |
feat(aicpu): AICPU built-in整包准入manifest机制 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !11655 merge feat/aicpu-builtin-package-manifest into master feat(aicpu): AICPU built-in整包准入manifest机制 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 为 ops-nn 移植 AICPU built-in 整包准入 manifest 机制: 通过白名单控制 AICPU 算子是否准入 built-in 整包,默认全 OFF(与 ops-math 上线口径一致,算子准入由后续 PR 按需登记 xxx=ON),将"隐式排除"显式化为白名单机制。 **主要改动:** - 新增 cmake/config/aicpu_builtin_package_manifest.cmake:准入清单(AICPU_BUILTIN_PACKAGE_FORCE_ALL 默认 OFF + 空 manifest),在进入算子子目录前 include - cmake/func.cmake 新增 check_aicpu_builtin_pkg_allowed() 门控 helper - 23 个 AICPU 算子 op_kernel_aicpu/CMakeLists.txt 的 op_def 收集与 cust obj 编译包进 if (ENABLE_CUSTOM OR _AICPU_BUILTIN_PKG_ALLOWED) 门控 - gen_norm_symbol() 补 built-in 产出接线:NO_AICPU=OFF && ENABLE_PACKAGE=ON 时生成 aicpu_nn.json + libnn_aicpu_kernels.so(安装至 opp/built-in/op_impl/aicpu/{config,kernel}) - 顺手规范化 elu、adaptive_max_pool2d 的变体版权头(master 遗留问题,OAT 合规要求) **不受 manifest 控制(行为不变):** ENABLE_CUSTOM(custom 包直通)、UT(AddAicpuOpTestCase 与收集逻辑解耦)、host 常量折叠(libopconstant_folding_nn.so) **默认行为无回退:** master 上 gen_norm_symbol() 本无 AICPU 产出调用(收集物无消费者),空 manifest 下整包产物与 master 完全一致 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/6515 ## 测试 本地 5 组 configure/build 验证: | 场景 | 结果 | |---|---| | 空 manifest 整包(ENABLE_PACKAGE=ON) | 干净跳过,无 aicpu 产物,与 master 一致 | | elu=ON | aicpu_nn.json 仅含 Elu;libnn_aicpu_kernels.so 仅链接 elu_cust_obj;安装路径正确 | | FORCE_ALL=ON | 23 算子全准入,json 含全部 23 个算子定义 | | ENABLE_CUSTOM=ON | 23 算子全收集,产出 cust_aicpu_kernel.json(→ vendors/custom_nn),与 master 无差异 | | UT(UT_TEST_ALL=ON) | 23 个算子 UT 用例正常创建 | pre-commit 全部通过(codespell、OAT 合规等)。 ## 文档更新 无需文档更新(纯构建配置改动) ## 类型标签 - 🐛 Bug修复 - ✅ ✨ 新特性 - ⚡ 性能优化 - ♻️ 重构 - 🧪 测试 - ✅ 📦 构建/CI - 🔧 配置变更 - 📝 文档更新 - ⬆️ 依赖升级 - 🔒 安全修复 - 🧹 代码清理 - ❓ 其他,请描述: See merge request: cann/ops-nn!11655 | 29 days ago | |
docs: 修复注释与文档不一致(贡献指南与fast kernel launch示例) Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !12380 merge docs/comment-cleanup-20261019-04 into master docs: 修复注释与文档不一致(贡献指南与fast kernel launch示例) Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 修正文档中与实际内容/上下文不一致的表述: - CONTRIBUTING.md:将“确保您的贡献符合项目标准,签署 CLA”中的半角逗号 , 改为全角逗号 ,,统一中文标点规范。 - examples/fast_kernel_launch_example/README.md:删除“Ascend 950PR&950DT系列产品产品使用”中的重复“产品”,共两处(第 33 行、第 83 行)。 ## 关联的Issue 关联 Issue #6948 https://gitcode.com/cann/ops-nn/issues/6948 ## 测试 仅文档变更,不涉及代码逻辑;已人工核对修改后语句与上下文一致,无功能影响。 ## 文档更新 - 更新 CONTRIBUTING.md - 更新 examples/fast_kernel_launch_example/README.md ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!12380 | 21 days ago | |
init | 1 year ago | |
docs: add LayerNormRemoveBroadcastFusionPass doc Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !9631 merge ln_pass_doc into master docs: add LayerNormRemoveBroadcastFusionPass doc Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 为现有LayerNormRemoveBroadcastFusionPass融合规则补充独立资料页。该规则在Ascend 950PR/Ascend 950DT场景下,将LayerNorm算子gamma和beta输入前的BroadcastTo从图中删除,使gamma和beta直接作为LayerNorm算子的输入,并将begin_norm_axis和begin_params_axis统一设置为归一化维度的起始轴。 资料同步说明规则的使用约束: - LayerNorm算子的gamma和beta输入前均为BroadcastTo,且两个BroadcastTo的shape输入相同。 - 输入x、gamma和beta均为静态shape。 - gamma和beta不为标量,二者的shape和数据类型相同。 - gamma的维数不大于x的维数,且gamma的shape与x从归一化轴开始的后缀shape相同。 - LayerNorm算子的begin_norm_axis换算为非负轴后,指向归一化维度的起始轴。 同时新增融合前后拓扑对比图,展示两个BroadcastTo节点被移除前后的图结构。 ## 关联的Issue - https://gitcode.com/cann/ops-nn/issues/5430 ## 测试 - 本次仅新增文档和配图,不涉及代码逻辑变更,未执行代码测试。 - 已检查Markdown格式、图片文件格式及图片引用路径。 ## 文档更新 - 新增 norm/layer_norm/docs/LayerNormRemoveBroadcastFusionPass.md,说明融合模式和使用约束。 - 新增docs/zh/figures/LayerNormRemoveBroadcastFusionPass_1.png,展示融合前后的图结构。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9631 | 2 months ago | |
产品名称修改 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !11292 merge master into master 产品名称修改 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 产品名称修改 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11292 | 1 month ago | |
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 | 3 months ago | |
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 | 8 months ago | |
【描 述】 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 | 8 months ago | |
docs: 修复注释与文档不一致(build脚本默认参数说明) Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !12379 merge docs/comment-cleanup-20261019-03 into master docs: 修复注释与文档不一致(build脚本默认参数说明) Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 修正 build.sh 帮助信息与 docs/zh/install/build.md 中与实际实现不一致的默认参数说明: - -j[n]:默认值由「8」更正为「CPU 核心数」。build.sh 中 THREAD_NUM=$(grep -c ^processor /proc/cpuinfo),未显式传入 -j 时按 CPU 核心数编译。 - --vendor_name:默认值由「customize-nn」更正为「custom」。build.sh 在 run_example 场景下当 VENDOR_NAME 为空时设置为 custom。 涉及文件:build.sh(7 处 -j[n] 文案、1 处 --vendor_name 文案)、docs/zh/install/build.md(参数表 1 处)。 ## 关联的Issue - #6950 ## 测试 仅修改帮助文案与文档,不涉及代码逻辑变更;已核对 build.sh 中 THREAD_NUM 与 VENDOR_NAME 的实际默认值。 ## 文档更新 - docs/zh/install/build.md:更新 -j${n} 默认值说明为 CPU 核心数 - build.sh:更新 usage 中 -j[n]、--vendor_name 的默认值说明 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!12379 | 21 days ago | |
Ascend960-matmul系列算子与Ascend950平台归一 Co-authored-by: yijiliang<yijiliang1@huawei.com> # message auto-generated for no-merge-commit merge: !12293 merge merge-test1 into master Ascend960-matmul系列算子与Ascend950平台归一 Created-by: yijiliang Commit-by: yijiliang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 为支持 Ascend960平台,将 MatMulV3系列算子与 3510 归一为单代码线,复用 arch35 既有 tiling 与 kernel 框架。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/6802 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地验证950及960测试用例无问题 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12293 | 21 days ago | |
docs:修改代码块缺闭合围栏问题 Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !11686 merge master into master docs:修改代码块缺闭合围栏问题 Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#6434](https://gitcode.com/cann/ops-nn/issues/6434) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> codearts_check_rule_config.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11686 | 26 days ago | |
调整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 | 3 months ago | |
revert//fix(opgraph): 支持旧版本 CANN 运行时加载融合 pass 库 Co-authored-by: cann-robot<cann@cann.team> # message auto-generated for no-merge-commit merge: !11095 merge revert-mr-9924-1790130631176-auto into master revert//fix(opgraph): 支持旧版本 CANN 运行时加载融合 pass 库 Created-by: cann-robot Commit-by: cann-robot Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11095 | 1 month ago | |
upgrade version 9.2.0 Co-authored-by: cong-jiyu<congjiyu@h-partners.com> # message auto-generated for no-merge-commit merge: !9513 merge master into master upgrade version 9.2.0 Created-by: cong-jiyu Commit-by: cong-jiyu Merged-by: cann-robot Description: ## 描述 upgrade version 9.2.0 ## 关联的Issue [#5362](https://gitcode.com/cann/ops-nn/issues/5362) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述: 版本更新 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9513 | 2 months ago |
🔥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&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:本项目功能和文档正在持续更新和完善中,欢迎您关注最新版本。
Introduction
用于昇腾NPU上AI模型的算子开发、调用与调优。提供matmul、activation等高阶算子,支持fp8/mxfp8等数据类型及量化融合算子,覆盖Atlas A2/A3、Ascend 950PR等芯片,附快速入门与开发指南。【此简介由AI生成】
Customize your domain