自動(dòng)調(diào)優(yōu)工具AOE,讓你的模型在昇騰平臺(tái)上高效運(yùn)行
什么是AOE??
AOE(Ascend Optimization Engine)是一款自動(dòng)調(diào)優(yōu)工具,目的是為了充分利用有限的硬件資源,滿足算子和整網(wǎng)的性能要求。
AOE通過(guò)生成調(diào)優(yōu)策略、編譯、在運(yùn)行環(huán)境上驗(yàn)證的閉環(huán)反饋機(jī)制,不斷迭代,最終得到最佳的調(diào)優(yōu)策略,從而更充分利用硬件資源,提升網(wǎng)絡(luò)的性能。
AOE的架構(gòu)如下。

Application層:調(diào)優(yōu)入口,支持如下。
AOE:這里的AOE表示AOE進(jìn)程,是離線推理場(chǎng)景下的調(diào)優(yōu)入口。
TFAdapter(TensorFlow Adapter):TensorFlow訓(xùn)練場(chǎng)景下的調(diào)優(yōu)入口。
PyTorchAdapter(PyTorch Adapter):PyTorch訓(xùn)練場(chǎng)景下的調(diào)優(yōu)入口。
Tuning層:調(diào)優(yōu)模式,支持以下類型。
SGAT(SubGraph Auto Tuning):子圖調(diào)優(yōu)。一張完整的網(wǎng)絡(luò),會(huì)被拆分成多個(gè)子圖。針對(duì)每一個(gè)子圖,通過(guò)SGAT生成不同的調(diào)優(yōu)策略。SGAT的調(diào)優(yōu)算法通過(guò)獲取每個(gè)迭代的調(diào)優(yōu)策略性能數(shù)據(jù),找到最優(yōu)的調(diào)優(yōu)策略,從而實(shí)現(xiàn)對(duì)應(yīng)子圖的最優(yōu)性能。
OPAT(Operator Auto Tuning):算子調(diào)優(yōu)。AOE將一張整圖輸入給OPAT,OPAT內(nèi)部進(jìn)行算子融合,將融合得到的圖進(jìn)行算子粒度切分,針對(duì)每一個(gè)融合算子子圖生成不同的算子調(diào)優(yōu)策略,從而實(shí)現(xiàn)最優(yōu)的算子性能。
GDAT(Gradient Auto Tuning):梯度調(diào)優(yōu)。分布式訓(xùn)練場(chǎng)景下,GDAT通過(guò)最大化反向計(jì)算與梯度聚合通信并行度,縮短通信拖尾時(shí)間,提升集群訓(xùn)練的性能。
Execute層:為執(zhí)行層,支持編譯(Compiler)和在運(yùn)行環(huán)境上運(yùn)行(Runner)。
AOE工作原理
如下以算子調(diào)優(yōu)為例,介紹AOE的工作原理。

1. 將原始開源框架模型傳入GE、FE進(jìn)行圖準(zhǔn)備(InferShape、算子選擇等)及子圖拆分。
2. 進(jìn)入算子編譯階段,根據(jù)拆分的子圖信息匹配知識(shí)庫(kù)。
若能匹配到知識(shí)庫(kù):
- 未開啟REPEAT_TUNE的場(chǎng)景,直接使用已有知識(shí)庫(kù)中的調(diào)優(yōu)策略編譯算子。
- 開啟REPEAT_TUNE的場(chǎng)景,通過(guò)AOE進(jìn)行調(diào)優(yōu)。
??若調(diào)優(yōu)后的結(jié)果優(yōu)于當(dāng)前已有的知識(shí)庫(kù),則會(huì)將調(diào)優(yōu)后的結(jié)果存入用戶自定義知識(shí)庫(kù),并使用自定義知識(shí)庫(kù)中的調(diào)優(yōu)策略編譯算子。
??若調(diào)優(yōu)后的結(jié)果不優(yōu)于當(dāng)前已有的知識(shí)庫(kù),則不再生成用戶自定義知識(shí)庫(kù),直接使用已有的知識(shí)庫(kù)編譯算子。
若未匹配到知識(shí)庫(kù),則通過(guò)AOE進(jìn)行調(diào)優(yōu)。
- 若調(diào)優(yōu)后的結(jié)果優(yōu)于默認(rèn)調(diào)優(yōu)策略的性能,會(huì)將調(diào)優(yōu)后的結(jié)果寫入自定義知識(shí)庫(kù),并使用自定義知識(shí)庫(kù)中的調(diào)優(yōu)策略編譯算子。
- 若調(diào)優(yōu)后的結(jié)果不優(yōu)于默認(rèn)調(diào)優(yōu)策略的性能,不生成自定義知識(shí)庫(kù),使用默認(rèn)調(diào)優(yōu)策略編譯算子。
3. 推理場(chǎng)景下,編譯完成后,生成適配昇騰AI處理器的離線模型文件。訓(xùn)練場(chǎng)景下,編譯完成后,生成訓(xùn)練好的網(wǎng)絡(luò)模型文件。
AOE使用場(chǎng)景
當(dāng)算子性能或者網(wǎng)絡(luò)性能不佳時(shí),可以使用AOE進(jìn)行調(diào)優(yōu)。AOE調(diào)優(yōu)支持的場(chǎng)景如下:
離線推理
TensorFlow訓(xùn)練
PyTorch訓(xùn)練
在線推理
IR構(gòu)圖
如何使用AOE進(jìn)行調(diào)優(yōu)?
如下以離線推理場(chǎng)景下Caffe網(wǎng)絡(luò)的算子調(diào)優(yōu)為例,介紹如何進(jìn)行AOE調(diào)優(yōu)。
1. 準(zhǔn)備模型文件。
2. 配置環(huán)境變量。
必選環(huán)境變量
- CANN組合包提供進(jìn)程級(jí)環(huán)境變量設(shè)置腳本,供用戶在進(jìn)程中引用,以自動(dòng)完成環(huán)境變量設(shè)置。執(zhí)行命令參考如下,以下示例均為root或非root用戶默認(rèn)安裝路徑,請(qǐng)以實(shí)際安裝路徑為準(zhǔn)。
-?AOE工具依賴Python,以Python3.7.5為例,請(qǐng)以運(yùn)行用戶執(zhí)行如下命令設(shè)置Python3.7.5的相關(guān)環(huán)境變量。
可選環(huán)境變量
命令中的參數(shù)含義如下。
ASCEND_DEVICE_ID:昇騰AI處理器的邏輯ID。
TUNE_BANK_PATH:調(diào)優(yōu)后自定義知識(shí)庫(kù)的存儲(chǔ)路徑。
TE_PARALLEL_COMPILER:開啟算子的并行編譯功能。
REPEAT_TUNE:是否重新發(fā)起調(diào)優(yōu)。
3. 進(jìn)行AOE調(diào)優(yōu),命令如下。命令中使用的目錄以及文件均為樣例,請(qǐng)以實(shí)際為準(zhǔn)。
命令中的參數(shù)含義如下。
framework:原始網(wǎng)絡(luò)模型的框架類型。0表示Caffee。
model:原始模型文件路徑與文件名。
weight:原始模型權(quán)重文件路徑與文件名。
job_type:調(diào)優(yōu)模式,2表示算子調(diào)優(yōu)。
4. 若提示如下信息,則說(shuō)明AOE調(diào)優(yōu)完成。
調(diào)優(yōu)完成后,生成文件如下。
自定義知識(shí)庫(kù):若滿足自定義知識(shí)庫(kù)生成條件則會(huì)生成自定義知識(shí)庫(kù)。
om模型文件,存放路徑為:
${WORK_PATH}:調(diào)優(yōu)工作目錄
${model_name}:模型名稱
${timestamp}:時(shí)間戳
算子調(diào)優(yōu)結(jié)果文件:在執(zhí)行調(diào)優(yōu)的工作目錄下實(shí)時(shí)生成命名為“aoe_result_opat_{timestamp}_{pidxxx}.json”的文件,記錄調(diào)優(yōu)過(guò)程中被調(diào)優(yōu)的算子信息。示例如下。
5. 調(diào)優(yōu)完成后,請(qǐng)使用調(diào)優(yōu)后的自定義知識(shí)庫(kù)重新推理,驗(yàn)證性能是否提高。
以上就是AOE的簡(jiǎn)單介紹。關(guān)于更多內(nèi)容,可以在昇騰文檔中心查看,您也可在“昇騰社區(qū)在線課程”板塊學(xué)習(xí)視頻課程,學(xué)習(xí)過(guò)程中的任何疑問(wèn),都可以在“昇騰論壇”互動(dòng)交流!
相關(guān)參考:
[1]昇騰文檔中心:https://www.hiascend.com/zh/document
[2]昇騰社區(qū)在線課程:https://www.hiascend.com/zh/edu/courses
[3]昇騰論壇:https://www.hiascend.com/forum