本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
add install cmd with custom and built-in package Co-authored-by: he_kan<hekan4@huawei.com> # message auto-generated for no-merge-commit merge: !9700 merge ci into master add install cmd with custom and built-in package Created-by: he_kan Commit-by: he_kan Merged-by: cann-robot Description: ## 描述 针对不同类型的custom package包,做安装适配 看是否支持--full 如果有就带上--full 没有就直接用--quiet安装 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9700 | 12 天前 | |
test(assets): 24 个算子 golden 适配新版 TTK spec 并补齐三方标杆能力 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9633 merge feat/ttk-golden-third-party into master test(assets): 24 个算子 golden 适配新版 TTK spec 并补齐三方标杆能力 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 这批 6 月及之前上库的算子, tests/assets/golden.py 仍是旧版 __golden__ = {"kernel": {...}} 注册,只有 CPU 真值一条腿,没有 third_party 三方标杆、也没有声明精度判据,跑不了 cross_check 三方交叉比对。仓内 hard_sigmoid / hard_swish_grad_v2 / deep_norm 已按新版 __spec__ 格式落地,本次把其余算子对齐。 范围:foreach 11 个 / lamb 7 个 / scatter 5 个 / relu6_grad 1 个,共 24 个。 ### 改动方式 按 ops-test-kit/ttk/test_spec/README.md 的规范,每个算子新增 __spec__ = {"<op_name>": "XxxKernelSpec"} 与对应 Spec 类,声明 golden / third_party / tolerance。**原 __golden__ 与 golden 函数体一律保留不动**,为纯追加,旧机制不受影响。 - **golden**:沿用原有实现。 - **third_party**:新增。foreach 系直接对标 torch._foreach_* 竞品 API;lamb 系无单一对标 API,用 torch 张量运算按同一算子定义拼接;scatter 系用 Tensor.index_reduce;Relu6Grad 原 golden 是纯 numpy 公式,本次补 torch 拼接作三方参照。 - **tolerance**:含算术的按 dtype 声明 cross_check(L1);ScatterMax / ScatterMin / ScatterList 是纯选择/拷贝语义,声明 binary_equal。 - **customize_inputs**:scatter 五算子把原 input.py 的合法索引重采样并入 Spec 字段,input.py 原文件保留,不影响旧机制。 ### 三处三方实现必须跟随算子的内部分支,不能照搬看似对应的 API - **ForeachBinaryOp** 按属性 op_code 分解为 add/sub/mul/div,且整型走独立路径(宽中间量 int64 + 窄化的 2's-complement wrap、整除向零截断、除数为 0 取 0)。三方按 op_code 分派并复刻整型语义。 - **ScatterDiv** 整型走截断除且除数为 0 时保持原值,不能升 fp32 —— 大 int32 经 float32 round-trip 会静默丢精度。整型判定与 golden 同源(_INT_DTYPES = def 注册的 int32/int8/uint8)。 - **Relu6Grad** 不用 aten.hardtanh_backward:它的判据是 (x<=0)|(x>=6) -> 0,NaN 对两个比较都为假于是透传 dy;本算子定义是 (x>0)&(x<6) 取掩码,NaN 落 else 分支得 0。两者只在 NaN 输入上分叉,直接拿它当三方会在 NaN 用例上假红。 ### 参数名与设备安全 三方类的参数名必须用 def 的注册名:TTK 的 __invoke_class 用 op_info["inputs"] 的 name 加 attributes 组 pool,再由 bind_by_name 按名绑定,不做 camelCase 或 _list 归一化,名字对不上直接抛 UnknownParamError。据此把 foreach 11 个的 x_list/x1_list/x2_list/x3_list 改为 def 的 x/x1/x2/x3。 三方实现必须设备安全:三方发到远端 XPU 服务执行,服务端先做 H2D 把 numpy 入参搬成目标设备上的 torch 张量再按名绑定。因此凡对入参调 np.asarray/np.ascontiguousarray 的写法,在 GPU 上会抛 "can't convert cuda tensor to numpy",等于三方腿跑不起来。统一改为:入参已是 torch.Tensor 就原样保留,只有非张量(本地自测)才走 numpy 兜底;dtype 判定用 tensor.dtype。 ### 通路注册 仓内先例(hard_sigmoid / hard_swish_grad_v2 / deep_norm)是「交付了的通路注册 spec、没交付的在文件尾写明」,本次补齐这一层:按 aclnn 头文件签名注册 aclnn spec,加上 kernel 共 39 条 spec;24 个文件尾部统一写明未交付通路(e2e / TensorFlow / ONNX / 融合 pass)及依据。GEIR 复用 kernel spec,无需另注册。 aclnn 通路两条腿的下发方式不同,签名必须分别对齐:golden 由 AclnnParamPlan.build_args 按**头文件形参顺序位置**下发全部形参;third_party 走远端 executor 的 bind_params **按名**绑定,pool 的 key 取自头文件张量形参名。形参名以**头文件**为准而非资料 —— 本机 CANN 内置头与自建 vendor 包生成头两处独立证据都是 def 注册名。golden 输出 dtype 须与算子输出一致,fp16/bf16 提到 fp32 算完必须还原,否则 binary_equal 走 _cross_dtype_compare 直接判「dtype 不可比」。 ## 关联的Issue 关联Issue #5493 ## 测试 - **TTK loader 实测**:39 条 spec 条目(24 kernel + 15 aclnn)全部可发现,golden / third_party / tolerance 三件齐全。 - **设备安全实测**:把 np.asarray/ascontiguousarray/array 打补丁成「收到 torch.Tensor 即抛错」(等价于 CUDA 张量的行为),再用全 torch 张量入参跑三方,24/24 通过且输出全为 torch 张量;numpy 入参这条本地自测路径同步复验,golden 与三方仍一致。 - **参数绑定实测**:用 TTK 自己的 bind_by_name 按 def 注册名组 pool,24/24 绑定成功并跑出结果。 - **旧机制回归**:用 CustomPluginManager.load_if_available 实测,旧 __golden__ 24/24 加载成功、旧 __input__ 5/5 加载成功,新旧两套注册并存不冲突。 - **真机抽检(Ascend950PR)**:kernel 通路逐算子抽检实跑。ScatterList 从 569 例全集等距抽 300 例,--compare close 实跑 300/300 PASS。 - ruff check / ruff format 全通过;仓内 scripts/oat_check.sh All checks passed。 ### 未覆盖 三方腿的实际比对需要 NPU + GPU 环境跑 TTK cross_check,本次仅做到 spec 可加载、golden 与 third_party 可调用且数值一致这一层,未做三方腿真机跑批。注意 TTK 在 third_party 输出缺失时不降级(ttk/core_modules/comparison/cross_check.py 直接返回 GOLDEN_FAILURE),故 GPU 侧不可达时,声明 cross_check 的算子需用 --compare 覆盖判据或待环境恢复后再跑。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:测试资产(golden)能力补齐 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9633 | 11 天前 | |
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 | 13 天前 | |
fix(rsqrt): 移除 nn 仓 Rsqrt 算子重复原型定义,迁移至 stub_ops.h 避免与 math 仓冲突 Co-authored-by: yuanbin_22<yuanbin22@huawei.com> # message auto-generated for no-merge-commit merge: !9693 merge fix/rsqrt-dup-def into master fix(rsqrt): 移除 nn 仓 Rsqrt 算子重复原型定义,迁移至 stub_ops.h 避免与 math 仓冲突 Created-by: yuanbin_22 Commit-by: yuanbin_22 Merged-by: cann-robot Description: ## 描述 Rsqrt 算子的 REG_OP 原型定义同时存在于 cann/ops-math(math/rsqrt/op_graph/rsqrt_proto.h)和 cann/ops-nn(common/inc/op_graph/op_nn_proto_extend.h)两个仓库中,导致链接时重复注册符号冲突。本 PR 从 nn 仓的 op_nn_proto_extend.h 中移除 Rsqrt 的 REG_OP 定义,并将其迁移至 common/stub/inc/framework/stub_ops.h,消除跨仓重复定义问题。 ### 涉及文件 | 文件 | 变更类型 | +行 | -行 | |------|----------|-----|-----| | common/inc/op_graph/op_nn_proto_extend.h | 移除重复定义 | +0 | -20 | | common/stub/inc/framework/stub_ops.h | 新增 stub 定义 | +20 | -0 | ### 变更内容 #### 1. 移除 op_nn_proto_extend.h 中的 Rsqrt 重复定义 从 op_nn_proto_extend.h 中移除 REG_OP(Rsqrt) 块(包含注释、INPUT/OUTPUT 声明和 OP_END_FACTORY_REG),该定义与 ops-math 仓的 rsqrt_proto.h 完全重复。 #### 2. 在 stub_ops.h 中新增 Rsqrt 定义 在 stub_ops.h 中新增相同的 REG_OP(Rsqrt) 块,作为 stub 框架的算子原型注册。stub_ops.h 用于 stub 编译场景,不会与 ops-math 的正式定义产生符号冲突。 ### 变更原因 ops-math 和 ops-nn 两个仓库都包含了 Rsqrt 的 REG_OP 定义。当两个仓库的头文件被同一编译单元包含时,REG_OP 宏会展开两次,产生重复的注册符号,导致链接错误。ops-math 是 Rsqrt 的正确归属仓库,nn 仓的 op_nn_proto_extend.h 中的定义是历史遗留的重复。将 nn 仓的定义从 op_nn_proto_extend.h 移至 stub_ops.h,既消除了重复定义冲突,又保留了 stub 场景下的算子原型可用性。 ## 关联的Issue 关联Issue #5469 ## 测试 - nn 仓编译验证通过,无重复注册告警 - stub 编译场景下 Rsqrt 算子原型可正常注册 - math 仓 Rsqrt 算子功能不受影响 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!9693 | 11 天前 | |
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 | 12 天前 | |
ConvDX/DW aclnnConvolutionBackward接口没有控制V核使用,导致torch.npu.set_device_limit不生效 Co-authored-by: cheng_gao<cheng.gao@huawei.com> # message auto-generated for no-merge-commit merge: !9587 merge cv_check_20260829 into master ConvDX/DW aclnnConvolutionBackward接口没有控制V核使用,导致torch.npu.set_device_limit不生效 Created-by: cheng_gao Commit-by: cheng_gao Merged-by: cann-robot Description: ## 描述 aclnnConvolutionBackward使用torch.npu.set_device_limit(device_id, cube_num, vec_num) 设置CV核数,实测V核不受控。 ## 关联的Issue 关联Issue: https://gitcode.com/cann/ops-nn/issues/5424 ## 测试 1、V核使用根据配置受控; 2、RDV功能正常; ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9587 | 11 天前 | |
[CANNBot] SigmoidFocalLossGrad 算子支持ascend950 AscendC Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !9433 merge SigmoidFocalLossGrad into master [CANNBot] SigmoidFocalLossGrad 算子支持ascend950 AscendC Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 将 SigmoidFocalLossGrad 迁移到 ops-nn/loss/sigmoid_focal_loss_grad,补齐 Ascend 950 的 OpDef、GEIR 图推导、Tiling 与 AscendC Kernel 实现。 本算子在 canndev 和 ops-nn 中均没有 ACLNN 接口契约,因此本变更不新增 ACLNN API、ACLNN 实现、ACLNN 文档或 ACLNN 用例。构建侧使用 ACLNNTYPE aclnn_exclude 明确禁止生成 ACLNN,原 ACLNN 测试场景已转换为 Kernel 直调或 GEIR 用例。 主要变更: - 新增 Ascend 950 OpDef、图原型、InferShape/InferDataType、Tiling 和 Kernel。 - 支持 pred/dout/weight 的 FLOAT16/FLOAT 组合、可选 weight,以及 mean/sum/none reduction。 - Golden 按 LongTailInfo/Sinh/golden文件/sinh.py 的 TestSpec 结构改造,仅注册 Kernel/GEIR 共用的 raw op;Torch 小算子组合注册为 third_party,精度规范为 L0 cross_check,计算顺序严格复用用户指定 sigmoid_focal_loss_grad_golden.py。 - 新增 Kernel 与 GEIR 正向/反向测试用例、README、算子列表和共性问题排查报告。 共性准入当前为 PARTIAL:已确认 canndev/目标仓原型与 InferShape 重复、未知 Rank/9D/Cast E2E/性能证据缺失,以及 alpha/gamma NaN/Inf 的 6 个反向用例未按预期拦截。详情见 loss/sigmoid_focal_loss_grad/COMMON_ISSUE_SCAN.md,本 PR 不将功能精度通过表述为完整转测准入通过。 ## 关联的Issue 关联 Issue #5283:https://gitcode.com/cann/ops-nn/issues/5283 ## 测试 - 构建:Ascend 950 operator package 构建成功;最终包 SHA256 62a5f24f23ad2370179e4f07b5d14dd8098b8c999ecbe9d2b9f43091d97d602c。 - Golden 源一致性:指定 LongTailInfo 源文件 SHA256 c10e2a95a87e50702f73091e3f6c57d9919496975c839e6fb978907c35faf35b;TestSpec 适配器与 canonical Golden 108/108 逐 bit 一致,Torch third_party 本地计算链 108/108 逐 bit 一致,最大绝对差均为 0。 - Kernel L0 三方:启动本机 xpu-server 的 CPU Torch provider 后,TTK 真实 cross_check 36/36 精度 PASS、36/36 provider PASS、36/36 memory OOB PASS。 - Kernel 本地 NPU↔Golden 回归(显式 stat_rel_err 诊断覆盖):544/544 精度 PASS,544/544 memory OOB PASS。 - Kernel target=2 数值语义:1/1 PASS。 - GEIR 本地 NPU↔Golden:静态 Shape 3/3 PASS,未知维动态 Shape 2/2 PASS。 - GEIR 反向:14 例中 8 例有效拦截;alpha/gamma NaN/Inf 6 例未拦截,已在共性报告中记录为确认问题。 - 提交门禁:trailing whitespace、EOF、large files、merge conflict、private key、clang-format、ruff、codespell、OAT 全部通过。 ## 文档更新 - 新增 loss/sigmoid_focal_loss_grad/README.md。 - 更新 docs/zh/op_list.md。 - 新增 loss/sigmoid_focal_loss_grad/COMMON_ISSUE_SCAN.md。 - 未新增 ACLNN 接口文档或 ACLNN 描述。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9433 | 11 天前 | |
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 | 16 天前 | |
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 | 13 天前 | |
test(assets): 24 个算子 golden 适配新版 TTK spec 并补齐三方标杆能力 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9633 merge feat/ttk-golden-third-party into master test(assets): 24 个算子 golden 适配新版 TTK spec 并补齐三方标杆能力 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 这批 6 月及之前上库的算子, tests/assets/golden.py 仍是旧版 __golden__ = {"kernel": {...}} 注册,只有 CPU 真值一条腿,没有 third_party 三方标杆、也没有声明精度判据,跑不了 cross_check 三方交叉比对。仓内 hard_sigmoid / hard_swish_grad_v2 / deep_norm 已按新版 __spec__ 格式落地,本次把其余算子对齐。 范围:foreach 11 个 / lamb 7 个 / scatter 5 个 / relu6_grad 1 个,共 24 个。 ### 改动方式 按 ops-test-kit/ttk/test_spec/README.md 的规范,每个算子新增 __spec__ = {"<op_name>": "XxxKernelSpec"} 与对应 Spec 类,声明 golden / third_party / tolerance。**原 __golden__ 与 golden 函数体一律保留不动**,为纯追加,旧机制不受影响。 - **golden**:沿用原有实现。 - **third_party**:新增。foreach 系直接对标 torch._foreach_* 竞品 API;lamb 系无单一对标 API,用 torch 张量运算按同一算子定义拼接;scatter 系用 Tensor.index_reduce;Relu6Grad 原 golden 是纯 numpy 公式,本次补 torch 拼接作三方参照。 - **tolerance**:含算术的按 dtype 声明 cross_check(L1);ScatterMax / ScatterMin / ScatterList 是纯选择/拷贝语义,声明 binary_equal。 - **customize_inputs**:scatter 五算子把原 input.py 的合法索引重采样并入 Spec 字段,input.py 原文件保留,不影响旧机制。 ### 三处三方实现必须跟随算子的内部分支,不能照搬看似对应的 API - **ForeachBinaryOp** 按属性 op_code 分解为 add/sub/mul/div,且整型走独立路径(宽中间量 int64 + 窄化的 2's-complement wrap、整除向零截断、除数为 0 取 0)。三方按 op_code 分派并复刻整型语义。 - **ScatterDiv** 整型走截断除且除数为 0 时保持原值,不能升 fp32 —— 大 int32 经 float32 round-trip 会静默丢精度。整型判定与 golden 同源(_INT_DTYPES = def 注册的 int32/int8/uint8)。 - **Relu6Grad** 不用 aten.hardtanh_backward:它的判据是 (x<=0)|(x>=6) -> 0,NaN 对两个比较都为假于是透传 dy;本算子定义是 (x>0)&(x<6) 取掩码,NaN 落 else 分支得 0。两者只在 NaN 输入上分叉,直接拿它当三方会在 NaN 用例上假红。 ### 参数名与设备安全 三方类的参数名必须用 def 的注册名:TTK 的 __invoke_class 用 op_info["inputs"] 的 name 加 attributes 组 pool,再由 bind_by_name 按名绑定,不做 camelCase 或 _list 归一化,名字对不上直接抛 UnknownParamError。据此把 foreach 11 个的 x_list/x1_list/x2_list/x3_list 改为 def 的 x/x1/x2/x3。 三方实现必须设备安全:三方发到远端 XPU 服务执行,服务端先做 H2D 把 numpy 入参搬成目标设备上的 torch 张量再按名绑定。因此凡对入参调 np.asarray/np.ascontiguousarray 的写法,在 GPU 上会抛 "can't convert cuda tensor to numpy",等于三方腿跑不起来。统一改为:入参已是 torch.Tensor 就原样保留,只有非张量(本地自测)才走 numpy 兜底;dtype 判定用 tensor.dtype。 ### 通路注册 仓内先例(hard_sigmoid / hard_swish_grad_v2 / deep_norm)是「交付了的通路注册 spec、没交付的在文件尾写明」,本次补齐这一层:按 aclnn 头文件签名注册 aclnn spec,加上 kernel 共 39 条 spec;24 个文件尾部统一写明未交付通路(e2e / TensorFlow / ONNX / 融合 pass)及依据。GEIR 复用 kernel spec,无需另注册。 aclnn 通路两条腿的下发方式不同,签名必须分别对齐:golden 由 AclnnParamPlan.build_args 按**头文件形参顺序位置**下发全部形参;third_party 走远端 executor 的 bind_params **按名**绑定,pool 的 key 取自头文件张量形参名。形参名以**头文件**为准而非资料 —— 本机 CANN 内置头与自建 vendor 包生成头两处独立证据都是 def 注册名。golden 输出 dtype 须与算子输出一致,fp16/bf16 提到 fp32 算完必须还原,否则 binary_equal 走 _cross_dtype_compare 直接判「dtype 不可比」。 ## 关联的Issue 关联Issue #5493 ## 测试 - **TTK loader 实测**:39 条 spec 条目(24 kernel + 15 aclnn)全部可发现,golden / third_party / tolerance 三件齐全。 - **设备安全实测**:把 np.asarray/ascontiguousarray/array 打补丁成「收到 torch.Tensor 即抛错」(等价于 CUDA 张量的行为),再用全 torch 张量入参跑三方,24/24 通过且输出全为 torch 张量;numpy 入参这条本地自测路径同步复验,golden 与三方仍一致。 - **参数绑定实测**:用 TTK 自己的 bind_by_name 按 def 注册名组 pool,24/24 绑定成功并跑出结果。 - **旧机制回归**:用 CustomPluginManager.load_if_available 实测,旧 __golden__ 24/24 加载成功、旧 __input__ 5/5 加载成功,新旧两套注册并存不冲突。 - **真机抽检(Ascend950PR)**:kernel 通路逐算子抽检实跑。ScatterList 从 569 例全集等距抽 300 例,--compare close 实跑 300/300 PASS。 - ruff check / ruff format 全通过;仓内 scripts/oat_check.sh All checks passed。 ### 未覆盖 三方腿的实际比对需要 NPU + GPU 环境跑 TTK cross_check,本次仅做到 spec 可加载、golden 与 third_party 可调用且数值一致这一层,未做三方腿真机跑批。注意 TTK 在 third_party 输出缺失时不降级(ttk/core_modules/comparison/cross_check.py 直接返回 GOLDEN_FAILURE),故 GPU 侧不可达时,声明 cross_check 的算子需用 --compare 覆盖判据或待环境恢复后再跑。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:测试资产(golden)能力补齐 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9633 | 11 天前 | |
将卷积和matmul的ut根据版本隔离开, 整改950 ophost ut Co-authored-by: 18811725231<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !9549 merge master into master 将卷积和matmul的ut根据版本隔离开, 整改950 ophost ut Created-by: yang-di52 Commit-by: 18811725231 Merged-by: cann-robot Description: ## 描述 主要修改内容: 1. nn仓完成和legacy common 动态库解耦后,卷积和matmul的不同版本 ophost ut 已经不能混合一起跑了。需要版本隔离 2. ascend950的ut全量编译 失败,需要修改 ## 关联的Issue [https://gitcode.com/cann/ops-nn/issues/5425](https://gitcode.com/cann/ops-nn/issues/5425) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9549 | 12 天前 | |
docs:修复Unique系列 ACLNN文档中的格式与示例错误 Co-authored-by: jerry_gd<jerry.luo@huawei.com> # message auto-generated for no-merge-commit merge: !9697 merge master into master docs:修复Unique系列 ACLNN文档中的格式与示例错误 Created-by: jerry_gd Commit-by: jerry_gd Merged-by: cann-robot Description: ## 描述 修复Unique系列 ACLNN文档中的格式与示例错误。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5491 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本次仅修改 Markdown 文档和文档内示例代码,未执行编译或运行测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - index/unique_consecutive/docs/aclnnUnique.md - index/unique_consecutive/docs/aclnnUnique2.md - index/unique_consecutive/docs/aclnnUniqueConsecutive.md - index/unique_with_counts_ext2/docs/aclnnUniqueDim.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9697 | 11 天前 | |
[CANNBot] SigmoidFocalLossGrad 算子支持ascend950 AscendC Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !9433 merge SigmoidFocalLossGrad into master [CANNBot] SigmoidFocalLossGrad 算子支持ascend950 AscendC Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 将 SigmoidFocalLossGrad 迁移到 ops-nn/loss/sigmoid_focal_loss_grad,补齐 Ascend 950 的 OpDef、GEIR 图推导、Tiling 与 AscendC Kernel 实现。 本算子在 canndev 和 ops-nn 中均没有 ACLNN 接口契约,因此本变更不新增 ACLNN API、ACLNN 实现、ACLNN 文档或 ACLNN 用例。构建侧使用 ACLNNTYPE aclnn_exclude 明确禁止生成 ACLNN,原 ACLNN 测试场景已转换为 Kernel 直调或 GEIR 用例。 主要变更: - 新增 Ascend 950 OpDef、图原型、InferShape/InferDataType、Tiling 和 Kernel。 - 支持 pred/dout/weight 的 FLOAT16/FLOAT 组合、可选 weight,以及 mean/sum/none reduction。 - Golden 按 LongTailInfo/Sinh/golden文件/sinh.py 的 TestSpec 结构改造,仅注册 Kernel/GEIR 共用的 raw op;Torch 小算子组合注册为 third_party,精度规范为 L0 cross_check,计算顺序严格复用用户指定 sigmoid_focal_loss_grad_golden.py。 - 新增 Kernel 与 GEIR 正向/反向测试用例、README、算子列表和共性问题排查报告。 共性准入当前为 PARTIAL:已确认 canndev/目标仓原型与 InferShape 重复、未知 Rank/9D/Cast E2E/性能证据缺失,以及 alpha/gamma NaN/Inf 的 6 个反向用例未按预期拦截。详情见 loss/sigmoid_focal_loss_grad/COMMON_ISSUE_SCAN.md,本 PR 不将功能精度通过表述为完整转测准入通过。 ## 关联的Issue 关联 Issue #5283:https://gitcode.com/cann/ops-nn/issues/5283 ## 测试 - 构建:Ascend 950 operator package 构建成功;最终包 SHA256 62a5f24f23ad2370179e4f07b5d14dd8098b8c999ecbe9d2b9f43091d97d602c。 - Golden 源一致性:指定 LongTailInfo 源文件 SHA256 c10e2a95a87e50702f73091e3f6c57d9919496975c839e6fb978907c35faf35b;TestSpec 适配器与 canonical Golden 108/108 逐 bit 一致,Torch third_party 本地计算链 108/108 逐 bit 一致,最大绝对差均为 0。 - Kernel L0 三方:启动本机 xpu-server 的 CPU Torch provider 后,TTK 真实 cross_check 36/36 精度 PASS、36/36 provider PASS、36/36 memory OOB PASS。 - Kernel 本地 NPU↔Golden 回归(显式 stat_rel_err 诊断覆盖):544/544 精度 PASS,544/544 memory OOB PASS。 - Kernel target=2 数值语义:1/1 PASS。 - GEIR 本地 NPU↔Golden:静态 Shape 3/3 PASS,未知维动态 Shape 2/2 PASS。 - GEIR 反向:14 例中 8 例有效拦截;alpha/gamma NaN/Inf 6 例未拦截,已在共性报告中记录为确认问题。 - 提交门禁:trailing whitespace、EOF、large files、merge conflict、private key、clang-format、ruff、codespell、OAT 全部通过。 ## 文档更新 - 新增 loss/sigmoid_focal_loss_grad/README.md。 - 更新 docs/zh/op_list.md。 - 新增 loss/sigmoid_focal_loss_grad/COMMON_ISSUE_SCAN.md。 - 未新增 ACLNN 接口文档或 ACLNN 描述。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9433 | 11 天前 | |
tqbmm torch接口新增文档内容 Co-authored-by: huangkejie1647<huangkejie3@huawei.com> # message auto-generated for no-merge-commit merge: !9682 merge tqbmm_docs into master tqbmm torch接口新增文档内容 Created-by: huangkejie1647 Commit-by: huangkejie1647 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本pr 主要为 tqbmm torch接口新增文档内容 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#5471](https://gitcode.com/cann/ops-nn/issues/5471) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 不涉及 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> docs/zh/menu_torch_api.md matmul/transpose_quant_batch_mat_mul/docs/torchapi_transpose_quant_batch_mat_mul.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9682 | 11 天前 | |
修复L2_DFX_PHASE_1参数与接口不一致的问题 Co-authored-by: chenhaijie<chenhaijie2@h-partners.com> # message auto-generated for no-merge-commit merge: !9673 merge master into master 修复L2_DFX_PHASE_1参数与接口不一致的问题 Created-by: chenhaijie1423 Commit-by: chenhaijie Merged-by: cann-robot Description: ## 描述 修复L2_DFX_PHASE_1参数与接口不一致的问题 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5462 ## 测试 涉及修改的四个算子编译+跑example全部OK ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9673 | 11 天前 | |
test(assets): 24 个算子 golden 适配新版 TTK spec 并补齐三方标杆能力 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9633 merge feat/ttk-golden-third-party into master test(assets): 24 个算子 golden 适配新版 TTK spec 并补齐三方标杆能力 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 这批 6 月及之前上库的算子, tests/assets/golden.py 仍是旧版 __golden__ = {"kernel": {...}} 注册,只有 CPU 真值一条腿,没有 third_party 三方标杆、也没有声明精度判据,跑不了 cross_check 三方交叉比对。仓内 hard_sigmoid / hard_swish_grad_v2 / deep_norm 已按新版 __spec__ 格式落地,本次把其余算子对齐。 范围:foreach 11 个 / lamb 7 个 / scatter 5 个 / relu6_grad 1 个,共 24 个。 ### 改动方式 按 ops-test-kit/ttk/test_spec/README.md 的规范,每个算子新增 __spec__ = {"<op_name>": "XxxKernelSpec"} 与对应 Spec 类,声明 golden / third_party / tolerance。**原 __golden__ 与 golden 函数体一律保留不动**,为纯追加,旧机制不受影响。 - **golden**:沿用原有实现。 - **third_party**:新增。foreach 系直接对标 torch._foreach_* 竞品 API;lamb 系无单一对标 API,用 torch 张量运算按同一算子定义拼接;scatter 系用 Tensor.index_reduce;Relu6Grad 原 golden 是纯 numpy 公式,本次补 torch 拼接作三方参照。 - **tolerance**:含算术的按 dtype 声明 cross_check(L1);ScatterMax / ScatterMin / ScatterList 是纯选择/拷贝语义,声明 binary_equal。 - **customize_inputs**:scatter 五算子把原 input.py 的合法索引重采样并入 Spec 字段,input.py 原文件保留,不影响旧机制。 ### 三处三方实现必须跟随算子的内部分支,不能照搬看似对应的 API - **ForeachBinaryOp** 按属性 op_code 分解为 add/sub/mul/div,且整型走独立路径(宽中间量 int64 + 窄化的 2's-complement wrap、整除向零截断、除数为 0 取 0)。三方按 op_code 分派并复刻整型语义。 - **ScatterDiv** 整型走截断除且除数为 0 时保持原值,不能升 fp32 —— 大 int32 经 float32 round-trip 会静默丢精度。整型判定与 golden 同源(_INT_DTYPES = def 注册的 int32/int8/uint8)。 - **Relu6Grad** 不用 aten.hardtanh_backward:它的判据是 (x<=0)|(x>=6) -> 0,NaN 对两个比较都为假于是透传 dy;本算子定义是 (x>0)&(x<6) 取掩码,NaN 落 else 分支得 0。两者只在 NaN 输入上分叉,直接拿它当三方会在 NaN 用例上假红。 ### 参数名与设备安全 三方类的参数名必须用 def 的注册名:TTK 的 __invoke_class 用 op_info["inputs"] 的 name 加 attributes 组 pool,再由 bind_by_name 按名绑定,不做 camelCase 或 _list 归一化,名字对不上直接抛 UnknownParamError。据此把 foreach 11 个的 x_list/x1_list/x2_list/x3_list 改为 def 的 x/x1/x2/x3。 三方实现必须设备安全:三方发到远端 XPU 服务执行,服务端先做 H2D 把 numpy 入参搬成目标设备上的 torch 张量再按名绑定。因此凡对入参调 np.asarray/np.ascontiguousarray 的写法,在 GPU 上会抛 "can't convert cuda tensor to numpy",等于三方腿跑不起来。统一改为:入参已是 torch.Tensor 就原样保留,只有非张量(本地自测)才走 numpy 兜底;dtype 判定用 tensor.dtype。 ### 通路注册 仓内先例(hard_sigmoid / hard_swish_grad_v2 / deep_norm)是「交付了的通路注册 spec、没交付的在文件尾写明」,本次补齐这一层:按 aclnn 头文件签名注册 aclnn spec,加上 kernel 共 39 条 spec;24 个文件尾部统一写明未交付通路(e2e / TensorFlow / ONNX / 融合 pass)及依据。GEIR 复用 kernel spec,无需另注册。 aclnn 通路两条腿的下发方式不同,签名必须分别对齐:golden 由 AclnnParamPlan.build_args 按**头文件形参顺序位置**下发全部形参;third_party 走远端 executor 的 bind_params **按名**绑定,pool 的 key 取自头文件张量形参名。形参名以**头文件**为准而非资料 —— 本机 CANN 内置头与自建 vendor 包生成头两处独立证据都是 def 注册名。golden 输出 dtype 须与算子输出一致,fp16/bf16 提到 fp32 算完必须还原,否则 binary_equal 走 _cross_dtype_compare 直接判「dtype 不可比」。 ## 关联的Issue 关联Issue #5493 ## 测试 - **TTK loader 实测**:39 条 spec 条目(24 kernel + 15 aclnn)全部可发现,golden / third_party / tolerance 三件齐全。 - **设备安全实测**:把 np.asarray/ascontiguousarray/array 打补丁成「收到 torch.Tensor 即抛错」(等价于 CUDA 张量的行为),再用全 torch 张量入参跑三方,24/24 通过且输出全为 torch 张量;numpy 入参这条本地自测路径同步复验,golden 与三方仍一致。 - **参数绑定实测**:用 TTK 自己的 bind_by_name 按 def 注册名组 pool,24/24 绑定成功并跑出结果。 - **旧机制回归**:用 CustomPluginManager.load_if_available 实测,旧 __golden__ 24/24 加载成功、旧 __input__ 5/5 加载成功,新旧两套注册并存不冲突。 - **真机抽检(Ascend950PR)**:kernel 通路逐算子抽检实跑。ScatterList 从 569 例全集等距抽 300 例,--compare close 实跑 300/300 PASS。 - ruff check / ruff format 全通过;仓内 scripts/oat_check.sh All checks passed。 ### 未覆盖 三方腿的实际比对需要 NPU + GPU 环境跑 TTK cross_check,本次仅做到 spec 可加载、golden 与 third_party 可调用且数值一致这一层,未做三方腿真机跑批。注意 TTK 在 third_party 输出缺失时不降级(ttk/core_modules/comparison/cross_check.py 直接返回 GOLDEN_FAILURE),故 GPU 侧不可达时,声明 cross_check 的算子需用 --compare 覆盖判据或待环境恢复后再跑。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:测试资产(golden)能力补齐 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9633 | 11 天前 | |
fix: 文件名重复问题解决,改引用公共目录下的文件 | 11 天前 | |
【日志质量】修复SwiGlu系列算子日志问题(级别错配/语法错误/拼写错误等11条) Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !9575 merge fix/swi-glu-log-issues into master 【日志质量】修复SwiGlu系列算子日志问题(级别错配/语法错误/拼写错误等11条) Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 修改内容 修复 SwiGlu 系列算子(swi_glu / swi_glu_grad / swi_glu_quant)日志质量问题: 1. swi_glu_grad_tiling_regbase.cpp:错误日志级别 OP_LOGI 改为 OP_LOGE;"devide by 0" 拼写修正为 "divide by 0" 2. swi_glu_tiling.cpp:"input shape is not support Non-64B aligned" 改为 "input shape does not support Non-64B alignment" 3. swi_glu_quant_tiling_utils.h:6 处 "is only support" 改为 "only supports";"x and y shape is inconsistency" 改为 "x and y shapes are inconsistent";"dstType can only be 2 or 29" 补充枚举名 "2(DT_INT8) or 29(DT_INT4)" ## 自测 仅修改日志文案与日志级别,不涉及功能逻辑变更 关联issue: #5387 See merge request: cann/ops-nn!9575 | 11 天前 | |
修复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 | 13 天前 | |
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 | 13 天前 | |
feat: 18个迁移算子适配unknown shape/rank InferShape并补UT及入口日志 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8821 merge InferShape into master feat: 18个迁移算子适配unknown shape/rank InferShape并补UT及入口日志 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 18个迁移算子适配unknown shape/rank InferShape并补UT及入口日志 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5250 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:Unknown Shape/ Unknown Rank迁移适配 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8821 | 11 天前 | |
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 | 15 天前 | |
scaled_masked_softmax_v2 add nullptr verification Co-authored-by: caihualilili<liangfuzhan@h-partners.com> # message auto-generated for no-merge-commit merge: !9702 merge sms_nullptr_fix into master scaled_masked_softmax_v2 add nullptr verification Created-by: caihualilili Commit-by: caihualilili Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本 PR 为 scaled_masked_softmax_v2 算子补全空指针(nullptr)校验逻辑,属于 Bug 修复。在 aclnn_scaled_masked_softmax.cpp 的 aclnnScaledMaskedSoftmaxGetWorkspaceSize 接口中新增对输出参数 workspaceSize 和 executor 的空指针检查,并将 CheckParams 中已有空指针检查的返回错误码从 ACLNN_ERR_INNER_NULLPTR 调整为更符合对外参数校验语义的 ACLNN_ERR_PARAM_NULLPTR;同时新增了 4 个针对空指针场景的单元测试用例,覆盖 x、mask、y 及 workspaceSize 为空的情况。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> Issue #5376 Issue #5377 ## 测试 <!--描述进行了哪些测试来验证你的改动。-->  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9702 | 12 天前 | |
修改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 | 2 个月前 | |
动态库解耦 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 | 19 天前 | |
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 | 25 天前 | |
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 | 13 天前 | |
产品文档中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 个月前 | |
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 | 12 天前 | |
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 | 1 个月前 | |
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 个月前 | |
将卷积和matmul的ut根据版本隔离开, 整改950 ophost ut Co-authored-by: 18811725231<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !9549 merge master into master 将卷积和matmul的ut根据版本隔离开, 整改950 ophost ut Created-by: yang-di52 Commit-by: 18811725231 Merged-by: cann-robot Description: ## 描述 主要修改内容: 1. nn仓完成和legacy common 动态库解耦后,卷积和matmul的不同版本 ophost ut 已经不能混合一起跑了。需要版本隔离 2. ascend950的ut全量编译 失败,需要修改 ## 关联的Issue [https://gitcode.com/cann/ops-nn/issues/5425](https://gitcode.com/cann/ops-nn/issues/5425) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9549 | 12 天前 | |
fix matmul_emu_split_weight classify Co-authored-by: zhengyuhao3<zhengyuhao3@huawei.com> # message auto-generated for no-merge-commit merge: !9721 merge fix-mm_split_w-classify into master fix matmul_emu_split_weight classify Created-by: zhengyuhao3 Commit-by: zhengyuhao3 Merged-by: cann-robot Description: ## 描述 参考mat_mul_v3算子,修改matmul_emu_split_weight算子的classify_rule配置,区分arch35的扫描责任田 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 无代码改动,无需测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:classify配置调整 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9721 | 11 天前 | |
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 个月前 | |
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 | 11 天前 |
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:本项目功能和文档正在持续更新和完善中,欢迎您关注最新版本。