三方ONNX模型对接自定义算子
概述
MindSpore Lite的转换工具除了基本的模型转换功能之外,还支持对接自定义AscendC算子和自定义融合Pass,满足一些特殊场景对模型功能、性能的要求。
对接自定义算子
本教程介绍了MindSpore Lite如何对接三方ONNX模型中的自定义算子,来使能云侧转换和推理。本教程建立在已熟悉转换工具的基础上。
对ONNX模型中的自定义算子节点有如下要求:
- ONNX节点名为 - Custom,即ONNX的- NODE_PROPERTIES中的- type为- Custom;
- 必选属性 - input_names,数据类型为String[],算子输入名和顺序要与自定义算子原型中的相同;
- 必选属性 - output_names,数据类型为String[],算子输出名和顺序要与自定义算子原型中的相同;
- 必选属性 - type,数据类型为String,算子名要与自定义算子原型中的相同;
- 可选属性 - optional_input_names,数据类型为String[],可选输入名是必选输入名的子集;
- 可选属性 - output_num,数据类型为int,算子有多输出且模型中仅使用第一个输出时需要指定;
- 如果自定义算子原始属性是 - bool类型,但由于ONNX属性中无- bool类型,所以需要以String类型的方式接入,值可以设置为- True、- true、- False和- false其中之一。
准备工作
- 本地已安装了自定义算子包; 
- 已按照如上要求修改了ONNX文件中的Custom算子; 
- 已有MindSpore Lite云侧环境。详情请参考转换工具。 
模型转换与推理
按照转换工具的流程即可。
对接自定义融合Pass
本教程介绍了MindSpore Lite如何编译、使用自定义融合Pass,来使能云侧转换和推理。本教程建立在已熟悉端侧注册机制的基础上。
准备工作
与端侧注册机制不同的是,注册位置的参数需要更改。
// register custom Pass
using mindspore::registry::POSITION_ASCEND;
REG_PASS(PassTutorial, opt::PassTutorial)
REG_SCHEDULED_PASS(POSITION_ASCEND, {"PassTutorial"})