AKG深度學(xué)習(xí)網(wǎng)絡(luò)優(yōu)化程序
AKG(Auto Kernel Generator)對(duì)深度神經(jīng)網(wǎng)絡(luò)中的算子進(jìn)行優(yōu)化,并提供特定模式下的算子自動(dòng)融合功能。AKG與MindSpore的圖算融合功能協(xié)同工作,可提升在不同硬件后端上運(yùn)行網(wǎng)絡(luò)的性能。
AKG由四個(gè)基本的優(yōu)化模塊組成:規(guī)范化、自動(dòng)調(diào)度、指令發(fā)射和后端優(yōu)化。
-
規(guī)范化: 為了解決polyhedral表達(dá)能力的局限性(只能處理靜態(tài)的線性程序),需要首先對(duì)計(jì)算公式IR進(jìn)行規(guī)范化。規(guī)范化模塊中的優(yōu)化主要包括自動(dòng)運(yùn)算符inline、循環(huán)拆分和公共子表達(dá)式優(yōu)化等。
-
自動(dòng)調(diào)度: 自動(dòng)調(diào)度模塊基于polyhedral技術(shù),主要包括自動(dòng)向量化、自動(dòng)切分、依賴分析和數(shù)據(jù)搬移等。
-
指令發(fā)射: 指令發(fā)射模塊的優(yōu)化主要包括循環(huán)規(guī)范化、標(biāo)簽自動(dòng)生成和指令發(fā)射等。
-
后端優(yōu)化: 后端優(yōu)化模塊的優(yōu)化主要包括雙緩沖區(qū)、存儲(chǔ)重寫和同步指令插入等。
硬件后端支持
當(dāng)前支持Ascend910,gpu v100/A100等,更多硬件后端支持待開發(fā)。
構(gòu)建
從MindSpore側(cè)構(gòu)建
詳細(xì)細(xì)節(jié)請(qǐng)參考MindSpore README.md。
獨(dú)立構(gòu)建
我們建議您從MindSpore側(cè)構(gòu)建運(yùn)行AKG代碼,但同時(shí)為了方便開發(fā),我們提供了獨(dú)立編譯運(yùn)行AKG的方式。 詳細(xì)的編譯依賴請(qǐng)參考MindSpore安裝指南。
bash build.sh -t $target // target can set 'gpu' or 'ascend'
運(yùn)行
- 設(shè)置環(huán)境變量
-
Ascend910
cd tests source ./test_env.sh amd64 export RUNTIME_MODE='air_cloud' export PATH=${PATH}:${YOUR_CCEC_COMPILER_PATH} -
GPU V100/A100
cd tests source ./test_env.sh gpu
- 運(yùn)行測(cè)試用例
- Ascend910
cd tests/operators/vector pytest -s test_abs_001.py -m "level0" # 運(yùn)行l(wèi)evel0測(cè)試用例
- GPU V100/A100
cd tests/operators/gpu python3 test_all.py -a "op_name" #運(yùn)行op_name算子測(cè)試用例
