2016-12-26 40 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,同时重置默认图形...