(GTX 1080,Tensorflow 1.0.0)
在培训期间nvidia-smi
输出(下方)表明GPU 利用率大部分时间为0%(尽管GPU的使用)。关于我已经训练的时间,情况似乎如此。有一段时间它达到100%或类似,但是一秒钟。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26 Driver Version: 375.26 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 1080 Off | 0000:01:00.0 On | N/A |
| 33% 35C P2 49W / 190W | 7982MiB / 8110MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1093 G /usr/lib/xorg/Xorg 175MiB |
| 0 1915 G compiz 90MiB |
| 0 4383 C python 7712MiB |
+-----------------------------------------------------------------------------+
正如我在this问题中描述的那样,我遇到了这种情况。 可以使用该github存储库中的代码或者通过跟踪tensorflow网站上的this简单再训练示例并传递受限制的per_process_gpu_memory_fraction(小于1.0)来解决问题:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config, ...)
问题1:在使用< 1.0的GPU时,如何在训练期间真正使用(利用)GPU?
问题2:如何使用我的图形卡真正使用完整GPU(不将其设置为< 1.0)?
帮助和提示赞赏!
答案 0 :(得分:4)
当您创建一个大于GPU内存的图形时,TensorFlow会回退到CPU,它会使用RAM和CPU而不是GPU。因此,只需删除per_process_gpu_memory_fraction
的选项并减小批量大小。最有可能的例子是使用大批量大小,因为它是在多个GPU或具有> 32Gb的CPU中训练的,但事实并非如此。它也可以是您选择的优化算法。 SGD比其他算法使用更少的内存,尝试先设置它。使用GPU中的8Gb,您可以尝试批量大小为16和SGD,它应该可以工作。然后,您可以增加批量大小或使用其他算法,如RMSprop。
如果它仍然不起作用,你可能正在做其他事情。例如,您在每次迭代中都保存一个检查点。保存检查点是在CPU中完成的,并且可能比GPU中的简单迭代花费更多的时间。这可能是您看到GPU使用量激增的原因。