參考:https://blog.csdn.net/qian1122221/article/details/88579684python
問題描述:
最近在用RFBnet (源碼是pytorch的)訓練RSNA的比賽數據,除了要修改一點代碼支持RSNA的數據集外(打算後續再寫個博客),發如今使用dataloader讀取數據時,若是設置num_workers爲0,也就是用主進程讀取數據,模型訓練程序運行正常。若是設置num_workers爲其餘任何一個大於0的整數,也就是使用子進程讀取數據時,訓練程序會卡住,卡在訓練以前,GPU使用率和顯存佔用率都爲0。
docker
解決過程:
因爲是多進程就,用print調試大法,定位到是一行opencv代碼的問題,在dataloader子類的__getitem__方法裏面調用了
.net
image_array = cv2.cvtColor(image_array, cv2.COLOR_GRAY2BGR)
全部子進程的代碼都卡在這裏了。以前也有遇到過相似的問題,python多進程調用opencv的代碼會出現問題。因而就用numpy的concate替代了這個方法
調試
image_array = np.concatenate([image_array,image_array,image_array],axis=2)
繞過這個問題就能夠正常訓練了。
blog
問題探索:
其實這個問題,我在另一臺機器上是沒有遇到了,該機器是python3.6+opencv3.4.2
進程
遇到問題的環境是docker環境,python3.5+opencv3.2get
我感受跟opencv的版本可能有關係,等後續訓練完成以後把docker裏面opencv的版本升級到3.4.2再試一下源碼