已关闭
[Requirement|需求建议]: Sigmoid算子AscendC实现 #234
天上的星星哪去了创建于  2025年12月16日关闭于  4月28日
天上的星星哪去了
2025年12月16日 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Backgroud(背景信息)

cann训练营二期算子开发任务。

参考版本内置sigmoid算子的TBE实现,在昇腾NPU上使用Ascend C编程语言实现相同功能的算子。

Origin(信息来源)

外部贡献

Benefit / Necessity (价值/作用)

参考内置算子实现,需实现相同功能,包含相同数据类型和相同数据格式,其中int64,double数据类型可暂不支持,广播操作可暂不支持。
算子性能要求持平原有TBE实现算子,当前可暂只支持在使用所有核进行计算时性能需不低于原有TBE算子95%。
适用于Atlas 800I A2推理产品

Design(设计方案)

host侧设计方案

算子计算过程不涉及数据的维度信息,故在host侧将数据视为一维向量,仅考虑数据个数,不考虑数据维度信息。
任务均分:coreNum 根据输入长度和块大小动态调整,确保每个核心处理的数据块数均匀。
批量搬运:tileBlockNum 和 tileDataNum 计算单次搬运的数据量,通过 finalSmallTileNum 和 finalBigTileNum 确定小核/大核的搬运次数,将多次搬运合并为批量操作,减少冗余开销。尾块的处理逻辑确保不完整块也能被合并到计算流程中,避免数据碎片。

1) 分核策略

优先使用满核的原则。
如果核间能均分,可视作无大小核区分,大核小核数据块一致;
如果核间不能均分,需要将余出的数据块分配到前几个核上。
输入数据大小计算:通过GetInputShape和GetDataTypeLength函数获取输入数据的大小和类型长度,计算出输入数据的总字节数。
UB内存大小和核心数量获取:通过平台信息获取UB内存大小和核心数量,并根据这些信息调整核心数量。

2) 数据分块和内存优化策略

充分使用UB空间的原则。
需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。
UB内存大小获取:通过GetCoreMemSize函数获取UB内存的大小,用于后续的数据切分计算。
Tile块计算:根据UB内存大小和预定义的BLOCK_SIZE及BUFFER_NUM和不同类型下的ubDataNum,计算出每个Tile块的数据数量。
数据切分:将输入数据按照计算出的Tile块大小进行切分,计算出每个core需要处理的数据块数量和最后一个block的剩余数据量。
设置切分参数:将计算出的切分参数(如每个core的数据量、Tile块大小等)设置到SigmoidTilingData对象中。
这些策略确保了数据在多个核心之间的均匀分布,并且在单个核心内进行了合理的切分,以提高并行处理的效率。

3) tilingkey规划策略

利用tilingKey,使不同Soc能够按照TBE中计算策略执行。

kernel侧设计方案

进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。

  1. 依照TBE实现,根据Soc型号和实现模式进行计算方式选择。高精度和高性能模式可以使用宏编译进行区分。
  2. Ascend C的Sigmoid算子流程见下图。
    ascend.png
likedislike
天天上的星星哪去了
2025年12月16日 关联了pull request:Sigmoid算子AscendC实现
胡一航成员
2025年12月16日 评论:

感谢您的反馈,可以关联上您的PR,在验证后由commiter审视合入。

likedislike
天上的星星哪去了
2025年12月16日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
2025年12月16日 将 gcw_6KYBkBYv 设为负责人
Cchenqi317成员
2025年12月25日 issue状态由 进行中 改变为 已确认
Cchenqi317成员
4月9日 将 fullt 设为负责人
CANN-robotCANN-robot成员
4月9日 添加了label:Accepted
Ffulltower成员
4月20日 关联了pull request:Sigmoid算子AscendC实现
Ffulltower成员
4月25日 移除了负责人 gcw_6KYBkBYv
Ffulltower成员
4月25日 移除了负责人 fullt
Ffulltower成员
4月25日 将 zhou-qilong 设为负责人
fulltower成员
4月28日 评论:

PR已合入

likedislike
Ffulltower成员
4月28日 issue状态由 已确认 改变为 已完成
Ffulltower成员
4月28日 关闭了 issue