文档首页 > > 推理场景> TBE自定义算子开发 > 算子开发流程>

命令行方式进行算子开发

命令行方式进行算子开发

分享
更新时间:2021/02/04 GMT+08:00

您可以参考样例参考中的TBE DSL方式开发的Add算子进行第一个TBE算子的开发,快速了解TBE自定义算子的开发流程。

命令行场景下进行TBE自定义算子开发的流程如图1所示。

图1 TBE算子开发流程

开发步骤详解如表1所示。

表1 命令行方式TBE开发步骤详解

步骤

描述

参考

算子分析

进行算子开发前,需要进行算子分析,明确算子的功能、输入、输出,选取算子开发方式,规划算子类型名称以及算子实现函数名称等。

算子分析

工程创建

命令行模式下,有以下几种创建自定义算子工程的方法。

  • 直接基于sample样例进行开发。
    • 只进行tensorflow框架的自定义算子开发

      直接基于自定义算子sample样例进行修改,追加自己的自定义算子。

      Tensorflow自定义算子样例工程存储在ATC安装路径下的“atc/sample/op/tensorflow”目录中。

    • 只进行caffe框架的自定义算子开发。

      直接基于自定义算子sample样例进行修改,追加自己的自定义算子。

      Caffe自定义算子样例工程存储在ATC安装路径下的“atc/sample/op/caffe”目录中。

    • 同时进行caffe与tensorflow框架的自定义算子开发。

      直接基于自定义算子sample样例进行修改,追加自己的自定义算子。

      同时包括caffe与tensorflow的自定义算子样例工程存储在ATC安装路径下的“atc/sample/op/all”目录中。

  • 使用算子交付件生成工具生成自定义算子工程,也可以使用此工具在已存在的自定义算子工程中追加自定义算子。

您可以基于如下规则进行算子交付件的开发:

  • tbe/impl,存放算子实现文件xx.py。
  • tbe/op_info_cfg/ai_core/<soc_version>/,在对应昇腾AI处理器版本目录下存放算子信息定义文件xx.ini。
  • framework/xx_plugin,存放算子适配插件文件xx.cpp。
  • op_proto:存放原型定义文件xx.h与xx.cpp。
须知:

若开发者需要自定义多个TBE算子,需要在同一算子工程中进行实现,对应实现文件按照如上规则进行存放。

命令行模式下工程目录结构介绍请参见算子工程目录介绍

算子实现

算子代码实现:算子计算逻辑及调度的实现。

算子代码实现

算子适配插件实现:基于第三方框架(Tensorflow)进行自定义算子开发的场景,开发人员完成自定义算子的实现代码后,需要进行插件的开发将基于Tensorflow的算子映射成适配昇腾AI处理器的算子。

算子适配插件实现

算子原型定义:算子原型定义规定了在昇腾AI处理器上可运行算子的约束,主要体现算子的数学含义,包含定义算子输入、输出、属性和取值范围,基本参数的校验和shape的推导,原型定义的信息会被注册到GE的算子原型库中。离线模型转换时,GE会调用算子原型库的校验接口进行基本参数的校验,校验通过后,会根据原型库中的推导函数推导每个节点的输出shape与dtype,进行输出tensor的静态内存的分配。

算子原型定义

算子信息定义:算子信息配置文件用于将算子的相关信息注册到算子信息库中,包括算子的输入输出dtype、format以及输入shape信息。离线模型转换时,FE会根据算子信息库中的算子信息做基本校验,判断是否需要为算子插入合适的转换节点,并根据算子信息库中信息找到对应的算子实现文件进行编译,生成算子二进制文件进行执行。

算子信息库定义

算子编译部署

  • 算子编译:将算子适配插件实现文件、原型定义文件、信息定义文件编译成算子插件库文件、算子原型库、算子信息库。
  • 算子部署:将算子实现文件、插件库文件、原型库、信息库部署到算子库中(opp的对应目录下)。

命令行场景下,可直接使用样例工程的编译文件进行算子工程的一键式编译,生成自定义算子安装包。指定opp路径,执行安装包,实现自定义算子部署。

算子工程编译

网络运行验证

构造只有单算子的模型文件,然后使用AscendCL加载此模型文件进行单算子的功能验证。

网络运行验证

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问
{{site}}{{lan}}
{{site}}{{language}}