| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(index): add SparseSegmentMean AICPU op Co-authored-by: zhaowenrui666<zhaowenrui7@huawei.com> # message auto-generated for no-merge-commit merge: !7587 merge sparse_segment_mean_aicpu into master feat(index): add SparseSegmentMean AICPU op Created-by: zhaowenrui666 Commit-by: zhaowenrui666 Merged-by: cann-robot Description: ## 描述 迁移 SparseSegmentMean AICPU 算子到 ops-nn/index 目录,补齐自定义 AICPU 构建、注册、UT、GEIR example 和 README 文档。 主要改动: - 新增 index/sparse_segment_mean/op_kernel_aicpu,包含 AICPU kernel、头文件、AICPU OpDef 和 CMakeLists.txt。 - 新增 index/sparse_segment_mean/tests/ut/op_kernel_aicpu/test_sparse_segment_mean.cpp,覆盖 float/double/float16、int32/int64 indices 和异常场景。 - 新增 index/sparse_segment_mean/examples/test_geir_sparse_segment_mean.cpp,验证图模式 cust 调用链路。 - 新增 index/sparse_segment_mean/README.md,并更新 docs/zh/op_list.md。 ## 关联的Issue 暂无。 ## 测试 已完成以下验证: - pre-commit run --files docs/zh/op_list.md index/sparse_segment_mean/README.md index/sparse_segment_mean/examples/test_geir_sparse_segment_mean.cpp index/sparse_segment_mean/op_kernel_aicpu/CMakeLists.txt index/sparse_segment_mean/op_kernel_aicpu/sparse_segment_mean_aicpu.cpp index/sparse_segment_mean/op_kernel_aicpu/sparse_segment_mean_aicpu.h index/sparse_segment_mean/op_kernel_aicpu/sparse_segment_mean_aicpu_def.cpp index/sparse_segment_mean/tests/ut/op_kernel_aicpu/test_sparse_segment_mean.cpp - bash build.sh -u --opkernel_aicpu --ops=sparse_segment_mean - bash build.sh --pkg --soc=ascend910b --ops=sparse_segment_mean - bash build.sh --run_example sparse_segment_mean graph cust ## 文档更新 - 新增 index/sparse_segment_mean/README.md。 - 更新 docs/zh/op_list.md,补充 sparse_segment_mean 的 AI Core/AI CPU 支持信息。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7587 | 2 个月前 | |
refactor: 迁移 TF 插件注册至新框架 API(part 3) Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !9758 merge tf-plugin-part3 into master refactor: 迁移 TF 插件注册至新框架 API(part 3) Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 将 TF 框架侧自定义算子注册(REGISTER_CUSTOM_OP)从旧工具链迁移至 ops-nn 新仓(TF 插件迁移 part 3),共新增/调整 22 个 *_tf_plugin.cpp 注册文件。 ### 改动原因 1. 旧注册 API(ParseParamsFn/AutoMappingFn)与标量 OriginOpType({...}) 写法在新工具链已不适用,统一迁移为 ParseParamsByOperatorFn(AutoMappingByOpFn) 与 OriginOpType(std::vector<ge::AscendString>{...}) 形式; 2. 依赖 TF protobuf NodeDef(node_def.pb.h)的旧解析逻辑在新工具链中已不存在,相关解析改为基于 ge::Operator 的子图分解(ParseOpToGraphFn/FusionParseParamsFn)实现; 3. 承接本仓已完成的 TF 插件迁移 part 1/2,补齐剩余算子的 TF 注册。 ### 改动方法 按模块汇总: - common:新增 AscendWeightQuant(TF 字符串 dst_type 到 ge DataType 的转换解析)、GatherPoint(分解为 GatherV2+Const 子图)、GatherPointGrad(分解为 ScatterUpdate 子图)注册; - index:gather_v2 新增 Gather/ResourceGather 到自定义 Gather 的注册;scatter_add/scatter_sub 新增 TensorScatterAdd/TensorScatterSub 注册;新增 BroadcastGradientArgs、SparseSegmentMean、SparseSegmentMeanGrad、SparseSlice、SparseToDense 注册; - norm:BNInfer/BNTrainingReduceGrad/BNTrainingUpdateGrad/LayerNorm/LayerNormGrad 由 ParseParamsFn 迁移到 ParseParamsByOperatorFn;LayerNorm/LayerNormGrad 增补 FusedLayerNorm/FusedLayerNormGrad 双 origin 映射;bn_training_update_v2 新增 BNTrainingUpdate 注册; - optim:ApplyAdagrad 迁移新 API(保留 ApplyAdagrad/ResourceApplyAdagrad 双 origin); - matmul:新增 Einsum 注册; - rnn:新增 BlockLSTM(分解为 DynamicRNN 子图,含 seq_length 的 Cast 与输出重排)、DynamicRNN 融合解析(FusionParseParamsFn)与 DynamicRnn 注册、DynamicRNNV2/DynamicRnnV2 系列注册(含 is_misplaced 属性处理)。 ## 关联的Issue 关联 Issue #5505:https://gitcode.com/cann/ops-nn/issues/5505 ## 测试 本 PR 仅涉及注册/图解析代码迁移,无测试文件变更;依赖仓内 CI(编译、静态检查、UT/ST 工作流)验证。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:TF 插件注册迁移(part 3) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9758 | 1 个月前 | |
SparseSegmentMean RT2 infershape 迁移 Co-authored-by: zhaowenrui666<zhaowenrui7@huawei.com> # message auto-generated for no-merge-commit merge: !8004 merge sparse_segment_mean_rt2_infershape into master SparseSegmentMean RT2 infershape 迁移 Created-by: zhaowenrui666 Commit-by: zhaowenrui666 Merged-by: cann-robot Description: ### 修改内容 - 新增 SparseSegmentMean RT2 InferShape/InferDataType。 - 输出 shape 语义对齐 canndev SparseSegmentMean RT2,复用 SparseSegmentSum 同类推导口径。 - 增加 op_host infershape UT 覆盖 segment_ids 常量、未知输出首维、dtype 跟随输入等场景。 ### 依据 - canndev: ops/built-in/op_proto/runtime/math_ops.cc SparseSegmentMean RT2 - 参考已合入 SparseSegmentSum RT2 迁移写法 ### 验证 - git diff --check - bash build.sh -u --ophost --ops=sparse_segment_mean --noexec -j8 - pre-commit 已在提交时通过 See merge request: cann/ops-nn!8004 | 1 个月前 | |
Feature: 为 index 和 pooling 类算子新增 Ascend350 平台支持 Co-authored-by: klein8793<zhangli24@huawei.com> # message auto-generated for no-merge-commit merge: !9754 merge dev_zl_2026_0902 into master Feature: 为 index 和 pooling 类算子新增 Ascend350 平台支持 Created-by: klein8793 Commit-by: klein8793 Merged-by: cann-robot Description: ## 描述 为 index 和 pooling 类算子新增 Ascend350 平台支持。具体变更包括: 1. **新增 Ascend350 平台配置文件**(42 个 JSON):为每个算子新增 op_host/config/ascend350/ 下的二进制配置 JSON 2. **注册 Ascend350 平台**:在各算子 _def.cpp 中添加 his->AICore().AddConfig(ascend350, aicoreConfig) 3. **更新编译配置**:修改各算子 CMakeLists.txt,添加 Ascend350 编译选项;更新 scendc_config.json 中对应算子的 compute_units 列表,将 [ascend950] 扩展为 [ascend950, ascend350] 4. **更新 Fusion Pass 平台判断**:在 bucketize_v2_fusion_pass、inplace_add_fusion_pass、gather_fusion_pass、tensor_scatter_add_fusion_pass、sorted_sparse_segment_mean_grad_fusion_pass 中将 Ascend350 加入平台白名单 涉及算子(35+): - index: bucketize_v2, concat_offset, gather_elements, gather_nd, gather_v2, index_fill, index_fill_d, index_put_v2, inplace_index_add, inplace_index_fill, linear_index_v2, masked_scatter, repeat_interleave, reverse_sequence, reverse_v2, scatter, scatter_add, scatter_add_with_sorted, scatter_elements, scatter_elements_v2, scatter_nd, scatter_nd_add, scatter_nd_max, scatter_nd_min, scatter_nd_update, scatter_sub, scatter_update, segment_sum, sorted_sparse_segment_mean_grad, sparse_segment_mean, sparse_to_dense, unsorted_segment_max, unsorted_segment_min - pooling: avg_pool, avg_pool_v2 - 公共库: scatter_nd_common, unsorted_segment_common, sort_lib ## 关联的Issue - #5651 ## 测试 obp冒烟、david冒烟已通过 ## 文档更新 NA ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!9754 | 1 个月前 | |
AscendC接口兼容性变更整改 Co-authored-by: lihang_13123<lihang106@h-partners.com> # message auto-generated for no-merge-commit merge: !8316 merge scatter into master AscendC接口兼容性变更整改 Created-by: lihang_13123 Commit-by: lihang_13123 Merged-by: cann-robot Description: ## 描述 AscendC部分接口兼容性变更,为与接口文档保持一致,修改部分算子对应接口。修改后各算子二进制和修改前一致 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 修改后各算子二进制和修改前一致,算子调用OK,冒烟OK ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:算子AscendC接口兼容性整改 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8316 | 2 个月前 | |
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 | 10 天前 | |
perf: 优化 SparseSegmentMean 和 SparseSegmentSum AICPU 性能 Co-authored-by: Ding_Jing<dingjing19@huawei.com> # message auto-generated for no-merge-commit merge: !11057 merge perf/sparse-segment-eigen5 into master perf: 优化 SparseSegmentMean 和 SparseSegmentSum AICPU 性能 Created-by: Ding_Jing Commit-by: Ding_Jing Merged-by: cann-robot Description: ## 描述 Eigen 5.0 下 SparseSegmentMean 和 SparseSegmentSum 的 TensorMap/chip 热路径存在明显性能回退。 本 PR 将两个算子改为连续行 packet 循环与标量尾部,只对 segment 间隙清零,并保持逐元素累加顺序; 同步补充向量尾部、segment gap、负索引和有符号溢出等真实 kernel UT。 首轮流水线暴露 SparseSegmentSum 头文件依赖未自包含及 C++17 写法与生产 C++14 不兼容,已修复。 两个热函数的 CodeCheck NBNC 均已收敛:Mean 为 50,Sum 为 48。Mean 的最终修复保留原 while (true) 热循环;普通 helper 候选曾稳定回退约 5.6%,已否决,未进入本 PR。 本 PR 变更文件: - index/sparse_segment_mean/op_kernel_aicpu/sparse_segment_mean_aicpu.cpp - index/sparse_segment_mean/tests/ut/op_kernel_aicpu/test_sparse_segment_mean.cpp - index/sparse_segment_sum/op_kernel_aicpu/sparse_segment_sum_aicpu.cpp - index/sparse_segment_sum/op_kernel_aicpu/sparse_segment_sum_aicpu.h - index/sparse_segment_sum/tests/ut/op_kernel_aicpu/test_sparse_segment_sum.cpp ## 关联的Issue 关联 Issue #6138 ## 测试 - Mean 指定场景 FLOAT[104,105] + INT32[10922] + INT32[10922] -> FLOAT[3,105]: 最终 5x101 最慢均值 335.563 us,比 Eigen 3.4 的 722.35 us 门槛低 53.55%; 21x101 最终版/调整前复测比为 1.00093,95% CI [0.99960,1.00227]。 - Sum 指定场景 FLOAT[32,512] + INT32[8192] + INT32[8192] -> FLOAT[3,512]: CodeCheck 修复后 9x101 p50 平均 692.812 us,比 Eigen 3.4 的 924.43 us 门槛低约 24.8%; 修复后/修复前为 1.00130,95% CI [0.99905,1.00356]。 - 完整矩阵:Mean/Sum 共 56 个 dtype x shape 组合无确认性能回退;56/56 普通值和 6/6 特殊值 输出哈希一致。Mean 最终行数修复另做 12 组同机 A/B,输出哈希逐位一致且无确认回退。 - 独立 ABI=0 真实 kernel UT:Mean 12/12、Sum 9/9;ASan+UBSan 均通过,无报告。 - 当前源码 repo-native AICPU UT:Mean 12/12、Sum 9/9 均编译、链接并运行通过。 - 两个 graph example 均成功且输出与各自 host 参考一致。Mean 的 host/device plog 记录 aicpu_ascend_kernel::CheckSupported 和从 libcpu_kernels.so 取得 RunCpuKernel;Sum 的同一 会话记录 aicpu_custom_scheduler 与 CUSTOM_COMPUTE,确认实际执行 AICPU 路径。 - 本轮检视修复:x 第 0 维非法日志已补充算子名前缀和实际 dim0,并同步 canndev。 修复前后两仓各 68 个 ComputeKernelWithType 模板符号大小逐项一致,指定 FLOAT 实例 规范化指令一致;ops-nn Sum 真实 kernel UT 9/9、canndev 非文件驱动 UT 15/15 通过。 - 两仓均通过 -O2 -ftrapv -Wall -Wextra -Werror 严格编译;5 个变更文件连续两次通过 pre-commit(clang-format、OAT、codespell),git diff --check 通过。 - 当前单提交已通过服务端完整流水线,标签为 ci-pipeline-passed。 ## 文档更新 无产品文档变更;本地完整验证报告为 /home/ding-jing/ops_nn_sparse_segment_eigen5_perf_verification.md。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!11057 | 29 天前 | |
feat(aicpu): enable constant folding for migrated ops Co-authored-by: hid29204727<wangboyu20@huawei.com> # message auto-generated for no-merge-commit merge: !9280 merge codex/aicpu-const-folding into master feat(aicpu): enable constant folding for migrated ops Created-by: hid29204727 Commit-by: hid29204727 Merged-by: cann-robot Description: ## 描述 补充 ops-nn 仓 AICPU host 常量折叠注册通路,并为当前已标记 OPEN_OPS_FLAG 的 18 个迁移算子统一开启常量折叠支持。 主要改动: - 新增仓级 OPS_NN_REGISTER_CPU_KERNELV2 注册包装宏,host 构建优先注册 V2,device/custom/UT 保持 V1 回退。 - 为 add_modules_sources 和 add_all_modules_sources 增加 HOSTCPU 参数及 host OBJECT 收集逻辑。 - 为 18 个 OPEN_OPS_FLAG 算子补充 HOSTCPU TRUE、注册头文件和 V2 注册。 - host OBJECT 汇入 libopconstant_folding_nn.so。 ## 关联的Issue 无。 ## 测试 已完成以下静态验证: - git diff --check 通过。 - 18 个 OPEN_OPS_FLAG 算子均具备 HOSTCPU TRUE。 - 18 个算子均使用 OPS_NN_REGISTER_CPU_KERNELV2,无直接 V1 注册残留。 - 注册头文件、host 编译宏和仓级 so 收集通路检查通过。 当前 Windows 环境缺少 CANN、NPU、CMake 和远端构建桥,未执行 bash build.sh --pkg -j16;完整打包构建及常量折叠功能验证待 CANN Linux 环境/CI 完成。 ## 文档更新 无仓内文档变更。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9280 | 1 个月前 | |
产品名称修改 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 | 24 天前 |
SparseSegmentMean
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
功能说明
- 算子功能:根据
indices和有序的segment_ids从x中选取若干行,并对同一个 segment 内的行按第0维求平均。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
x |
输入 | 输入张量,rank至少为1。 | FLOAT、DOUBLE、FLOAT16 | ND |
indices |
输入 | 一维张量,表示从x第0维选取的行索引。 |
INT32、INT64 | ND |
segment_ids |
输入 | 一维张量,元素个数与indices一致,值必须非负且按非递减顺序排列。 |
INT32、INT64 | ND |
y |
输出 | 输出张量,数据类型与x一致,第0维大小为segment_ids最后一个元素加1,其余维度与x一致。 |
FLOAT、DOUBLE、FLOAT16 | ND |
约束说明
x、indices、segment_ids不能为空张量。x的rank必须大于等于1。indices与segment_ids元素个数必须一致。indices中的值必须小于x第0维大小。segment_ids必须非负且按非递减顺序排列。x和y的数据类型必须一致。- 本算子支持AI CPU实现,AI CPU实现支持FLOAT、DOUBLE、FLOAT16。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_sparse_segment_mean | 通过算子IR构图方式调用SparseSegmentMean算子。 |