摘要:本文介紹了昇騰CANN提供的模型轉換工具ATC,介紹了其功能、架構,並以具體樣例介紹了該工具的基本使用方法以及常用設定。
本文分享自華為雲社群《使用ATC工具將主流開源框架模型轉換為昇騰模型》,作者: 昇騰CANN。
昇騰張量編譯器(Ascend Tensor Compiler,簡稱ATC)是昇騰CANN架構體系下的模型轉換工具:
模型轉換過程中,ATC會進行運算元排程優化、權重資料重排、記憶體使用優化等操作,對開源框架的網路模型做進一步調優,使其高效地在昇騰AI處理器上執行。
開源框架網路模型編譯流程:
單運算元編譯流程:
下面以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
引數解釋如下:
3. 若提示ATC run success資訊,則說明模型轉換成功。
在--output引數指定的路徑下,可檢視轉換後的模型檔案,例如caffe_resnet50.om。
上述只給出了ATC工具進行模型轉換最基本的命令,本章節給出ATC工具支援的更多特性,方便使用者進一步瞭解。
- 原始模型檔案—>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
模型轉換時支援指定網路模型的輸入或輸出節點的資料型別、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"
某些推理場景,如檢測出目標後再執行目標識別網路,由於目標個數不固定導致目標識別網路輸入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]昇騰論壇