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

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

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

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

CANN自定义算子类型

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

【CANN文档速递04期】揭秘昇腾CANN算子开发_第1张图片

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

算子编译

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

【CANN文档速递04期】揭秘昇腾CANN算子开发_第2张图片

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

算子运行

【CANN文档速递04期】揭秘昇腾CANN算子开发_第3张图片

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

算子开发流程

【CANN文档速递04期】揭秘昇腾CANN算子开发_第4张图片

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

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

算子工程创建方式

【CANN文档速递04期】揭秘昇腾CANN算子开发_第5张图片

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

更多介绍

了解更详细的内容,可以登录昇腾社区昇腾社区-官网丨昇腾万里 让智能无所不及,阅读相关文档:

【CANN文档速递04期】揭秘昇腾CANN算子开发_第6张图片

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

你可能感兴趣的:(人工智能,算法,神经网络,ai)