本期【洞见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提供的接口开发推理程序。
将飞桨模型导出
为ONNX格式
获取模型
用户可以使用套件中的预训练模型或使用自己训练好的模型。
获取套件中的预训练模型(以分类模型为例)
本教程中我们以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
为了向大家提供更易用、更好用的AI推理部署工具,我们诚邀您参与调研,分享您使用推理部署工具时的需求和期待!
问卷地址(点击阅读原文即可跳转):
https://iwenjuan.baidu.com/?code=323o1l
如有相关AI硬件部署的技术问题,欢迎加入飞桨硬件部署交流群提问交流:609865659(QQ群)
长按下方二维码立即
Star
更多信息:
飞桨官方QQ群:793866180
飞桨官网网址:
www.paddlepaddle.org.cn/
飞桨开源框架项目地址:
GitHub:
github.com/PaddlePaddle/Paddle
Gitee:
gitee.com/paddlepaddle/Paddle
欢迎在飞桨论坛讨论交流~~
http://discuss.paddlepaddle.org.cn