半精度訓練pytorch+Apex


想起一個關於運維的段子:很多問題可以通過重啟解決,想說算法工(diao)程(bao)師(xia)的很多問題可以通過換版本解決。

起因是白嫖到一個tensorflow的架子跑bert,自己花一上午時間搞定了單機多卡訓練,之后花了兩個下午也沒有搞定半精度,症狀是不報錯,但是顯存不降,速度不漲(32G v100)。於是開始懷念我熟悉的pytorch+apex,又斷斷續續花了兩天多的時間把整個訓練框架用pytorch實現了一遍,基於huggingface的transformers。

看到單卡loss正常下降就開始了多卡+apex半精度,結果發現fp16O1雖然顯存降了,速度卻比fp32還要慢2倍多,期間也參考了下其他人遇到的問題,最終懷疑了一下是不是自己的pytorch版本太老,pytorch版本從1.1.0切換到1.5.1,重新編譯apex,果然速度上來了....前后版本如下(右側是正常的,fp16O1速度是左側版本的10倍),python版本都是3.7.6:

 

apex按readme quick start安裝即可,可能需要指定加載路徑。

export PYTHONPATH=/你的apex路徑/:$PYTHONPATH

apex半精度訓練可以參考這里transformers里面已經調用的很好了,不必自己改什么。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM