【CANN文档速递04期】揭秘昇腾CANN算子开发

昇腾CANN 发表于 2022/06/24 15:42:04 2022/06/24
【摘要】 本期我们主要带您了解CANN自定义算子的类型,编译、运行逻辑架构,以及算子的开发流程等,让您对CANN算子有宏观的了解。

4.png

昇腾开发者在进行神经网络模型训练或者推理的过程中,往往会遇到以下场景:

  • 将第三方开源框架网络模型转换为适配昇腾AI处理器的模型时,遇到了CANN尚未支持的算子。
  • 已有算子的性能无法满足开发者的要求。
  • 开发者想修改已有算子的计算逻辑。

此时我们就需要考虑进行自定义算子的开发,本期我们主要带您了解CANN自定义算子的类型,编译、运行逻辑架构,以及算子的开发流程等,让您对CANN算子有宏观的了解。

CANN自定义算子类型

CANN自定义算子有两种类型:TBE算子与AI CPU算子,两种算子的区别如下所示。


其中AI CPU算子的实现相对简单,TBE算子的实现较复杂,但性能更优。若用户为了快速打通模型执行流程,可选择自定义AI CPU算子,从而提升调测效率。功能调通后,后续在性能调测过程中再将AI CPU算子切换到TBE算子实现。

算子编译

下面我们了解下CANN算子的编译流程,如下图所示:


  1. 第三方框架网络模型经过Parser解析后,转换为中间态的IR (Intermediate Representation) Graph。
  2. GE接收IR Graph后对图进行准备、拆分、子图优化等操作。
  3. 子图优化过程中,会进行算子的匹配选择,优先由FE基于TBE算子信息库判断算子支持度,若TBE不支持,则由AI CPU Engine基于AI CPU算子信息库判断是否支持。
  4. GE将拆分后的子图合并、优化,并进行编译,编译过程中会生成算子的Task信息,最终生成可执行的om模型。

算子运行


首先GE下发算子执行请求给Runtime,然后Runtime会判断算子的Task类型,若是TBE算子,则将算子执行请求下发到AI Core上执行;若是AI CPU算子,则将算子执行请求下发到AI CPU上执行。

算子开发流程


浅紫色底纹的为算子开发交付件,交付件介绍如下:

  •  算子原型:算子对外API,定义算子输入、输出、属性以及算子的shape推导逻辑。
  •  算子实现代码:描述算子的运算逻辑。针对TBE算子,为python文件;针对AI CPU算子,为C++文件。
  •  算子信息库:描述算子在昇腾AI处理器上的实现限制,包含算子输入输出的data type、format以及shape信息。
  •  算子适配插件:将第三方框架的算子映射为适配昇腾AI处理器的算子。

算子工程创建方式

开发者可自行选择算子开发方式,并基于如上规则在对应目录下进行交付件的开发。

更多介绍

了解更详细的内容,可以登录昇腾社区https://www.hiascend.com/,阅读相关文档:


昇腾CANN文档中心致力于为开发者提供更优质的内容和更便捷的开发体验,助力CANN开发者共建AI生态。任何意见和建议都可以在昇腾社区反馈,您的每一份关注都是我们前进的动力。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。