运行张量流时的低挥发性GPU利用率

Dav*_*Liu 6 gpu neural-network tensorflow

我无法使tensorflow有效地在我的系统上使用Nvidia GeForce GTX 1080 GPU.我将代码缩减为下面显示的非常简单的版本; 我只是循环执行应该使用GPU的session.run()操作,数据只被提取一次并在循环中重用,所以这段代码应该只使用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,并且只会不时出现峰值.我在这里错过了什么?

Sau*_*uer 3

我也遇到过同样的问题。我的问题是:我的计算部分在 GPU 和 CPU 上执行(因此两个设备之间存在大量通信,这导致 GPU 利用率较低)我在不同的线程中读到:

  1. 不要在循环中使用 data_dictornaries (使用 Tensorvariable 代替)
  2. float64 数据类型存在问题(只能在 CPU 上计算)-> 使用 float32 数据类型(如果可能)
  3. 使用 Olivier Moindrot 建议的 Profiler 来检查您的 CPU 上是否显式运行了任何内容。然后尝试将所有内容都带到 GPU 上

顺便说一句,关于您的代码的提示:您的会话(默认图形)将在每次迭代中增长,直到可能出现 OutOfMemory 异常... -> 我在每次 x 迭代时关闭会话,同时重置默认图形...