Pull Request已成功合入, 合并人@CANN-robot
(感谢 tianyu52 的贡献)变更摘要
此 PR 为 Ascend950 (arch35/DAV_3510) 平台新增了 HardSigmoid 算子的完整实现,涵盖算子定义、Tiling 策略、Kernel 计算、形状推导、GE IR 原型及配套的单元测试和示例。同时修复了 ACLNN 层 hardsigmoid.cpp 中 GetStorageShape/GetStorageFormat 对非连续 Tensor 支持的缺陷,并更新了相关文档以纳入 BFLOAT16 数据类型。
主要改动
-
新增
HardSigmoid算子全栈实现: 在activation/hard_sigmoid/下新增op_host/hard_sigmoid_def.cpp(算子定义,支持 FLOAT/FLOAT16/BF16/INT32)、op_host/arch35/hard_sigmoid_tiling_arch35.cpp(多核切分与 UB 分块 tiling)、op_kernel/arch35/hard_sigmoid.cpp(三级流水 EnQue/DeQue kernel,按 dtype 模板实例化)、op_host/hard_sigmoid_infershape.cpp(输出形状 = 输入形状)、op_graph/hard_sigmoid_proto.h(REG_OP 原型),并在ascendc_config.json中注册至ascend950编译单元。 -
修复 ACLNN 层 Tensor 接口缺陷:
activation/hard_sigmoid/op_host/op_api/hardsigmoid.cpp中将executor->AllocTensor的参数从self->GetStorageShape()+GetStorageFormat()改为self->GetViewShape()+GetDataType(),使输出 Tensor 正确处理非连续输入;同时修正了aclnn_hardsigmoid.cpp中错误日志的英文语法。 -
新增 Tiling 数据结构与 Key 定义:
op_kernel/arch35/hard_sigmoid_tiling_data.h定义HardSigmoidTilingData(含totalElements/blockFactor/ubFactor/alpha/beta)及共享常量HARD_SIGMOID_BUFFER_NUM=2;op_kernel/arch35/hard_sigmoid_tiling_key.h以D_T_X作为单轴 tiling-key 按 input0 dtype 枚举 FLOAT/FLOAT16/BF16/INT32 四条编译路径。 -
新增 GE IR 构图样例与验证:
activation/hard_sigmoid/examples/arch35/test_geir_hard_sigmoid.cpp通过op::HardSigmoid构图并运行,与 CPU golden 逐元素比对(容差 1e-4),覆盖截断区、线性区及边界值。 -
新增完整单元测试体系: 包括 tiling UT(9 个用例覆盖各 dtype、空张量、自定义属性、非法 dtype、负维度、最小搬运分块多核场景)、形状推导 UT(张量/标量/空形状)、kernel UT(默认属性/自定义属性/空张量),以及 Python 脚本
golden.py(含边界注入逻辑)、gen_data.py、compare_data.py。 -
强化示例代码健壮性: 两个 arch35 示例将
CHECK_RET宏替换为do-while-false统一错误出口,CreateAclTensor增加失败时的aclrtFree回滚与空指针置零,资源释放环节增加nullptr判空保护,Init函数在aclrtSetDevice/aclrtCreateStream失败时执行对应的aclFinalize/aclrtResetDevice清理。 -
文档更新:
aclnn_hardsigmoid.h注释中所有self参数描述补充BFLOAT16支持;OAT.xml 新增*.csv跳过规则。


代码审查
审查总结
经过对 32 个变更文件的逐项审查,共发现 1 个问题:
- P3(1 个):
test_geir_hard_sigmoid.cpp中GEFinalize失败会掩盖实际测试结果,但仅影响测试示例代码,不影响生产行为。
各文件审查结果:
- OAT.xml — 无问题(新增 CSV 过滤规则)
- activation/hard_sigmoid/README.md — 无问题(更新示例路径)
- activation/hard_sigmoid/docs/aclnnHardsigmoid&aclnnInplaceHardsigmoid.md — 无问题(更新支持状态和文档)
- activation/hard_sigmoid/examples/arch35/test_aclnn_hard_sigmoid.cpp — 无问题(改进错误处理和资源清理)
- activation/hard_sigmoid/examples/arch35/test_aclnn_inplace_hard_sigmoid.cpp — 无问题(同上)
- activation/hard_sigmoid/examples/arch35/test_geir_hard_sigmoid.cpp — 1 个 P3 发现(GEFinalize 失败掩盖测试结果)
- activation/hard_sigmoid/op_graph/CMakeLists.txt — 无问题
- activation/hard_sigmoid/op_graph/hard_sigmoid_proto.h — 无问题(Op 原型定义正确)
- activation/hard_sigmoid/op_host/CMakeLists.txt — 无问题
- activation/hard_sigmoid/op_host/arch35/hard_sigmoid_tiling_arch35.cpp — 无问题(Tiling 逻辑、校验、UB 预算计算均正确)
- activation/hard_sigmoid/op_host/hard_sigmoid_def.cpp — 无问题
- activation/hard_sigmoid/op_host/hard_sigmoid_infershape.cpp — 无问题
- activation/hard_sigmoid/op_host/op_api/aclnn_hardsigmoid.cpp — 无问题(仅日志措辞改进)
- activation/hard_sigmoid/op_host/op_api/aclnn_hardsigmoid.h — 无问题(文档更新,增加 BFLOAT16)
- activation/hard_sigmoid/op_host/op_api/hardsigmoid.cpp — 无问题(Runtime2.0 AllocTensor API 适配)
- activation/hard_sigmoid/op_kernel/CMakeLists.txt — 无问题
- activation/hard_sigmoid/op_kernel/arch35/hard_sigmoid.cpp — 无问题(Kernel 流水线、类型分发、边界处理均正确)
- activation/hard_sigmoid/op_kernel/arch35/hard_sigmoid_tiling_data.h — 无问题
- activation/hard_sigmoid/op_kernel/arch35/hard_sigmoid_tiling_key.h — 无问题
- activation/hard_sigmoid/tests/assets/golden.py — 无问题
- activation/hard_sigmoid/tests/st/arch35/ttk_kernel_hard_sigmoid.csv — 无问题
- activation/hard_sigmoid/tests/ut/op_host/arch35/CMakeLists.txt — 无问题
- activation/hard_sigmoid/tests/ut/op_host/arch35/test_hard_sigmoid_tiling.cpp — 无问题
- activation/hard_sigmoid/tests/ut/op_host/test_hard_sigmoid_infershape.cpp — 无问题
- activation/hard_sigmoid/tests/ut/op_kernel/CMakeLists.txt — 无问题
- activation/hard_sigmoid/tests/ut/op_kernel/hard_sigmoid_data/compare_data.py — 无问题
- activation/hard_sigmoid/tests/ut/op_kernel/hard_sigmoid_data/gen_data.py — 无问题
- activation/hard_sigmoid/tests/ut/op_kernel/hard_sigmoid_tiling_def.h — 无问题
- activation/hard_sigmoid/tests/ut/op_kernel/test_hard_sigmoid.cpp — 无问题
- docs/zh/op_api_list.md — 无问题
- docs/zh/op_list.md — 无问题
- scripts/kernel/binary_config/ascendc_config.json — 无问题(JSON 格式正确,配置与同类算子一致)
整体风险评估:✅ 低风险。核心算子逻辑(Tiling、Kernel、InferShape、Op 定义)经过仔细审查,32 位乘法链、UB 预算、TilingKey 字段顺序、空张量处理、错误路径资源释放等均正确;仅测试示例代码存在一个轻微的 P3 问题。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


描述
add hard_sigmoid for ascend950
hard_sigmoid适配950
关联的Issue
测试
UT/ST pass ; ops-test-kit 测试900+ 用例pass
文档更新
activation/hard_sigmoid/README.md
activation/hard_sigmoid/docs/aclnnHardsigmoid&aclnnInplaceHardsigmoid.md
docs/zh/op_api_list.md
docs/zh/op_api_list.md
类型标签
AI/Agent生成声明