已合并
【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现 #3789
【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现 #3789
已合并
FineL1创建于 9月14日
FineL1
FineL1
9月14日

北京林业大学

团队信息

成员

算子: SigmoidCustom

实现 Ascend C Sigmoid 激活算子,支持 float16 / float32 数据类型。完成输出形状推导、Tiling 数据配置以及 Kernel 侧的数据搬运与计算流程;Kernel 采用 CopyIn → Compute → CopyOut 的流水处理方式,通过 TQue 和 LocalTensor 管理 UB 数据,并使用双缓冲提高数据搬运与计算效率。计算阶段基于 Ascend C Sigmoid 接口实现 y = 1 / (1 + exp(-x)),最终将计算结果从 UB 搬回 GM,完成 Sigmoid 激活算子的开源仓规范化实现。

CANNJudge 测试已通过,验证结果为 PASS。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 FineL1 的贡献)
FineL1FineL1
9月14日 创建了 pull request,commit 6d98ff40
atomgit-bot
atomgit-bot
9月14日 评论:

变更摘要

本 PR 为「代码侦探(第七期)」竞赛提交,实现 Ascend C Sigmoid 激活算子(挑战 07),覆盖 Host 侧算子定义、形状推导与 Tiling,以及 Kernel 侧基于 TQue/LocalTensor 的 CopyIn → Compute → CopyOut 流水计算,支持 float16 / float32 数据类型,并配套构建脚本、ACLNN 调用示例和 Host/Kernel UT 测试。

主要改动

  • 算子定义与形状推导:在 op_host/sigmoid_def.cpp 中通过 OP_ADD(Sigmoid) 注册算子,声明输入 x 与输出 y,数据类型限定为 ge::DT_FLOAT/ge::DT_FLOAT16 且均为 FORMAT_ND,并添加 ascend910b AICore 配置;op_host/sigmoid_infershape.cpp 中的 InferShapeSigmoid 将输入形状直接拷贝为输出形状(逐元素算子输出形状与输入一致)。
  • Tiling 逻辑:op_host/sigmoid_tiling.cpp 的 SigmoidTilingFunc 获取 UB 大小与 AIV Core 数,设置 SetBlockDim(1) 且 workspace 大小为 0,初始化 SigmoidTilingData(totalNum=0、blockFactor=1、ubFactor=0),并按输入数据类型选择 TilingKey(DT_FLOAT16/DT_BF16 走 SIGMOID_TPL_SCH_MODE_0,其余走 SIGMOID_TPL_SCH_MODE_1)。
  • Kernel 实现:op_kernel/sigmoid.cpp 与 sigmoid.h 实现模板类 NsSigmoid::Sigmoid<T>,通过 TPipe 和双缓冲(BUFFER_NUM=2)的 VECIN/VECOUT 队列以 TILE_LENGTH=1024 为粒度循环执行 CopyIn/Compute/CopyOut,Compute 阶段调用 AscendC::Sigmoid<T, false> 计算 y = 1 / (1 + exp(-x));当前针对固定 shape (8, 2048)(TOTAL_LENGTH=8*2048)实现,未依赖 tiling 数据做动态切分。
  • 构建与调用示例:新增 build.sh(支持 -u/--ut、-e/--example、--make_clean、-jN 等选项,默认 ascend910b);examples/test_aclnn_sigmoid.cpp 演示通过 aclnnSigmoidGetWorkspaceSize 与 aclnnSigmoid 两段式接口在 (8, 2048) float32 输入上调用该算子。
  • UT 测试框架:新增 tests/ut 测试工程,BuildGoogleTest.cmake 以旧 ABI(_GLIBCXX_USE_CXX11_ABI=0)从源码构建 gtest 1.14.0;提供 InferShapeContextFaker/TilingContextFaker 及对应 case executor 用于 Host 侧测试;test_sigmoid_tiling.cpp 校验 TilingKey 与 TilingData(期望 0 1 0),test_sigmoid.cpp 通过 ICPU_RUN_KF 运行 sigmoid<1> 核函数并配合 gen_data.py/compare_data.py 按 MERE/MARE 阈值做精度比对。
likedislike
不准确?
FineL1
FineL1
9月14日 评论:

/compile

likedislike
atomgit-bot
atomgit-bot
9月14日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
9月14日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
9月14日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/cann-outreach ✅ shaoyf, 傅涛 (2/2) ✅ shaoyf, 傅涛 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

FineL1, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
FineL1FineL1
9月14日 修改标题为 “【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现”,原标题为“[代码侦探(第七期)] 北京林业大学 - challenge07_sigmoidcustom”
FineL1FineL1
9月14日 关联了issue:【代码侦探Challenge07】北京林业大学 - challenge07_sigmoidcustom Sigmoid算子实现
FineL1FineL1
9月14日 修改了pull request 的描述
FineL1FineL1
9月14日 修改了pull request 的描述
FineL1FineL1
9月14日 修改了pull request 的描述
shaoyf成员
10 天前 评论:

/approve
/lgtm

likedislike
fulltower成员
10 天前 评论:

/approve
/lgtm

likedislike
CANN-robotCANN-robot成员
10 天前 添加了label:lgtmapproved
CANN-robotCANN-robot成员
10 天前 关闭了关联的issue
CANN-robotCANN-robot成员
10 天前 合入了pull request