【问题标题】:Tensorflow 0.6 GPU IssueTensorFlow 0.6 GPU 问题
【发布时间】:2016-08-25 07:42:13
【问题描述】:
我正在使用带有 GPU(Nvidia GeForce GTX Titan X)和 Tensorflow 0.6 的 Nvidia Digits Box 来训练神经网络,一切正常。但是,当我使用nvidia-smi -l 1 检查Volatile GPU Util 时,我注意到它只有6%,而且我认为大部分计算都在CPU 上,因为我注意到运行Tensorflow 的进程有大约90% 的CPU 使用率。结果是训练过程非常缓慢。我想知道是否有办法充分利用 GPU 而不是 CPU 来加快训练过程。谢谢!
【问题讨论】:
标签:
gpu
tensorflow
nvidia-digits
【解决方案1】:
我怀疑你在某个地方遇到了瓶颈(比如在这个 github issue 中)——你有一些没有 GPU 实现的操作,所以它被放置在 CPU 上,并且由于数据传输,GPU 处于空闲状态。例如,直到最近reduce_mean 还没有在 GPU 上实现,而在此之前Rank 也没有在 GPU 上实现,它被许多操作隐式使用。
有一次,我看到来自fully_connected_preloaded.py 的网络运行缓慢,因为有一个Rank 操作被放置在 CPU 上,因此在每一步都会触发整个数据集从 GPU 到 CPU 的传输。
为了解决这个问题,我首先建议升级到 0.8,因为它为 GPU 实现了更多操作(reduce_prod 用于整数输入,reduce_mean 等)。
然后您可以使用log_device_placement=True 创建会话,并查看是否有任何操作放置在 CPU 或 GPU 上会导致每步传输过多。
输入管道(例如parse_example)中经常有没有GPU实现的操作,我发现有时使用with tf.device("/cpu:0"):块将整个输入管道固定到CPU很有帮助
【讨论】:
-
感谢您的精彩回答!在我做了一些分析工作后,我注意到tensor.eval(session=..., feed_dict=...) 花费了太多时间,而且时间消耗随着代码运行时间的推移而增加。我想知道如何改进这个功能的使用,我真的很感激 :) (顺便说一句,我使用的是 Tensorflow 0.6,我尝试将它升级到 0.8,但我遇到了问题 - 我猜这可能是 Tensorflow 0.8 错误: stackoverflow.com/questions/36877559/…。我也想知道如果我仍然继续使用 0.6,我是否可以提高 tensor.eval() 的使用率)