开发者
下载
[object Object][object Object]

以MSDA(MultiScaleDeformableAttn)算子为例,展示由模型ONNX导出到OM模型执行的整个过程,提供本仓库ONNX使用的基础案例。

[object Object]

通过Python脚本导出单算子模型,以下为导出脚本:

[object Object]

执行后会在当前文件夹下生成msda.onnx文件。

[object Object]

若ONNX模型多个domain不统一,则需要安装转换仓库进行domain转换操作,否则不需要执行该操作。 转换仓库为:,转换脚本为:

[object Object]

执行后会将ONNX模型中的多个domain进行统一。

[object Object]

通过ATC将ONNX转换为OM模型,在执行前需要设置环境变量,环境变量与转换指令如下,其中soc_version可通过npu-smi info进行查看:

[object Object]

执行后若出现“ATC run success, welcome to the next use.”,则说明OM模型转换成功。

[object Object]

根据ONNX模型导出时的模型输入,构建输入文件,其构建脚本如下:

[object Object]

执行后会在inputs文件夹内生成模型的各输入文件。

[object Object]

克隆仓库,并按照readme进行安装。

随后通过msame工具,将生成好的模型输入文件输入到OM模型中执行。

[object Object]

执行后会在./msame/out文件夹下生成OM模型的推理结果。

[object Object]

本部分验证OM模型的推理结果与单算子结果是否一致,可自行选择工具进行验证,示例代码如下。代码中的[object Object]是OM执行后生成的模型推理结果名称。

[object Object]
[object Object][object Object]

可能原因1:在docker中编译的mx_driving包可能不附带ONNX插件,需要编译protoc,请参考进行编译安装即可。

可能原因2:未引入ONNX转换OM环节中的mx_driving环境变量,导致转换过程中未检索到对应算子而报错。

[object Object]

原因:目前仓库内仅部分算子包含inferShape与inferDtype过程,参考 [object Object] 目录下 MSDA 算子的 cpp 文件中 [object Object] 相关代码行,添加类似逻辑即可解决该问题。

[object Object]

原因:给定的输入类型与算子支持的输入类型不匹配,请检查模型的输入类型。

[object Object]

原因:未进行domain转换,转换过程可见上方案例。