已合并
add hard_sigmoid for ascend950 #7874
tianyu52创建于 7月23日
add hard_sigmoid for ascend950 #7874
已合并
tianyu52创建于 7月23日
tianyu52
7月23日

描述

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生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 tianyu52 的贡献)
Ttianyu52
7月23日 创建了 pull request,commit 35dfb13e
Ttianyu52
7月23日 关联了issue:[Requirement|需求建议]: add hard_sigmoid for ascend950
atomgit-bot
atomgit-bot
7月23日 评论:

变更摘要

此 PR 为 Ascend950 (arch35/DAV_3510) 平台新增了 HardSigmoid 算子的完整实现,涵盖算子定义、Tiling 策略、Kernel 计算、形状推导、GE IR 原型及配套的单元测试和示例。同时修复了 ACLNN 层 hardsigmoid.cppGetStorageShape/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=2op_kernel/arch35/hard_sigmoid_tiling_key.hD_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.pycompare_data.py

  • 强化示例代码健壮性: 两个 arch35 示例将 CHECK_RET 宏替换为 do-while-false 统一错误出口,CreateAclTensor 增加失败时的 aclrtFree 回滚与空指针置零,资源释放环节增加 nullptr 判空保护,Init 函数在 aclrtSetDevice/aclrtCreateStream 失败时执行对应的 aclFinalize/aclrtResetDevice 清理。

  • 文档更新: aclnn_hardsigmoid.h 注释中所有 self 参数描述补充 BFLOAT16 支持;OAT.xml 新增 *.csv 跳过规则。

likedislike
atomgit-bot
atomgit-bot
7月23日 评论:

代码审查

审查总结

经过对 32 个变更文件的逐项审查,共发现 1 个问题

  • P3(1 个)test_geir_hard_sigmoid.cppGEFinalize 失败会掩盖实际测试结果,但仅影响测试示例代码,不影响生产行为。

各文件审查结果:

  • 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 问题。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
CANN-robotCANN-robot成员
7月23日 添加了label:cann-cla/yes
此处折叠了88条消息 查看更多
Wwang-xing001成员
7月25日 通过了评审
Wwang-xing001成员
7月25日 解决了最后一个问题
CANN-robotCANN-robot成员
7月25日 关闭了关联的issue
CANN-robotCANN-robot成员
7月25日 合入了pull request
CANN-robot
CANN-robot成员
7月25日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike