TensorFlow - Titan X上的低GPU使用率

时间:2016-05-30 21:31:05

标签: performance profiling gpu tensorflow conv-neural-network

有一段时间,我注意到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)
    
  3. 在多台计算机上运行以排除硬件问题。

  4. 大约一周前升级到最新版本的CuDNN v5(RC),CUDA Toolkit 7.5并重新安装TensorFlow。

  5. 可以在此处找到发生此“问题”的Q-learning CNN示例:https://github.com/tomrunia/DeepReinforcementLearning-Atari/blob/master/qnetwork.py

    显示低GPU利用率的NVIDIA SMI示例:NVIDIA-SMI

1 个答案:

答案 0 :(得分:1)

使用更新版本的Tensorflow(我正在使用Tensorflow 1.4),我们可以获取runtime statistics并在Tensorboard中显示它们。

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