调用样例
完成了ONNX框架的适配插件开发后,即可实现从ONNX框架调用Ascend C自定义算子。下面以一个仅包含LeakyRelu算子的ONNX框架网络为例(该网络中的LeakyRelu算子通过适配插件映射为自定义的LeakyRelu算子),呈现一个使用推理工具进行推理的过程,目的在于让您快速体验推理场景下网络中自定义算子调用的过程。
在完成如下步骤之前,您需要先参考上文内容完成自定义LeakyRelu算子kernel侧和host侧的开发、ONNX适配插件的开发,并完成算子的编译部署。
LeakyRelu算子实现的完整样例请参考LINK。ONNX框架调用的完整示例请参考LINK。
- 通过如下命令获取ONNX框架网络模型。作为示例,该模型中仅包含一个LeakyRelu算子。
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/AscendC/leaky_relu.onnx
- 执行如下命令生成离线模型。(如下命令中使用的目录以及文件均为样例,请以实际为准)
atc --model=$HOME/module/leaky_relu.onnx --framework=5 --soc_version=<soc_version> --output=$HOME/module/out/leaky_relu --input_shape="X:8,16,1024" --input_format=ND
关键参数的解释如下:
- --model:ONNX框架网络模型文件(*.onnx)的路径。
- --framework:原始框架类型。5表示ONNX。
- --output:转换后的离线模型的路径以及文件名。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。
- --soc_version:昇腾AI处理器的型号。
如果无法确定具体的<soc_version>,则在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的<soc_version>值为Ascendxxxyy。
- --input_shape:指定模型输入数据的shape,请基于算子支持的shape范围和实际使用场景进行设置,这里设置输入X为固定shape [8,16,1024]。
- --input_format:指定模型输入数据的格式,请基于算子支持的格式和实际使用场景进行设置,这里配置为ND。
- 若提示有出现如下信息,则说明进入了Ascend C自定义算子编译流程且模型转换成功。
... start compile Ascend C operator LeakyReluCustom. kernel name is leaky_relu_custom compile Ascend C operator: LeakyReluCustom success! ... ATC run success
成功执行命令后,在--output参数指定的路径下,可查看离线模型(如:leaky_relu.om)。
- 准备符合模型输入要求的*.bin格式的输入数据,单击LINK,获取msame工具,参考该工具配套的README,使用推理工具快速完成推理体验,样例如下。
./msame --model "$HOME/module/out/leaky_relu.om" --output "$HOME/module/out/" --outfmt TXT --loop 1
父主题: ONNX框架