三方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 customed Pass
using mindspore::registry::POSITION_ASCEND;
REG_PASS(PassTutorial, opt::PassTutorial)
REG_SCHEDULED_PASS(POSITION_ASCEND, {"PassTutorial"})