基于TensorFlow模型遷移到Ascend 910(NPU)調(diào)優(yōu)過程簡述
1. CharCNN模型
1. 直接上結(jié)果,最終性能調(diào)優(yōu)對比如下:
注意的是,根據(jù)環(huán)境系統(tǒng)負載,數(shù)據(jù)存在一定波動。性能和精度表現(xiàn)一般,其實不太行,有同學(xué)調(diào)試的非常好,應(yīng)該已經(jīng)合并到倉庫了,可以對比原始代碼查看差異,得到一些啟示,具體代碼可見官方倉庫:
(調(diào)優(yōu)后)一位調(diào)試的很好的同學(xué)的代碼:https://gitee.com/ascend/modelzoo/tree/master/contrib/Tensorflow/Research/nlp/char-level_cnn/CharCNN_tf_hw09124698
(調(diào)優(yōu)前)官方原始代碼:https://gitee.com/ascend/modelzoo/tree/master/contrib/TensorFlow/Research/nlp/char-level_cnn/CharCNN_tf_huangjinsai
2. 性能和精度調(diào)優(yōu)過程(僅供參考,有同學(xué)做的更好,可以直接在論壇搜過相關(guān)經(jīng)驗分享帖)
首先來說,在默認腳本下,精度和性能都是不達標(biāo)的,主要工作在于性能的提升,且要保證性能提升的同時,精度不下降(與GPU相比),還有就是精度提升。先來介紹一下:基于官方倉庫的初始代碼進行調(diào)試:
(1)調(diào)整batch size等超參數(shù),尋求最佳超參數(shù)組合,具體一些嘗試和結(jié)果如下:
覺得調(diào)參這方面提升不大,還有就是數(shù)據(jù)加載部分耗時很大,明顯感受到等待時間很長,在依瞳環(huán)境下,一般需要接近20分鐘時間,這個解決辦法,qoooqqq同學(xué)給了一個辦法,就是一次性獲取完整epoch所需要的數(shù)據(jù)獲得最優(yōu)數(shù)據(jù)輸入耗時!,具體介紹可參考他的帖子。
下面嘗試下官方提供的性能調(diào)優(yōu)工具。
(3)Auto Tune
這是一個官方提供的自動優(yōu)化用的工具,在Terminal里執(zhí)行即可,注意僅在該Terminal下有效,具體操作如下:
· 在新建的Terminal下執(zhí)行如下命令:
# 注意這是在依瞳環(huán)境下,如果使用其他環(huán)境,比如ModelArts,請參看相關(guān)文檔 export install_path=/home/HwHiAiUser/Ascend/ascend-toolkit/latest #export LD_LIBRARY_PATH=${install_path}/driver/lib64/common/:${install_path}/driver/lib64/driver:$LD_LIBRARY_PATH export PATH=${install_path}/fwkacllib/ccec_compiler/bin:${install_path}/fwkacllib/bin:$PATH export LD_LIBRARY_PATH=${install_path}/fwkacllib/lib64:$LD_LIBRARY_PATH export PYTHONPATH=${install_path}/fwkacllib/python/site-packages:$PYTHONPATH export PYTHONPATH=${install_path}/tfplugin/python/site-packages:$PYTHONPATH export ASCEND_OPP_PATH=${install_path}/opp export TE_PARALLEL_COMPILER=8 export REPEAT_TUNE=False sudo chmod -R 777 ${install_path}/fwkacllib/data
如果報沒有權(quán)限的錯誤,只要賦予其權(quán)限就行了,具體參考上述最后一條指令。之后執(zhí)行你的代碼,啟動訓(xùn)練。
其實,和DS CNN類似,不太行,會報錯,得到回復(fù)說是暫不支持動態(tài)shape。
下面是Profiling,這方面我沒什么好的優(yōu)化辦法,上面提到的同學(xué)提出了一些方法,可以到上面帖子中參考。
總的來說,Ascend 910(NPU)和GPU各有優(yōu)勢,得益于AI Core的先天性優(yōu)勢,一般來說比GPU是要快的,但GPU的生態(tài)更加完善,這也是目前昇騰所努力的,經(jīng)過黃金賽,看到了很多同學(xué)很好的嘗試和努力,覺得他們還是很厲害的,有這樣的開發(fā)者支持(當(dāng)然還有很多企業(yè)的支持,記得有Powered by Ascend),昇騰的生態(tài)也在不斷完善和發(fā)展,感受很深的是,遇到問題,工程師響應(yīng)還是很迅速的,回答也比較專業(yè),能迅速定位問題,查找解決辦法,還能修改底層算子,執(zhí)行力非常強大。在這之中,相比之下,自己還有很多不足,需要改進和努力,期待日后的中國軟件開源創(chuàng)新大賽·第二賽道:開源任務(wù)挑戰(zhàn)賽(模型王者挑戰(zhàn)賽)能繼續(xù)參與,嘗試。
2. DS CNN模型
1. 直接上結(jié)果,最終性能調(diào)優(yōu)對比如下:
注意的是,根據(jù)環(huán)境系統(tǒng)負載,數(shù)據(jù)存在一定波動。
2. 性能和精度調(diào)優(yōu)過程
首先來說,在默認腳本下,DS CNN的精度基本是達標(biāo)的,主要工作在于性能的提升,且要保證性能提升的同時,精度不下降(與GPU相比)。但是這里也進行了精度提升的調(diào)試,先來介紹一下:注意一下均在數(shù)據(jù)集劃分test和val比例均為10%下,基于官方倉庫的初始代碼進行調(diào)試:
(1)調(diào)整batch size等超參數(shù),尋求最佳超參數(shù)組合,在train.py的最下面涉及很多超參數(shù),可以進行調(diào)試,我嘗試了一些,但是精度影響不大,但是對性能有一定影響,暫時不做考慮,留作性能調(diào)優(yōu)時調(diào)整。
(2)調(diào)整優(yōu)化損失函數(shù)和優(yōu)化器,一般來講,損失函數(shù)或優(yōu)化器改進對最終精度還是有比較大影響的,但是考慮到是復(fù)現(xiàn),損失函數(shù)只做了一點調(diào)整,并未做太多或太大的改動,主要嘗試了不同的優(yōu)化器,一般來說,不同的優(yōu)化器對收斂速度和最終精度有些影響,但這里發(fā)現(xiàn)原始代碼的優(yōu)化器比較好,雖然其他優(yōu)化器可以更快,但是精度略有損失。
(3)Auto Tune
這是一個官方提供的自動優(yōu)化用的工具,在Terminal里執(zhí)行即可,注意僅在該Terminal下有效,具體操作如下:
· 在新建的Terminal下執(zhí)行如下命令:
# 注意這是在依瞳環(huán)境下,如果使用其他環(huán)境,比如ModelArts,請參看相關(guān)文檔 export install_path=/home/HwHiAiUser/Ascend/ascend-toolkit/latest #export LD_LIBRARY_PATH=${install_path}/driver/lib64/common/:${install_path}/driver/lib64/driver:$LD_LIBRARY_PATH export PATH=${install_path}/fwkacllib/ccec_compiler/bin:${install_path}/fwkacllib/bin:$PATH export LD_LIBRARY_PATH=${install_path}/fwkacllib/lib64:$LD_LIBRARY_PATH export PYTHONPATH=${install_path}/fwkacllib/python/site-packages:$PYTHONPATH export PYTHONPATH=${install_path}/tfplugin/python/site-packages:$PYTHONPATH export ASCEND_OPP_PATH=${install_path}/opp export TE_PARALLEL_COMPILER=8 export REPEAT_TUNE=False sudo chmod -R 777 ${install_path}/fwkacllib/data
如果報沒有權(quán)限的錯誤,只要賦予其權(quán)限就行了,具體參考上述最后一條指令。
之后執(zhí)行你的代碼,啟動訓(xùn)練。
其實,這個不太行,會報錯,得到回復(fù)說是暫不支持動態(tài)shape,但是可以運行一部分,得到一些優(yōu)化,具體如下:
但是由于后來環(huán)境無法使用,這一部分未能合并到知識庫中使用,所以不知道最終結(jié)果,但應(yīng)該會有一點性能的提升。
之后也嘗試過Profiling,具體分析耗時算子,但是暫未能找到相應(yīng)優(yōu)化辦法。
在運行中,可以發(fā)現(xiàn)AI Core最高利用率為26%左右,且是間歇性的,一般都是0,這說明未能充分利用AI Core,應(yīng)該把更多計算放到AI Core上進行,因為這是相比于參考對象GPU來說,Ascend 910或者說NPU最具有優(yōu)勢的地方,AI Core的計算效率勝于GPU,特別是對于CNN來說,未來應(yīng)該還有優(yōu)化空間,期待感興趣的同學(xué)和大佬來嘗試,官方原始提供的代碼可到官方倉庫查看,鏈接如下:https://gitee.com/ascend/modelzoo/tree/master/contrib/TensorFlow/Research/speech/ds-cnn/ds-cnn_tf_huangjinsai
AI TensorFlow 昇騰 深度學(xué)習(xí) 神經(jīng)網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。