| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Add SparseSegmentSum op migration Co-authored-by: jialimin1<jialimin1@huawei.com> # message auto-generated for no-merge-commit merge: !7621 merge migrate-sparse-segment-sum into master Add SparseSegmentSum op migration Created-by: jialimin1 Commit-by: jialimin1 Merged-by: cann-robot Description: ## 描述 将 SparseSegmentSum AICPU 算子迁移至 ops-nn 仓库,共新增 16 个文件,并同步更新 docs/zh/op_list.md。算子沿 segment_ids 指定的稀疏分段对 x 的切片求和,计算公式 y[segment_ids[i]] += x[indices[i]],兼容 TensorFlow SparseSegmentSum。 实现要点: 1. op_graph/sparse_segment_sum_proto.h:REG_OP(SparseSegmentSum) 注册 3 输入(x/indices/segment_ids)、1 输出(y),声明支持的数据类型集合(x/y 11 种 dtype,indices/segment_ids 为 INT32/INT64)。 2. op_host/sparse_segment_sum_infershape.cpp:校验 x rank≥1、indices/segment_ids 为 1D 且 shape 一致;输出 dim0 在 segment_ids 为 const 时取 max(segment_ids)+1,否则置 UNKNOWN_DIM;输出 dim[1:] 取 x[1:];输出 dtype 与 x 一致。 3. op_kernel_aicpu/sparse_segment_sum_aicpu.cpp:校验 segment_ids 非负且单调非递减、indices 元素 < x.dim(0);使用 Eigen TensorMap 按段累加 input_flat.chip<0>(indices[r]),段间 gap 与末尾 gap 用 setConstant(0) 填零;x 支持 11 种 dtype,indices/segment_ids 各支持 INT32/INT64(4 种组合)。 4. 配套 examples(图模式调用样例)、tests/ut(Host InferShape + kernel UT)、各级 CMakeLists.txt 与 README.md。 ## 关联的Issue #4294 ## 测试 根据代码变更,测试场景如下: 1. **编译构建测试** - 执行各级 CMakeLists.txt 配置与编译,验证 SparseSegmentSum 算子(op_graph / op_host / op_kernel_aicpu / tests)可正常构建。 2. **算子注册/加载验证** - 验证 REG_OP(SparseSegmentSum) 与 REGISTER_CPU_KERNEL(SparseSegmentSum, ...) 注册成功,算子可被框架正确识别并加载。 3. **InferShape 验证** - 运行 tests/ut/op_host/test_sparse_segment_sum_infershape.cpp,验证:x rank≥1 校验、indices/segment_ids 1D 且 shape 一致校验、const segment_ids 时输出 dim0 = max+1、非 const 时输出 dim0 = UNKNOWN_DIM、输出 dtype 与 x 一致。 4. **kernel 单元测试** - 运行 tests/ut/op_kernel_aicpu/test_sparse_segment_sum.cpp,覆盖 x 的 11 种数据类型(INT8/16/32/64、UINT8/16/32/64、FLOAT16/FLOAT/DOUBLE)与 indices/segment_ids 的 4 种 INT32/INT64 组合,验证累加结果与 gap 填零正确。 5. **参数校验测试** - 覆盖 SparseSegmentCheck / SparseSegmentDataCheck 中的边界场景:x rank<1、indices/segment_ids 元素数不一致、x/y dtype 不一致、segment_ids 存在负值、segment_ids 非单调递减、indices 元素 ≥ x.dim(0) 等,均应返回 KERNEL_STATUS_PARAM_INVALID。 6. **图模式接口调用验证** - 运行 examples/test_geir_sparse_segment_sum.cpp,通过 GE IR 构图方式调用 SparseSegmentSum 算子,验证端到端功能与输出正确性,并与 TensorFlow SparseSegmentSum 结果对齐。 7. **算子清单登记验证** - 确认 docs/zh/op_list.md 中 SparseSegmentSum 条目正确显示,分类为 index,README 链接可达。 ## 文档更新 - 新增 index/sparse_segment_sum/README.md:产品支持情况(Ascend 950PR/950DT 支持)、功能说明、参数说明(含完整数据类型表格)、约束说明与调用说明。 - 更新 docs/zh/op_list.md:登记 SparseSegmentSum 算子条目。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7621 | 3 个月前 | |
ops-nn仓算子添加隔离宏 Co-authored-by: ayuemoon<15802951036@163.com> # message auto-generated for no-merge-commit merge: !9655 merge proto_reg_op_modify into master ops-nn仓算子添加隔离宏 Created-by: ayuemoon Commit-by: ayuemoon Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 为 IndexToAddr、NonZeroWithValueShape、NonZeroWithValueShapeV2、SparseFillEmptyRows、SparseSegmentSum 算子添加隔离宏,防止原型重复定义。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 无 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9655 | 1 个月前 | |
Add SparseSegmentSum op migration Co-authored-by: jialimin1<jialimin1@huawei.com> # message auto-generated for no-merge-commit merge: !7621 merge migrate-sparse-segment-sum into master Add SparseSegmentSum op migration Created-by: jialimin1 Commit-by: jialimin1 Merged-by: cann-robot Description: ## 描述 将 SparseSegmentSum AICPU 算子迁移至 ops-nn 仓库,共新增 16 个文件,并同步更新 docs/zh/op_list.md。算子沿 segment_ids 指定的稀疏分段对 x 的切片求和,计算公式 y[segment_ids[i]] += x[indices[i]],兼容 TensorFlow SparseSegmentSum。 实现要点: 1. op_graph/sparse_segment_sum_proto.h:REG_OP(SparseSegmentSum) 注册 3 输入(x/indices/segment_ids)、1 输出(y),声明支持的数据类型集合(x/y 11 种 dtype,indices/segment_ids 为 INT32/INT64)。 2. op_host/sparse_segment_sum_infershape.cpp:校验 x rank≥1、indices/segment_ids 为 1D 且 shape 一致;输出 dim0 在 segment_ids 为 const 时取 max(segment_ids)+1,否则置 UNKNOWN_DIM;输出 dim[1:] 取 x[1:];输出 dtype 与 x 一致。 3. op_kernel_aicpu/sparse_segment_sum_aicpu.cpp:校验 segment_ids 非负且单调非递减、indices 元素 < x.dim(0);使用 Eigen TensorMap 按段累加 input_flat.chip<0>(indices[r]),段间 gap 与末尾 gap 用 setConstant(0) 填零;x 支持 11 种 dtype,indices/segment_ids 各支持 INT32/INT64(4 种组合)。 4. 配套 examples(图模式调用样例)、tests/ut(Host InferShape + kernel UT)、各级 CMakeLists.txt 与 README.md。 ## 关联的Issue #4294 ## 测试 根据代码变更,测试场景如下: 1. **编译构建测试** - 执行各级 CMakeLists.txt 配置与编译,验证 SparseSegmentSum 算子(op_graph / op_host / op_kernel_aicpu / tests)可正常构建。 2. **算子注册/加载验证** - 验证 REG_OP(SparseSegmentSum) 与 REGISTER_CPU_KERNEL(SparseSegmentSum, ...) 注册成功,算子可被框架正确识别并加载。 3. **InferShape 验证** - 运行 tests/ut/op_host/test_sparse_segment_sum_infershape.cpp,验证:x rank≥1 校验、indices/segment_ids 1D 且 shape 一致校验、const segment_ids 时输出 dim0 = max+1、非 const 时输出 dim0 = UNKNOWN_DIM、输出 dtype 与 x 一致。 4. **kernel 单元测试** - 运行 tests/ut/op_kernel_aicpu/test_sparse_segment_sum.cpp,覆盖 x 的 11 种数据类型(INT8/16/32/64、UINT8/16/32/64、FLOAT16/FLOAT/DOUBLE)与 indices/segment_ids 的 4 种 INT32/INT64 组合,验证累加结果与 gap 填零正确。 5. **参数校验测试** - 覆盖 SparseSegmentCheck / SparseSegmentDataCheck 中的边界场景:x rank<1、indices/segment_ids 元素数不一致、x/y dtype 不一致、segment_ids 存在负值、segment_ids 非单调递减、indices 元素 ≥ x.dim(0) 等,均应返回 KERNEL_STATUS_PARAM_INVALID。 6. **图模式接口调用验证** - 运行 examples/test_geir_sparse_segment_sum.cpp,通过 GE IR 构图方式调用 SparseSegmentSum 算子,验证端到端功能与输出正确性,并与 TensorFlow SparseSegmentSum 结果对齐。 7. **算子清单登记验证** - 确认 docs/zh/op_list.md 中 SparseSegmentSum 条目正确显示,分类为 index,README 链接可达。 ## 文档更新 - 新增 index/sparse_segment_sum/README.md:产品支持情况(Ascend 950PR/950DT 支持)、功能说明、参数说明(含完整数据类型表格)、约束说明与调用说明。 - 更新 docs/zh/op_list.md:登记 SparseSegmentSum 算子条目。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7621 | 3 个月前 | |
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 | 13 天前 | |
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 | 1 个月前 | |
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 | 27 天前 |
SparseSegmentSum
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
功能说明
- 算子功能:沿
segment_ids指定的稀疏分段对x的切片求和。 - 计算公式:
y[segment_ids[i]] += x[indices[i]]。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 输入张量,rank 至少为 1。 | INT8、UINT8、INT16、UINT16、INT32、UINT32、INT64、UINT64、DOUBLE、FLOAT、FLOAT16 | ND |
| indices | 输入 | 一维索引张量,用于选择 `x` 第 0 维上的切片。 | INT32、INT64 | ND |
| segment_ids | 输入 | 一维分段 ID 张量,shape 需要与 `indices` 一致,取值需要非负且单调非递减。 | INT32、INT64 | ND |
| y | 输出 | 输出张量,数据类型与 `x` 相同。 | INT8、UINT8、INT16、UINT16、INT32、UINT32、INT64、UINT64、DOUBLE、FLOAT、FLOAT16 | ND |
约束说明
x的 rank 需要大于等于 1。indices与segment_ids必须为一维张量,且元素数量一致。segment_ids必须按非递减顺序排列。indices中的元素必须小于x第 0 维大小。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| 图模式 | test_geir_sparse_segment_sum | 通过 GE IR 构图方式调用 SparseSegmentSum 算子。 |