TensorFlow - Titan X上的低GPU使用率

ver*_*man 15 performance profiling gpu conv-neural-network tensorflow

有一段时间,我注意到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似乎不太可能.

我做的事情是为了找到更多关于这个问题的原因:

  1. 分析TensorFlow的设备位置,一切似乎都在gpu:/ 0上,所以看起来不错.

  2. 使用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)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在多台计算机上运行以排除硬件问题.

  4. 大约一周前升级到最新版本的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

Sun*_*eef 1

使用最新版本的 Tensorflow(我使用的是 Tensorflow 1.4),我们可以获取运行时统计信息并在 Tensorboard 中将其可视化。

这些统计信息包括计算图中每个节点的计算时间和内存使用情况。