0
我在訓練的模型中運行NaN值。從GPU運行並使用多線程提供隊列時,張量流中的NaN值
我有2個tensorflow隊列。第一個由獨立的加載程序線程提供,第二個線程從第一個隊列讀取數據,執行預處理,並加載到第二個隊列中。
這一切都發生在CPU上。然後模型從第二個隊列中讀取一批並在GPU上進行訓練。
經過可變數量的步驟後,我得到了NaNs,通常爲10-20。
我可以一邊用2種方法步驟的問題:在CPU上
- 運行。相同的代碼在CPU上運行良好。
- 刪除線程,相同的代碼,而不是在線程中運行加載器和預處理器,只需在訓練步驟之前按順序執行這兩個步驟。
所以這個問題只有當我使用多線程訪問不同設備的隊列時纔會遇到。
或者看來,我至今未能成功地將問題提煉成最小的測試用例。這個簡單的測試似乎工作。
想知道是否有任何已知的相關問題。
我已經在2個系統上運行了TF 1.0.1和運行1.1.0-rc1的系統。我已經嘗試過CUDNN 5和CUDNN 6庫。
我還沒有在一個有限的測試案例中成功地重現了這個問題,但似乎是我已經將一些圖像預處理操作附加到了GPU上,但是我正在從基於cpu的隊列中提供它們。這並沒有導致失敗,但我得到了奇怪的數值不穩定性,最終導致了NaN。我可以像上面提到的那樣解決問題,在沒有線程/隊列的情況下在GPU上運行,完全在CPU上運行,或者我的最終解決方案:使用Device('/ cpu:0')將圖像處理操作映射到CPU: ' –