基於香橙派AIpro將開源框架模型轉換爲昇騰模型

本文分享自華爲雲社區《如何基於香橙派AIpro將開源框架模型轉換爲昇騰模型》,作者:昇騰CANN。

在前面的介紹中,我們知道了如何基於香橙派AIpro開發AI推理應用,也大致瞭解到在推理之前,需要把原始網絡模型 (可能是 PyTorch 的、TensorFlow,可能是Caffe的等等) 轉換成 .om 模型,然後才能調用昇騰的aclmdlExecute 等模型執行接口在香橙派AIpro進行模型推理。這個模型轉換的過程就要用到 ATC 工具,目前 ATC 工具直接支持從 Caffe、ONNX、TensorFlow 以及 MindSpore模型的轉換,所以如果你的訓練框架是 PyTorch,則需要做 torch.onnx.export 操作導出成ONNX模型後才能使用ATC工具。

01 ATC工具簡介

昇騰張量編譯器(Ascend Tensor Compiler,簡稱ATC)是昇騰模型轉換工具,它可以將開源框架的網絡模型(例如TensorFlow、ONNX等)轉換爲昇騰AI處理器支持的模型文件(.om格式),用於後續的模型推理。

模型轉換過程中,ATC會進行算子調度優化、權重數據重排、內存使用優化等操作,對開源框架的網絡模型做進一步調優,使其高效地在昇騰AI處理器上執行。

1.png

主要過程:

  1. 開源框架網絡模型經過Parser解析後,轉換爲昇騰的中間圖IR Graph。
  2. 中間圖IR Graph經過圖準備,圖拆分,圖優化,圖編譯等一系列操作後,轉成適配昇騰AI處理器的*.om模型文件。
  3. 用戶可調用AscendCL提供的模型加載、執行等接口實現模型推理。

02 ATC工具基本使用方法

下面以Caffe框架ResNet-50網絡模型爲例,介紹如何使用ATC工具轉換模型。

1、將Caffe框架ResNet-50網絡模型的模型文件*.prototxt、權重文件*.caffemodel上傳至ATC工具所在的Linux服務器。

2、執行如下命令進行模型轉換。

atc --framework=0 --soc_version=${soc_version} 
--model=$HOME/mod/resnet50.prototxt 
--weight=$HOME/mod/resnet50.caffemodel 
--output=$HOME/module/out/caffe_resnet50

參數解釋如下:

  • --framework:原始網絡模型框架類型,0表示Caffe框架。
  • --soc_version:指定模型轉換時昇騰AI處理器的版本,可執行npu-smi info命令進行查詢,在查詢到的“Name”前增加Ascend信息,例如“Name”對應取值爲xxxyy。
  • --model:原始網絡模型文件路徑,含文件名。
  • --weight:原始網絡模型權重文件路徑,含文件名,僅當原始網絡模型是Caffe時需要指定。
  • --output:轉換後的*.om模型文件路徑,含文件名,轉換成功後,模型文件名自動以.om後綴結尾。

3、若提示ATC run success信息,則說明模型轉換成功。

在--output參數指定的路徑下,可查看轉換後的模型文件,例如caffe_resnet50.om。

03 ATC工具高階用法介紹

上述只給出了ATC工具進行模型轉換最基本的命令,下面介紹ATC工具支持的更多特性,方便用戶進一步瞭解。

1、ATC工具支持將原始模型文件或昇騰*.om模型文件轉換成json格式

如果用戶不方便查看原始模型或離線模型的參數信息時,可以將原始模型或離線模型轉成json文件進行查看:

  • 原始模型文件—>json文件
atc --mode=1 --framework=0 --om=$HOME/mod/resnet50.prototxt --json=$HOME/mod/out/caffe_resnet50.json
  • 昇騰*.om模型文件—>json文件
atc --mode=1 --om=$HOME/mod/out/caffe_resnet50.om --json=$HOME/mod/out/caffe_resnet50.json

2、ATC工具支持自定義*.om模型的輸入輸出數據類型

模型轉換時支持指定網絡模型的輸入或輸出節點的數據類型、Format,支持設置精度等。此處的示例命令場景是針對Caffe框架ResNet50網絡模型,轉換後的模型輸入爲FP16類型,指定Pooling算子作爲輸出,並且該輸出節點爲FP16類型。

atc --framework=0 --soc_version=${soc_version} --model=$HOME/mod/resnet50.prototxt --weight=$HOME/mod/resnet50.caffemodel --output=$HOME/mod/out/caffe_resnet50  --input_fp16_nodes="data" --out_nodes="pool1:0" --output_type="pool1:0:FP16"

3、ATC工具支持設置動態BatchSize/動態分辨率

某些推理場景,如檢測出目標後再執行目標識別網絡,由於目標個數不固定導致目標識別網絡輸入BatchSize不固定;如果每次推理都按照最大的BatchSize或最大分辨率進行計算,會造成計算資源浪費,因此,模型轉換需要支持動態BatchSize和動態分辨率的設置,實際推理時,通過AscendCL接口設置本次推理所需的BatchSize和動態分辨率。

  • 動態BatchSize

atc --framework=0 --soc_version=${soc_version}  --model=$HOME/mod/resnet50.prototxt --weight=$HOME/mod/resnet50.caffemodel --output=$HOME/mod/out/caffe_resnet50 --input_shape="data:-1,3,224,224"   --dynamic_batch_size="1,2,4,8"

其中,“--input_shape ”中的“-1”表示設置動態BatchSize,具體支持哪些BatchSize由“--dynamic_batch_size”決定。

  • 動態分辨率
atc --framework=0 --soc_version=${soc_version}  --model=$HOME/mod/resnet50.prototxt --weight=$HOME/mod/resnet50.caffemodel --output=$HOME/mod/out/caffe_resnet50 --input_shape="data:1,3,-1,-1"   --dynamic_image_size="224,224;448,448"

其中,“--input_shape ”中的“-1,-1”表示設置動態分辨率,具體支持哪些分辨率由“--dynamic_image_size ”決定。

04 更多學習資源

[1]香橙派AIpro開源樣例代碼:https://gitee.com/ascend/EdgeAndRobotics

[2]昇騰文檔中心:https://www.hiascend.com/zh/document

[3]香橙派AIpro學習資源一站式導航:https://www.hiascend.com/forum/thread-0285140173361311056-1-1.html

點擊關注,第一時間瞭解華爲雲新鮮技術~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章