自動調優工具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個高併發導致數倉資源類報錯分析