三方ONNX模型对接自定义算子

查看源文件

概述

MindSpore Lite的转换工具除了基本的模型转换功能之外,还支持对接自定义AscendC算子和自定义融合Pass,满足一些特殊场景对模型功能、性能的要求。

对接自定义算子

本教程介绍了MindSpore Lite如何对接三方ONNX模型中的自定义算子,来使能云侧转换和推理。本教程建立在已熟悉转换工具的基础上。

对ONNX模型中的自定义算子节点有如下要求:

  1. ONNX节点名为Custom,即ONNX的NODE_PROPERTIES中的typeCustom

  2. 必选属性input_names,数据类型为String[],算子输入名和顺序要与自定义算子原型中的相同;

  3. 必选属性output_names,数据类型为String[],算子输出名和顺序要与自定义算子原型中的相同;

  4. 必选属性type,数据类型为String,算子名要与自定义算子原型中的相同;

  5. 可选属性optional_input_names,数据类型为String[],可选输入名是必选输入名的子集;

  6. 可选属性output_num,数据类型为int,算子有多输出的时且模型中仅使用第一个输出时需要指定;

  7. 如果自定义算子原始属性是bool类型,但由于ONNX属性中无bool类型,所以需要以String类型的方式接入,值可以设置为TruetrueFalsefalse其中之一。

准备工作

  1. 本地已安装了自定义算子包;

  2. 已按照如上要求修改了ONNX文件中的Custom算子;

  3. 已有MindSpore Lite云侧环境。详情请参考转换工具

模型转换与推理

按照转换工具的流程即可。

对接自定义融合Pass

本教程介绍了MindSpore Lite如何编译、使用自定义融合Pass,来使能云侧转换和推理。本教程建立在已熟悉端侧注册机制的基础上。

准备工作

  1. 已有MindSpore Lite云侧环境。详情请参考转换工具

  2. 已有ONNX文件。

  3. 实现自定义Pass,代码请参考example

端侧注册机制不同的是,注册位置的参数需要更改。

// register customed Pass
using mindspore::registry::POSITION_ASCEND;
REG_PASS(PassTutorial, opt::PassTutorial)
REG_SCHEDULED_PASS(POSITION_ASCEND, {"PassTutorial"})

编译、转换、推理

编译流程详见端侧注册机制,转换、推理详见转换工具