2016-12-26 38 views
6

我無法有效地使tensorflow在我的系統上使用Nvidia GeForce GTX 1080 GPU。我將我的代碼簡化爲下面顯示的簡單版本;我只循環使用GPU的session.run()操作,數據只取一次並在循環內重用,所以這段代碼應該只使用GPU。運行張量流時低揮發性GPU利用率

input_training_data=self.val_data[batch_size, :] input_training_label=self.val_label[batch_size, :] feed_dict = self.get_feed_dict(input_training_data, input_training_label) for i in range(1000): acc = sess.run(cost, feed_dict)

我注意到的batch_size爲= 16,我得到了大多穩步GPU使用在8%左右,爲我增加了對的batch_size 32最大的GPU使用率增加到9-12%,但利用率住宿大部分爲0%,並不時跳至15%-25%,並立即回落至0%。這種模式繼續適用於更大的batch_sizes,基本上任何批量大於16的批量都會增加最大利用率,但利用率大多停留在0,並且只會不時出現峯值。我在這裏錯過了什麼?

+0

您可以嘗試應用分析工具以獲取每個操作的確切時間,請參閱示例[here](http://stackoverflow.com/documentation/tensorflow/3850/測量最處決時間的個體操作)。它應該可以幫助您理解爲什麼GPU利用率很低,並且可以通過更多信息更新您的問題。 –

+1

你可能有一些瓶頸,一些緩慢的操作被放置在CPU上,而GPU需要等待它完成,或者你的計算太小,並且你的數據傳輸傳輸跟不上GPU。有一些技巧來優化數據傳輸,如[here](https://github.com/tensorflow/tensorflow/issues/5722#issuecomment-266297116) –

回答

2

我有同樣的問題。我的問題是:我的計算是對GPU和CPU部分執行(所以有很多的兩臺設備,從而導致低GPU利用率之間的通信) 我已經在不同的線程讀取:

  1. 唐「T使用循環的data_dictornaries(使用Tensorvariable代替)
  2. 已經有一個問題與float64數據類型(它必須建立在CPU只計算) - >使用FLOAT32數據類型(如果可能)
  3. 使用Profiler建議通過Olivier Moindrot檢查是否有明確的CPU運行。然後嘗試使一切都GPU

順便說一句,一個提示關於你的代碼: 您的會話(默認情況下圖)將增長每次迭代,直到內存溢出異常可能的... - >我關閉會話每x -iteration,同時重置默認圖形...