在培训期间,GPU利用率大多为0%

问题描述 投票:2回答:1

(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)?

帮助和提示赞赏!

tensorflow gpu
1个回答
5
投票

当您创建一个大于GPU内存的图形时,TensorFlow会回退到CPU,它会使用RAM和CPU而不是GPU。因此,只需删除per_process_gpu_memory_fraction的选项并减小批量大小。最有可能的例子是使用大批量大小,因为它是在多个GPU或大于32Gb的CPU中训练的,这不是你的情况。它也可以是您选择的优化算法。 SGD比其他算法使用更少的内存,尝试先设置它。使用GPU中的8Gb,您可以尝试批量大小为16和SGD,它应该可以工作。然后,您可以增加批量大小或使用其他算法,如RMSprop。

如果它仍然不起作用,你可能正在做其他事情。例如,您在每次迭代中都保存一个检查点。保存检查点是在CPU中完成的,并且可能比GPU中的简单迭代花费更多的时间。这可能是您看到GPU使用量激增的原因。

© www.soinside.com 2019 - 2024. All rights reserved.