【问题标题】:TensorFlow - Low GPU usage on Titan XTensorFlow - Titan X 上的低 GPU 使用率
【发布时间】:2016-09-28 18:25:09
【问题描述】:

一段时间以来,我一直注意到 TensorFlow (v0.8) 似乎没有充分利用我的 Titan X 的计算能力。对于我一直在运行的几个 CNN,GPU 使用率似乎没有超过 ~30 %。通常,GPU 利用率甚至更低,接近 15%。显示这种行为的 CNN 的一个特定示例是来自 DeepMind 的 Atari 论文中的 CNN,它带有 Q-learning(代码见下面的链接)。

当我看到我们实验室的其他人在运行用 Theano 或 Torch 编写的 CNN 时,GPU 的使用率通常超过 80%。这让我想知道,为什么我在 TensorFlow 中编写的 CNN 如此“慢”,我该怎么做才能更有效地利用 GPU 处理能力?一般来说,我对分析 GPU 操作和发现瓶颈所在的方法感兴趣。任何建议如何做到这一点都非常受欢迎,因为目前这在 TensorFlow 上似乎不太可能。

我为进一步了解此问题的原因所做的事情:

  1. 分析 TensorFlow 的设备放置,一切似乎都在 gpu:/0 上,所以看起来没问题。

  2. 使用 cProfile,我优化了批处理生成和其他预处理步骤。预处理是在单个线程上执行的,但 TensorFlow 步骤执行的实际优化需要更长的时间(请参阅下面的平均运行时间)。提高速度的一个明显想法是使用 TF 队列运行器,但由于批处理准备已经比优化快 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。

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

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

【问题讨论】:

  • 改变批量大小会改变行为吗?还是让网络更复杂?
  • +1 增加小批量大小。由于内存利用率的原因,Volatile GPU-Util 数量可能与其他任何因素一样多。 Titan X 有 12GB 的内存,你有很多头部空间。如果您的模型不占用太多内存,您可以用更大的批次填充它。
  • 我做了一个小实验来研究改变批量大小的影响。以下是将大小为 N = 1..512 的批次提供给训练操作的结果。每个训练示例都是一个 84x84x4 类型的张量 tf.float32。结果在这里:pastebin.com/xrku9AjW 如您所见,GPU 利用率似乎没有显着变化,或者在增加批量大小时甚至会降低。时间测量是 100 个批次的平均值,并使用time.time() 记录。关于这里出了什么问题的任何线索?
  • 这个1.0还能重现吗?
  • 你有没有设法弄明白?我的 GTX1060 也有类似的问题。

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


【解决方案1】:

使用较新版本的 Tensorflow(我使用的是 Tensorflow 1.4),我们可以获取 runtime statistics 并在 Tensorboard 中可视化它们。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-26
    • 2020-02-05
    • 1970-01-01
    • 2019-09-25
    • 2018-06-29
    • 2017-05-01
    • 2018-02-19
    • 2017-02-02
    相关资源
    最近更新 更多