【CANN文档速递04期】揭秘昇腾CANN算子开发
【摘要】 本期我们主要带您了解CANN自定义算子的类型,编译、运行逻辑架构,以及算子的开发流程等,让您对CANN算子有宏观的了解。
昇腾开发者在进行神经网络模型训练或者推理的过程中,往往会遇到以下场景:
- 将第三方开源框架网络模型转换为适配昇腾AI处理器的模型时,遇到了CANN尚未支持的算子。
- 已有算子的性能无法满足开发者的要求。
- 开发者想修改已有算子的计算逻辑。
此时我们就需要考虑进行自定义算子的开发,本期我们主要带您了解CANN自定义算子的类型,编译、运行逻辑架构,以及算子的开发流程等,让您对CANN算子有宏观的了解。
CANN自定义算子类型
CANN自定义算子有两种类型:TBE算子与AI CPU算子,两种算子的区别如下所示。
其中AI CPU算子的实现相对简单,TBE算子的实现较复杂,但性能更优。若用户为了快速打通模型执行流程,可选择自定义AI CPU算子,从而提升调测效率。功能调通后,后续在性能调测过程中再将AI CPU算子切换到TBE算子实现。
算子编译
下面我们了解下CANN算子的编译流程,如下图所示:
- 第三方框架网络模型经过Parser解析后,转换为中间态的IR (Intermediate Representation) Graph。
- GE接收IR Graph后对图进行准备、拆分、子图优化等操作。
- 子图优化过程中,会进行算子的匹配选择,优先由FE基于TBE算子信息库判断算子支持度,若TBE不支持,则由AI CPU Engine基于AI CPU算子信息库判断是否支持。
- 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)