有一段时间,我注意到TensorFlow(v0.8)似乎没有完全使用我的Titan X的计算能力。对于我一直运行的几个CNN,GPU使用率似乎没有超过~30 %。通常,GPU利用率甚至更低,更像是15%。显示此行为的CNN的一个特定示例是来自DeepMind的Atari论文的带有Q学习的CNN(请参阅下面的代码链接)。
当我看到我们实验室的其他人运行用Theano或Torch编写的CNN时,GPU使用率通常为80%以上。这让我想知道,为什么我在TensorFlow中编写的CNN如此“慢”,我该怎么做才能更有效地利用GPU处理能力呢?通常,我对如何分析GPU操作并发现瓶颈所在的方式感兴趣。任何建议如何做到这一点都非常受欢迎,因为目前TensorFlow似乎无法实现这一点。
我所做的事情是为了更多地了解这个问题的原因:
分析TensorFlow的设备放置,一切似乎都在gpu:/ 0上,所以看起来不错。
使用 cProfile ,我优化了批量生成和其他预处理步骤。预处理在单个线程上执行,但TensorFlow步骤执行的实际优化需要更长的时间(请参阅下面的平均运行时间)。提高速度的一个明显想法是使用TFs队列运行器,但由于批量准备比优化快20倍,我想知道这是否会产生很大的不同。
Avg. Time Batch Preparation: 0.001 seconds
Avg. Time Train Operation: 0.021 seconds
Avg. Time Total per Batch: 0.022 seconds (45.18 batches/second)
在多台计算机上运行以排除硬件问题。
大约一周前升级到最新版本的CuDNN v5(RC),CUDA Toolkit 7.5并重新安装TensorFlow。
可以在此处找到发生此“问题”的Q-learning CNN示例:https://github.com/tomrunia/DeepReinforcementLearning-Atari/blob/master/qnetwork.py
显示低GPU利用率的NVIDIA SMI示例:NVIDIA-SMI
答案 0 :(得分:1)
使用更新版本的Tensorflow(我正在使用Tensorflow 1.4),我们可以获取runtime statistics并在Tensorboard中显示它们。
这些统计信息包括计算图中每个节点的计算时间和内存使用情况。