ATC:一個能將主流開源框架模型轉換為昇騰模型的神奇工具

2023-02-28 12:00:39
摘要:本文介紹了昇騰CANN提供的模型轉換工具ATC,介紹了其功能、架構,並以具體樣例介紹了該工具的基本使用方法以及常用設定。

本文分享自華為雲社群《使用ATC工具將主流開源框架模型轉換為昇騰模型》,作者: 昇騰CANN。

什麼是ATC,它能做什麼?

昇騰張量編譯器(Ascend Tensor Compiler,簡稱ATC)是昇騰CANN架構體系下的模型轉換工具:

  1. 它可以將開源框架的網路模型(例如TensorFlow、ONNX等)轉換為昇騰AI處理器支援的模型檔案(.om格式),用於後續的模型推理。
  2. 它可以將基於Ascend IR定義的單運算元描述檔案(*.json格式)轉換為昇騰AI處理器支援的模型檔案(.om格式),用於後續在整網中驗證運算元功能。

模型轉換過程中,ATC會進行運算元排程優化、權重資料重排、記憶體使用優化等操作,對開源框架的網路模型做進一步調優,使其高效地在昇騰AI處理器上執行。

ATC工具功能架構

開源框架網路模型編譯流程:

  1. 使用ATC工具轉換模型時,開源框架網路模型經過Parser解析後,轉換為昇騰的中間圖IR Graph。
  2. 中間圖IR Graph經過圖準備,圖拆分,圖優化,圖編譯等一系列操作後,轉成適配昇騰AI處理器的*.om模型檔案。
  3. 後續使用者可呼叫AscendCL提供的模型載入、執行等介面實現模型推理。

單運算元編譯流程:

  1. 使用ATC工具轉換單運算元時,單運算元經過編譯後,轉換成適配昇騰AI處理器的單運算元*.om模型檔案。
  2. 後續使用者可呼叫AscendCL提供的單運算元模型載入、執行等介面在整網中驗證單運算元功能。

如何使用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處理器的版本,例如Ascend310。
  • --model:原始網路模型檔案路徑,含檔名。
  • --weight:原始網路模型權重檔案路徑,含檔名,僅當原始網路模型是Caffe時需要指定。
  • --output:轉換後的*.om模型檔案路徑,含檔名,轉換成功後,模型檔名自動以.om字尾結尾。

3. 若提示ATC run success資訊,則說明模型轉換成功。

在--output引數指定的路徑下,可檢視轉換後的模型檔案,例如caffe_resnet50.om。

ATC工具支援更多特性

上述只給出了ATC工具進行模型轉換最基本的命令,本章節給出ATC工具支援的更多特性,方便使用者進一步瞭解。

  • ATC工具支援將原始模型檔案或昇騰*.om模型檔案轉換成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
  • 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" 
  • 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 」決定。

更多介紹

關於ATC工具更多引數和特性說明,請登入昇騰社群查閱:

[1]昇騰檔案中心

[2]昇騰社群線上課程

[2]昇騰論壇

 

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