【CANN文檔速遞03期】帶你解鎖「訓(xùn)練網(wǎng)絡(luò)精度調(diào)優(yōu)」
昇騰開發(fā)者遷移好的模型在昇騰AI處理器上執(zhí)行訓(xùn)練時(shí),可能會(huì)存在如下精度問題:
1.? ?loss曲線與參考基準(zhǔn)差異不符合預(yù)期
2.? ?驗(yàn)證準(zhǔn)確度與參考基準(zhǔn)差異不符合預(yù)期
這些精度問題往往由于具有以下特征而定位困難:
1.? ?訓(xùn)練正常結(jié)束
2.? ?日志無任何異常
3.? ?與參考基準(zhǔn)對(duì)比時(shí)才發(fā)現(xiàn)結(jié)果不符合預(yù)期
我們分析發(fā)現(xiàn),精度問題高概率發(fā)生點(diǎn)為:
本期為您梳理了精度問題定位的三板斧流程,帶您快速掃除網(wǎng)絡(luò)精度障礙!
精度調(diào)優(yōu)流程
調(diào)優(yōu)前檢查
在精度問題定位前,我們需要對(duì)訓(xùn)練腳本進(jìn)行必要的檢查,排除參考基準(zhǔn)和模型遷移過程中可能存在的影響網(wǎng)絡(luò)訓(xùn)練精度的因素。
檢查參考基準(zhǔn)腳本,排除參考基準(zhǔn)問題:
√??檢查參考基準(zhǔn)腳本多次訓(xùn)練驗(yàn)證精度一致
√??檢查參考基準(zhǔn)腳本正確使能混合精度訓(xùn)練
檢查遷移后的腳本,排除模型遷移時(shí)可能存在的問題:
√??檢查模型在NPU上正確使能混合精度
√??檢查模型在NPU上正確使能Loss Scale
√??檢查數(shù)據(jù)集與參考基準(zhǔn)一致
√??檢查數(shù)據(jù)預(yù)處理流程與參考基準(zhǔn)一致
√??檢查多節(jié)點(diǎn)分片方式與參考基準(zhǔn)一致
√??檢查訓(xùn)練流程與參考基準(zhǔn)一致
√??檢查模型超參與參考基準(zhǔn)一致
調(diào)優(yōu)工具介紹
檢查完訓(xùn)練腳本后,可借助一鍵式精度分析工具進(jìn)行精度問題分析,該工具的主要功能包括:
開發(fā)者可以從https://gitee.com/ascend/tools下載precision_tool文件夾,上傳到訓(xùn)練工作目錄下即可使用:
├── resnet // 訓(xùn)練工作目錄 │ ├── imagenet_main.py │ ├── resnet_model.py │ ├── resnet_run_loop.py │ ├── cifar10_main.py │ ├── ... │ ├── precision_tool │ │ ├── cli.py │ │ ├──...
使用限制:
●? ?僅配套CANN 5.0.2.alpha005及以上版本
●? ?當(dāng)前僅支持TensorFlow 1.15訓(xùn)練場(chǎng)景
后續(xù)工具會(huì)進(jìn)行不斷增強(qiáng),歡迎大家持續(xù)關(guān)注,下面我們來看下現(xiàn)階段工具提供了哪些精度問題分析能力吧!
浮點(diǎn)異常檢測(cè)
訓(xùn)練網(wǎng)絡(luò)執(zhí)行過程中,可能發(fā)生頻繁的浮點(diǎn)異常情況,即loss scale值下降次數(shù)較多或者直接下降為1,此時(shí)需要分析溢出數(shù)據(jù),對(duì)頻繁浮點(diǎn)異常問題定界定位。
步驟 1??????修改訓(xùn)練腳本,采集溢出數(shù)據(jù)
import precision_tool.tf_config as npu_tf_config config = npu_tf_config.session_dump_config(config, action='overflow') with tf.Session(config=config) as sess: sess.run(...)
訓(xùn)練執(zhí)行完成后,生成溢出數(shù)據(jù):
├── precision_tool │ ├── cli.py │ ├── ... ├── precision_data │ ├── overflow │ │ ├── dump // 生成的溢出數(shù)據(jù)
步驟 2??????將生成的數(shù)據(jù)目錄上傳到toolkit安裝環(huán)境,進(jìn)行必要的配置(詳細(xì)可參考文檔),啟動(dòng)命令行,進(jìn)行溢出數(shù)據(jù)分析
python3 ./precision_tool/cli.py PrecisionTool > ac
可得到溢出算子信息:
----結(jié)束
融合異常檢測(cè)
訓(xùn)練網(wǎng)絡(luò)執(zhí)行過程中,系統(tǒng)根據(jù)內(nèi)置融合規(guī)則對(duì)網(wǎng)絡(luò)中算子進(jìn)行融合,以達(dá)到提高網(wǎng)絡(luò)性能的效果。由于大多數(shù)融合是自動(dòng)識(shí)別的,可能存在未考慮到的場(chǎng)景,導(dǎo)致精度問題,因此可以嘗試關(guān)閉融合規(guī)則,定界網(wǎng)絡(luò)問題是否是由于融合導(dǎo)致。
步驟 1??????修改訓(xùn)練腳本,在關(guān)閉融合規(guī)則的情況下執(zhí)行訓(xùn)練
import precision_tool.tf_config as npu_tf_config config = npu_tf_config.session_dump_config(config, action='fusion_off') with tf.Session(config=config) as sess: sess.run(...)
步驟 2??????在融合規(guī)則關(guān)閉的情況,如果網(wǎng)絡(luò)精度有明顯提高,表明是融合問題導(dǎo)致
目前暫不支持自動(dòng)分析定位,后續(xù)會(huì)逐步支持,請(qǐng)到昇騰開源社區(qū)https://gitee.com/ascend提issue求助。
----結(jié)束
整網(wǎng)數(shù)據(jù)比對(duì)
排除以上問題后,在訓(xùn)練網(wǎng)絡(luò)精度仍未達(dá)預(yù)期時(shí),通過采集訓(xùn)練過程中各算子的運(yùn)算結(jié)果(即Dump數(shù)據(jù)),然后和業(yè)界標(biāo)準(zhǔn)算子(如TensorFlow)運(yùn)算結(jié)果進(jìn)行數(shù)據(jù)偏差對(duì)比,可快速定位到具體算子的精度問題。
步驟 1??????修改原始腳本,在GPU/CPU執(zhí)行訓(xùn)練,生成標(biāo)桿dump數(shù)據(jù)
import precision_tool.tf_config as npu_tf_config # 等價(jià)于tf_debug.DumpingDebugWrapperSession(sess, "precision_data/tf/tf_debug") sess = npu_tf_config.sess_dump(sess)
步驟 2??????修改遷移后的腳本,在NPU訓(xùn)練,生成npu dump數(shù)據(jù)
import precision_tool.tf_config as npu_tf_config config = npu_tf_config.session_dump_config(config, action=‘dump') with tf.Session(config=config) as sess: sess.run(...)
步驟 3??????將生成的數(shù)據(jù)目錄上傳到toolkit安裝環(huán)境,進(jìn)行整網(wǎng)數(shù)據(jù)比對(duì)
├── precision_tool │ ├── cli.py │ ├── ... ├── precision_data │ ├── tf │ │ ├── dump // 標(biāo)桿dump數(shù)據(jù) │ ├── npu │ │ ├── debug_0 // npu dump數(shù)據(jù)
進(jìn)行必要的配置(詳細(xì)可參考文檔),啟動(dòng)命令行:
python3 ./precision_tool/cli.py PrecisionTool > ac –c PrecisionTool > vcs –c 0.98 –l 10
可得到余弦相似度小于0.98的數(shù)據(jù):
----結(jié)束
更多介紹
了解更詳細(xì)的內(nèi)容,可以登錄昇騰社區(qū)?https://www.hiascend.com,閱讀相關(guān)文檔:
AI 昇騰 機(jī)器學(xué)習(xí) 網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。