已关闭
[Requirement|需求建议]: Sqrt算子AscendC实现贡献 #59
liuxiqiang创建于  2025年10月24日关闭于  2025年11月4日
liuxiqiang
2025年10月24日 创建

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

Backgroud(背景信息)

使用AscendC对TBE实现的Sqrt算子进行重构,实现了AscendC实现的Sqrt算子对Atlas 200/500 A2推理产品和Atlas 800I/T A2硬件的适配。

Origin(信息来源)

外部贡献

Benefit / Necessity (价值/作用)

Sqrt算子的主要功能是计算给定数值的平方根。在数学和工程领域中,平方根运算是一种基础且重要的操作,它被广泛应用于图像处理、信号处理、物理模拟等多个领域。Sqrt算子能够高效地处理批量数值的平方根计算,支持浮点数的输入。实现了Sqrt算子的AscendC实现,替代原有TBE算子在昇腾硬件上的适配。

支持设备:
Atlas 200/500 A2推理产品
Atlas 800I/T A2

Design(设计方案)

host侧设计:

tiling策略:
1)分核策略

优先使用满核的原则。
如果核间能均分,可视作无大小核区分,大核小核数据块一致;
如果核间不能均分,需要将余出的数据块分配到前几个核上。
数据量当能单核处理的情况下使用单核,否者使用满核进行加速处理。

2)单core内切分策略
充分使用UB空间的原则。
需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。

3)tilingkey规划策略
需要tilingkey的情况:需要感知host侧信息对kernel侧走不同分支。
不需要tilingkey的情况:host侧的处理是通用的,无特殊属性等决定kernel的分支

数据检测:
对不支持AscendC::Cast()bfloat16向float32转换的硬件进行直接在tiling策略时返回Get Operator Workspace failed. error code is 561002报错。

kernel侧设计:

进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。
1)由于支持Ascend C开发的硬件中AscendC::Sqrt都支持float32数据的输入,可以直接将float16和bfloat16的数据都转成float32进行计算,float32的类型保持原类型计算。
2)由于不支持“Intrinsic_vsqrt”指令的硬件,不支持Ascend C算子开发。所以可以直接使用Ascend C::Sqrt接口进行处理。
3)Ascend C的Sqrt算子流程见下图。
image.png

likedislike
sunchun成员
2025年10月24日 评论:

您好,感谢您提出的issue,正在安排相关人员定位分析,请耐心等待。

likedislike
Lliuxiqiang
2025年10月24日 修改了issue 的描述
Lliuxiqiang
2025年10月24日 修改了issue 的描述
sunchun成员
2025年10月24日 评论:

您好,这边您具体的问题是什么呢,是希望我们这边实现这个需求吗?

likedislike
liuxiqiang
2025年10月27日 评论:

你好,是我提供了该实现的,我这边贡献,需要你们评审。
我是在对ops-math仓进行算子贡献,根据贡献指南中的描述,需要提一个Requirement|需求建议 类Issue提供新增算子说明和设计方案。
该算子已经提交PR:https://gitcode.com/cann/ops-math/pull/93。请问按照贡献流程,下一步需要进行怎样操作,目前的贡献流程到了哪一步?

贡献指南见:https://gitcode.com/cann/ops-math/blob/master/CONTRIBUTING.md
image.png

likedislike
liuxiqiang
2025年10月27日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
2025年10月27日 将 liuxiqiang 设为负责人
Lliuxiqiang
2025年10月27日 修改了issue 的描述
liuxiqiang
2025年10月27日 评论:

您好,这边您具体的问题是什么呢,是希望我们这边实现这个需求吗?

你好,贡献指南中"项目成员"会与我沟通,我想了解该成员有谁?(是否可以在仓README中标注)以什么方式和我对接?

likedislike
sunday成员
2025年10月28日 评论:

您好,感谢您的贡献,我们已经在评审您提交的代码,评审完成后我们会在这个issuse中提醒您。

likedislike
liuxiqiang
2025年10月29日 评论:

您好,感谢您的贡献,我们已经在评审您提交的代码,评审完成后我们会在这个issuse中提醒您。

该Issue关联PR:https://gitcode.com/cann/ops-math/pull/93中SIG评论意见已修改,请进行PR代码复审

likedislike
liuxiqiang
2025年10月31日 评论:
sunday成员
2025年11月3日 评论:

您好,感谢您的贡献,我们已经在评审您提交的代码,评审完成后我们会在这个issuse中提醒您。

该Issue关联PR:https://gitcode.com/cann/ops-math/pull/93中SIG评论意见已修改,请进行PR代码复审
您好我们正在复审,有进展会在本issuse中更新

likedislike
liuxiqiang
2025年11月4日 评论:
Lliuxiqiang
2025年11月4日 修改了issue 的描述
CANN-robotCANN-robot成员
2025年11月4日 关闭了 issue
CANN-robotCANN-robot成员
3月20日 添加了label:resolved