本期【洞見AI硬件,部署講壇】主要分享基于飛槳的昇騰310及相關硬件的多方案部署教程,包括:
1. Paddle Lite在Atlas 200 DK上部署實戰;
2. 通過Paddle2ONNX在Atlas 200 DK上部署模型;
3. 基于EasyDL的全流程模型開發和Atlas 200 DK部署。
通過Paddle2ONNX在昇騰310相關硬件(本教程用的是Atlas 200 DK)上部署飛槳模型,整體可分為兩部分操作:
將PaddlePaddle模型導出為ONNX格式,涉及模型的獲取以及使用Paddle2ONNX工具進行轉換兩個步驟。
獲取模型
用戶可以使用套件中的預訓練模型或使用自己訓練好的模型。
獲取套件中的預訓練模型(以分類模型為例)
本教程中我們以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格式
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文件用于后續的部署。
# 如源模型為動態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應用開發:
https://support.huaweicloud.com/devg-Python-Atlas200DK202/atlaspython_01_0009.html
想要了解更多關于Paddle2ONNX的支持的模型和使用,歡迎點擊項目Github鏈接:
https://github.com/PaddlePaddle/Paddle2ONNX