自動調優工具AOE,讓你的模型在昇騰平臺上高效執行
摘要:當運算元效能或者網路效能不佳時,可以使用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的簡單介紹。關於更多內容,可以在昇騰文件中心檢視,您也可在“昇騰社群線上課程”板塊學習視訊課程,學習過程中的任何疑問,都可以在“昇騰論壇”互動交流!
- 使用卷積神經網路實現圖片去摩爾紋
- 核心不中斷前提下,Gaussdb(DWS)記憶體報錯排查方法
- 簡述幾種常用的排序演算法
- 自動調優工具AOE,讓你的模型在昇騰平臺上高效執行
- GaussDB(DWS)運維:導致SQL執行不下推的改寫方案
- 詳解目標檢測模型的評價指標及程式碼實現
- CosineWarmup理論與程式碼實戰
- 淺談DWS函數出參方式
- 程式碼實戰帶你瞭解深度學習中的混合精度訓練
- python進階:帶你學習實時目標跟蹤
- Ascend CL兩種資料預處理的方式:AIPP和DVPP
- 詳解ResNet 網路,如何讓網路變得更“深”了
- 帶你掌握如何檢視並讀懂昇騰平臺的應用日誌
- InstructPix2Pix: 動動嘴皮子,超越PS
- 何為神經網路卷積層?
- 在昇騰平臺上對TensorFlow網路進行效能調優
- 介紹3種ssh遠端連線的方式
- 分散式資料庫架構路線大揭祕
- DBA必備的Mysql知識點:資料型別和運算子
- 5個高併發導致數倉資源類報錯分析