本期【洞見AI硬件,部署講壇】主要分享基于飛槳的昇騰310及相關(guān)硬件的多方案部署教程,包括:
1. Paddle Lite在Atlas 200 DK上部署實戰(zhàn);
2. 通過Paddle2ONNX在Atlas 200 DK上部署模型;
3. 基于EasyDL的全流程模型開發(fā)和Atlas 200 DK部署。
通過Paddle2ONNX在昇騰310相關(guān)硬件(本教程用的是Atlas 200 DK)上部署飛槳模型,整體可分為兩部分操作:
將PaddlePaddle模型導出為ONNX格式,涉及模型的獲取以及使用Paddle2ONNX工具進行轉(zhuǎn)換兩個步驟。
獲取模型
用戶可以使用套件中的預訓練模型或使用自己訓練好的模型。
獲取套件中的預訓練模型(以分類模型為例)
本教程中我們以PaddleClas的ResNet50_vd_ssld分類模型為例演示后續(xù)流程;如果需要其它套件中的模型,在此步驟中可以參考相應套件中的export方法導出飛槳模型。
# 在Github上克隆/下載 PaddleClas
git clone https://github.com/PaddlePaddle/PaddleClas.git
cd PaddleClas
git checkout release/2.3
# 下載ResNet50_vd_ssld預訓練權(quán)重
# 存放在當前目錄
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_ssld_pretrained.pdparams
# 導出ResNet50_vd_ssld部署模型
# 1. 注意指定預訓練權(quán)重路徑時,不需要后輟
# 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
如果開發(fā)者已經(jīng)有訓練好的飛槳模型,可以參考官方文檔中的方法(下方鏈接),調(diào)用模型保存接口導出模型結(jié)構(gòu)以及權(quán)重。
https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/08_model_save_load_cn.html
將飛槳模型文件轉(zhuǎn)為ONNX格式
pip install paddle2onnx
# 執(zhí)行如下命令轉(zhuǎn)換模型
# 1. --model_dir指定模型文件所在目錄路徑
# 2. --model_filename和--params_filename參考模型目錄下的模型文件名
# 3. --save_file 指定ONNX模型保存的路徑
# 4. 很多情況下,為了成功轉(zhuǎn)換模型,我們還需指定更高版本的--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
# 執(zhí)行結(jié)果:
[INFO] ONNX model saved in deploy/resnet50_vd_ssld/model.onnx
針對動態(tài)圖模型的方式,可以參考文檔:
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運行環(huán)境和開發(fā)環(huán)境
請參考華為官方教程獲取CANN軟件包,并配置開發(fā)及運行環(huán)境。在開發(fā)端,需要安裝toolkit組件來使用ATC工具進行模型導入;在運行端,請參照教程安裝完整開發(fā)環(huán)境。
教程鏈接:
https://support.huaweicloud.com/environment-deployment-Atlas200DK202/atlased_04_0001.html
軟件包獲取地址:
https://www.hiascend.com/zh/software/cann/community-history
使用ATC工具進行模型轉(zhuǎn)換
在完成環(huán)境配置后,即可將ONNX模型導入至ATC工具中,并生成轉(zhuǎn)換后的*.om文件用于后續(xù)的部署。
# 如源模型為動態(tài)shape,例如當前模型輸入shape為[-1, 3, 224, 224]
# 需通過input_shape指定固定的大小進行轉(zhuǎn)換
atc --model=deploy/resnet50_vd_ssld/model.onnx \
--framework=5 \
--output=./ascend_resnet50 \
--soc_version=Ascend310 \
--input_shape=x:1,3,224,224
# 執(zhí)行結(jié)果:
ATC run success, welcome to the next use.
將轉(zhuǎn)換后的*.om模型部署在Atlas200DK開發(fā)板上
轉(zhuǎn)換后的*.om模型可以通過AscendCL提供的C/C++或Python接口開發(fā)應用來實現(xiàn)推理功能,此部分內(nèi)容可參考華為的應用開發(fā)教程及相關(guān)示例內(nèi)容。
在AscendCL的官方示例中,提供了同步/異步推理,包含圖片/視頻編解碼以及圖像前后處理的多種場景下的Demo。如果開發(fā)者想通過官方示例學習接口使用或進行示例改造,可以先挑選最基礎(chǔ)的同步接口單Batch推理示例resnet50_imagenet_classification來熟悉推理流程與接口使用,再選取符合自己應用場景的示例進行改造。應用開發(fā)流程和示例鏈接如下:
C/C++應用開發(fā):
https://support.huaweicloud.com/devg-cpp-Atlas200DK202/atlasdevelopment_01_0001.html
https://support.huaweicloud.com/devg-cpp-Atlas200DK202/atlasdevelopment_01_0011.html
Python應用開發(fā):
https://support.huaweicloud.com/devg-Python-Atlas200DK202/atlaspython_01_0009.html
想要了解更多關(guān)于Paddle2ONNX的支持的模型和使用,歡迎點擊項目Github鏈接:
https://github.com/PaddlePaddle/Paddle2ONNX