| 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 | 2 个月前 |