模型訓練速度下降

1. 問題描述:
重複訓練之前的模型,發現訓練速度明顯下降,之前尋一個epoch只需要4分鐘,但現在訓一個epoch半個多小時。

2. 解決辦法
排查了一整天,結果在另一個人的程序停止後,我的訓練速度自動回覆了正常。我沒有解決,服務器自己解決了。。。
下面這張圖:6號GPU是另一個同學在用,我的訓練很慢的時候,他的GPU利用率基本保持在95%~97%(watch -n 1 nvidia-smi看得)。而我的GPU 利用率在0和20%左右,50%左右跳躍,大概60%的時間停在60%
後來他的GPU利用率變成0了,我的保持在90%多。
猜想這和服務器的主線程有關,可能另一個同學同時佔用主線程,導師數據讀取時候費時。

3. 排查過程
(1)開始是懷疑我的模型有問題

去找模型前向傳播和反向傳播的時間:

發現在這個過程中,反向傳播(optimize)最費時,又去看具體是反向傳播那個過程最費時:


發現是更新參數的時候最費時,開始網上找反向傳播很費時怎麼解決
一早上搞到中午12:20,得趕緊去吃飯了,不吃食堂關門了。然後在去食堂的路上,算。。。這個模型計算過程時間沒有問題啊,每個batch0.3秒,我一個epoch不超過500個batch,算起來時間對的啊。。。問題應該出在數據讀取的時候。

(2) 找數據讀取的問題
把模型前向傳播和反向傳播都去掉,只看數據讀取的時間:
在DataLoad()的參數中,worker的數量設爲4,可以看到,基本上是4個4個一組,換一批的時候時間要很久。而且看久一點會發
現,不同的批次之前間隔的時間差別很大,有時候要40s,有時候只要5s。不知道什麼原因,去找自己Dataset的定義,也沒找到錯。

繼續折騰,到下午三點左右,再重新運行時候,數據讀取變得很快,被玩死

 

4. 現在仍然不理解的點:
中途爲了確定服務其沒有問題,找了一個簡單的示例:
https://github.com/pytorch/examples/tree/master/mnist
這個示例從頭到尾訓練都很快
這推翻了我之前的推導:不是因爲主進程被其他人佔用?

一個程序員知道debug,不瞭解系統怎麼工作的,遇到不是代碼導致的問題時,懵逼。要繼續修仙啊,補課

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章