2016-04-30 110 views
0

我正在使用Nvidia Digits Box與GPU(Nvidia GeForce GTX Titan X)和Tensorflow 0.6來訓練神經網絡,並且一切正常。但是,當我使用nvidia-smi -l 1檢查Volatile GPU Util時,我注意到它只有6%,我認爲大部分計算都在CPU上,因爲我注意到運行Tensorflow的進程佔用了大約90%的CPU使用量。結果是培訓過程非常緩慢。我想知道是否有辦法充分利用GPU而不是CPU來加速培訓過程。謝謝!Tensorflow 0.6 GPU Issue

回答

3

我懷疑你的某處存在瓶頸(就像這個github issue) - 你有一些沒有GPU實現的操作,所以它被放在CPU上,並且GPU由於數據傳輸而空閒。例如,直到最近reduce_mean沒有在GPU上實現,並且在此之前Rank沒有在GPU上實現,並且它被許多操作符隱式地使用。

有一次,我看到一個網絡從fully_connected_preloaded.py緩慢,因爲有一個Rank操作系統放在CPU上,因此在每一步都會觸發從GPU到CPU的整個數據集的傳輸。

爲了解決這個問題,我首先建議升級到0.8,因爲它有更多的GPU用於整數輸入(reduce_prod用於整數輸入,reduce_mean等)。

然後,您可以使用log_device_placement=True創建您的會話,並查看是否有任何操作放在CPU或GPU上,導致每步的傳輸過多。

經常有在不具備GPU實現輸入管道(如parse_example)OPS,我發現它的幫助有時使用with tf.device("/cpu:0"):

+0

感謝你的偉大的答案引腳整個輸入管道CPU!在完成一些分析工作後,我注意到'tensor.eval(session = ...,feed_dict = ...)'花費的時間太長,並且隨着代碼運行時間的增加,時間消耗也會增加。 (順便說一下,我使用的是Tensorflow 0.6,我試圖將它升級到0.8,但是我遇到了問題 - 我想這可能是Tensorflow 0.8的bug: http://stackoverflow.com/questions/36877559/tensorflow-0-8-import-and-export-output-tensors-problems。我還想知道如果我仍然繼續使用,我是否可以改進'tensor.eval()'的使用0.6) –