部署“桨”坛 | 通过Paddle2ONNX在Atlas 200 DK上部署模型

部署“桨”坛 | 通过Paddle2ONNX在Atlas 200 DK上部署模型

部署“桨”坛 | 通过Paddle2ONNX在Atlas 200 DK上部署模型

本期【洞见AI硬件,部署讲坛】主要分享基于飞桨的昇腾310及相关硬件的多方案部署教程,包括:

1. Paddle Lite在Atlas 200 DK上部署实战; 

2. 通过Paddle2ONNX在Atlas 200 DK上部署模型; 

3. 基于EasyDL的全流程模型开发和Atlas 200 DK部署。

本篇教程以Atlas 200 DK为例,介绍 如何将飞桨模型,借助Paddle2ONNX模型转换工具转换为ONNX模型并通过华为CANN部署。

 

通过Paddle2ONNX在昇腾310相关硬件(本教程用的是Atlas 200 DK)上部署飞桨模型,整体可分为两部分操作:

将PaddlePaddle模型导出为ONNX格式,涉及模型的获取以及使用Paddle2ONNX工具进行转换两个步骤。


使用华为ATC工具生成在昇腾硬件上的部署模型,并通过AscendDL提供的接口开发推理程序。

获取模型

 

用户可以使用套件中的预训练模型或使用自己训练好的模型。

获取套件中的预训练模型(以分类模型为例)

本教程中我们以PaddleClas的ResNet50_vd_ssld分类模型为例演示后续流程;如果需要其它套件中的模型,在此步骤中可以参考相应套件中的export方法导出飞桨模型。

 

导出模型的流程如下:
# 在Github上克隆/下载 PaddleClas
git clone https://github.com/PaddlePaddle/PaddleClas.git
cd PaddleClas
git checkout release/2.3

# 下载ResNet50_vd_ssld预训练权重
# 存放在当前目录
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_ssld_pretrained.pdparams

# 导出ResNet50_vd_ssld部署模型
# 1. 注意指定预训练权重路径时,不需要后辍
# 2. 模型导出保存在deploy/resnet50_vd_ssld目录中
python tools/export_model.py  \
-c ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml \
 -o Global.pretrained_model=./ResNet50_vd_ssld_pretrained \
 -o Global.save_inference_dir=./deploy/resnet50_vd_ssld

 

导出已经训练好的模型

如果开发者已经有训练好的飞桨模型,可以参考官方文档中的方法(下方链接),调用模型保存接口导出模型结构以及权重。

https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/08_model_save_load_cn.html

 

 

 

将飞桨模型文件转为ONNX格式

 

ONNX是针对机器学习所设计的开源文件格式,用于存储训练好的模型。Paddle2ONNX支持飞桨框架2.X版本的动态图与静态图模型的导出,本例中我们选用的模型为静态图模型,安装并使用Paddle2ONNX的命令行转换工具转换模型格式:
pip install paddle2onnx
# 执行如下命令转换模型
# 1. --model_dir指定模型文件所在目录路径
# 2. --model_filename和--params_filename参考模型目录下的模型文件名
# 3. --save_file 指定ONNX模型保存的路径
# 4. 很多情况下,为了成功转换模型,我们还需指定更高版本的--opset_version,默认为9

paddle2onnx --model_dir deploy/resnet50_vd_ssld/ \
            --model_filename inference.pdmodel \
            --params_filename inference.pdiparams \
            --save_file deploy/resnet50_vd_ssld/model.onnx \
            --opset_version 10

# 执行结果:
[INFO]  ONNX model saved in deploy/resnet50_vd_ssld/model.onnx

 

针对动态图模型的方式,可以参考文档:

https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/09_model_to_onnx_cn.html#cn-model-to-onnx

使用ATC工具生成部署模型

 

 

 

 

搭建华为Atlas 200 DK运行环境和开发环境

 

请参考华为官方教程获取CANN软件包,并配置开发及运行环境。在开发端,需要安装toolkit组件来使用ATC工具进行模型导入;在运行端,请参照教程安装完整开发环境。

 

教程链接:

https://support.huaweicloud.com/environment-deployment-Atlas200DK202/atlased_04_0001.html

 

软件包获取地址:

https://www.hiascend.com/zh/software/cann/community-history

 

 

 

使用ATC工具进行模型转换

 

在完成环境配置后,即可将ONNX模型导入至ATC工具中,并生成转换后的*.om文件用于后续的部署。

 

此处仍以ResNet50_vd_ssld模型为例,具体转换命令如下:
# 如源模型为动态shape,例如当前模型输入shape为[-1, 3, 224, 224]
# 需通过input_shape指定固定的大小进行转换
atc  --model=deploy/resnet50_vd_ssld/model.onnx \    
--framework=5 \    
--output=./ascend_resnet50 \    
--soc_version=Ascend310 \    
--input_shape=x:1,3,224,224

# 执行结果:
ATC run success, welcome to the next use.

 

 

 

 

将转换后的*.om模型部署在Atlas200DK开发板上

 

转换后的*.om模型可以通过AscendCL提供的C/C++或Python接口开发应用来实现推理功能,此部分内容可参考华为的应用开发教程及相关示例内容。

 

在AscendCL的官方示例中,提供了同步/异步推理,包含图片/视频编解码以及图像前后处理的多种场景下的Demo。如果开发者想通过官方示例学习接口使用或进行示例改造,可以先挑选最基础的同步接口单Batch推理示例resnet50_imagenet_classification来熟悉推理流程与接口使用,再选取符合自己应用场景的示例进行改造。应用开发流程和示例链接如下:

 

C/C++应用开发:

应用开发教程:

https://support.huaweicloud.com/devg-cpp-Atlas200DK202/atlasdevelopment_01_0001.html

示例程序:

https://support.huaweicloud.com/devg-cpp-Atlas200DK202/atlasdevelopment_01_0011.html

 

Python应用开发:

pyACL应用开发教程:

https://support.huaweicloud.com/devg-Python-Atlas200DK202/atlaspython_01_0009.html

 

想要了解更多关于Paddle2ONNX的支持的模型和使用,欢迎点击项目Github链接:

https://github.com/PaddlePaddle/Paddle2ONNX

 

订阅快讯

通过快讯订阅,您将及时收到我们的信息更新通知。