自動調優工具AOE,讓你的模型在昇騰平臺上高效執行

語言: CN / TW / HK
摘要:當運算元效能或者網路效能不佳時,可以使用AOE進行調優。本文就帶大家瞭解自動調優工具AOE,讓你的模型在昇騰平臺上高效執行。

本文分享自華為雲社群《自動調優工具AOE,讓你的模型在昇騰平臺上高效執行》,作者:昇騰CANN 。

什麼是AOE?

AOE(Ascend Optimization Engine)是一款自動調優工具,目的是為了充分利用有限的硬體資源,滿足運算元和整網的效能要求。

AOE通過生成調優策略、編譯、在執行環境上驗證的閉環反饋機制,不斷迭代,最終得到最佳的調優策略,從而更充分利用硬體資源,提升網路的效能。

AOE的架構如下。

Application層:調優入口,支援如下。

  • AOE:這裡的AOE表示AOE程序,是離線推理場景下的調優入口。
  • TFAdapter(TensorFlow Adapter):TensorFlow訓練場景下的調優入口。
  • PyTorchAdapter(PyTorch Adapter):PyTorch訓練場景下的調優入口。

Tuning層:調優模式,支援以下型別。

  • SGAT(SubGraph Auto Tuning):子圖調優。一張完整的網路,會被拆分成多個子圖。針對每一個子圖,通過SGAT生成不同的調優策略。SGAT的調優演算法通過獲取每個迭代的調優策略效能資料,找到最優的調優策略,從而實現對應子圖的最優效能。
  • OPAT(Operator Auto Tuning):運算元調優。AOE將一張整圖輸入給OPAT,OPAT內部進行運算元融合,將融合得到的圖進行運算元粒度切分,針對每一個融合運算元子圖生成不同的運算元調優策略,從而實現最優的運算元效能。
  • GDAT(Gradient Auto Tuning):梯度調優。分散式訓練場景下,GDAT通過最大化反向計算與梯度聚合通訊並行度,縮短通訊拖尾時間,提升叢集訓練的效能。

Execute層:為執行層,支援編譯(Compiler)和在執行環境上執行(Runner)。

AOE工作原理

如下以運算元調優為例,介紹AOE的工作原理。

1. 將原始開源框架模型傳入GE、FE進行圖準備(InferShape、運算元選擇等)及子圖拆分。

2. 進入運算元編譯階段,根據拆分的子圖資訊匹配知識庫。

若能匹配到知識庫:

- 未開啟REPEAT_TUNE的場景,直接使用已有知識庫中的調優策略編譯運算元。

- 開啟REPEAT_TUNE的場景,通過AOE進行調優。

若調優後的結果優於當前已有的知識庫,則會將調優後的結果存入使用者自定義知識庫,並使用自定義知識庫中的調優策略編譯運算元。

若調優後的結果不優於當前已有的知識庫,則不再生成使用者自定義知識庫,直接使用已有的知識庫編譯運算元。

若未匹配到知識庫,則通過AOE進行調優。

- 若調優後的結果優於預設調優策略的效能,會將調優後的結果寫入自定義知識庫,並使用自定義知識庫中的調優策略編譯運算元。

- 若調優後的結果不優於預設調優策略的效能,不生成自定義知識庫,使用預設調優策略編譯運算元。

3. 推理場景下,編譯完成後,生成適配昇騰AI處理器的離線模型檔案。訓練場景下,編譯完成後,生成訓練好的網路模型檔案。

AOE使用場景

當運算元效能或者網路效能不佳時,可以使用AOE進行調優。AOE調優支援的場景如下:

  • 離線推理
  • TensorFlow訓練
  • PyTorch訓練
  • 線上推理
  • IR構圖

如何使用AOE進行調優?

如下以離線推理場景下Caffe網路的運算元調優為例,介紹如何進行AOE調優。

1. 準備模型檔案。

2. 配置環境變數。

必選環境變數

- CANN組合包提供程序級環境變數設定指令碼,供使用者在程序中引用,以自動完成環境變數設定。執行命令參考如下,以下示例均為root或非root使用者預設安裝路徑,請以實際安裝路徑為準。

# 以root使用者安裝toolkit包
/usr/local/Ascend/ascend-toolkit/set_env.sh 
# 以非root使用者安裝toolkit包
${HOME}/Ascend/ascend-toolkit/set_env.sh

- AOE工具依賴Python,以Python3.7.5為例,請以執行使用者執行如下命令設定Python3.7.5的相關環境變數。

#用於設定python3.7.5庫檔案路徑
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#如果使用者環境存在多個python3版本,則指定使用python3.7.5版本
export PATH=/usr/local/python3.7.5/bin:$PATH

可選環境變數

export ASCEND_DEVICE_ID=1
export TUNE_BANK_PATH=/home/HwHiAiUser/custom_tune_bank
export TE_PARALLEL_COMPILER=7
export REPEAT_TUNE=True
命令中的引數含義如下。
  • ASCEND_DEVICE_ID:昇騰AI處理器的邏輯ID。
  • TUNE_BANK_PATH:調優後自定義知識庫的儲存路徑。
  • TE_PARALLEL_COMPILER:開啟運算元的並行編譯功能。
  • REPEAT_TUNE:是否重新發起調優。

3. 進行AOE調優,命令如下。命令中使用的目錄以及檔案均為樣例,請以實際為準。

aoe --framework=0 --model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel --job_type=2

命令中的引數含義如下。

  • framework:原始網路模型的框架型別。0表示Caffee。
  • model:原始模型檔案路徑與檔名。
  • weight:原始模型權重檔案路徑與檔名。
  • job_type:調優模式,2表示運算元調優。

4. 若提示如下資訊,則說明AOE調優完成。

Aoe process finished

調優完成後,生成檔案如下。

- 自定義知識庫:若滿足自定義知識庫生成條件則會生成自定義知識庫。

- om模型檔案,存放路徑為:

${WORK_PATH}/aoe_workspace/${model_name}_${timestamp}/tunespace/result/${model_name}_${timestamp}_tune.om
${WORK_PATH}:調優工作目錄
${model_name}:模型名稱
${timestamp}:時間戳

- 運算元調優結果檔案:在執行調優的工作目錄下實時生成命名為“aoe_result_opat_{timestamp}_{pidxxx}.json”的檔案,記錄調優過程中被調優的運算元資訊。示例如下。

"basic": {
 "tuning_name": "調優任務名",
 "tuning_time(s)": 1827
 }
 "OPAT": {
 "model_baseline_performance(ms)": 113.588725,
 "model_performance_improvement": "0.31%",
 "model_result_performance(ms)": 113.236731,
 "opat_tuning_result": "tuning successful",
 "repo_modified_operators": {
 "add_repo_operators": [
 {
 "op_name": "strided_slice_10",
 "op_type": "stridedsliced",
       ……
 "repo_summary": {
 "repo_add_num": 2,
 "repo_hit_num": 17,
 "repo_reserved_num": 15,
 "repo_unsatisfied_num": 0,
 "repo_update_num": 2,
 "total_num": 19
 }

5. 調優完成後,請使用調優後的自定義知識庫重新推理,驗證效能是否提高。

以上就是AOE的簡單介紹。關於更多內容,可以在昇騰文件中心檢視,您也可在“昇騰社群線上課程”板塊學習視訊課程,學習過程中的任何疑問,都可以在“昇騰論壇”互動交流!

 

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