运行TensorFlow时GPU利用率低

6
我在使用tensorflow时遇到了问题,无法有效地利用我的系统上的Nvidia GeForce GTX 1080 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,并且只会不时地突然上升。我错过了什么?

你可以尝试应用性能分析工具来获取每个操作的准确时间,这里有一个例子(链接:http://stackoverflow.com/documentation/tensorflow/3850/measure-the-execution-time-of-individual-operations)。这将有助于了解为什么GPU利用率较低,并可以在问题中更新更多信息。 - Olivier Moindrot
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Yaroslav Bulatov
1个回答

3
我也遇到了同样的问题。我的问题是:我的计算部分在GPU和CPU上执行(因此两个设备之间有很多通信,导致GPU利用率低) 我在另一个帖子中看到过以下内容:
  1. 不要在循环中使用data_dictornaries(使用Tensorvariable代替)
  2. float64数据类型存在问题(必须仅在CPU上计算)->使用float32数据类型(如果可能)
  3. 使用Olivier Moindrot建议的Profiler检查是否有任何明确在CPU上运行的内容。然后尝试将所有内容转移到GPU上
顺便说一下,关于您的代码的提示: 每次迭代您的会话(默认图形)都会增长,直到可能出现OutOfMemory异常... -> 我在重置默认图形的同时每x次迭代关闭会话...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接