使用TensorFlow时最大限度地减少GPU的空闲时间

时间:2017-04-19 15:36:15

标签: tensorflow

使用Tensorflow训练网络时,我们如何最小化GPU的空闲时间?

要做到这一点: -

  1. 我使用多个Python线程预处理数据并将其提供给TensorFlow从中获取数据的tf.RandomShuffleQueue
  2. 我认为这比feed_dict方法更有效。

    但是,我仍然发现nvidia-smi我的GPU仍然从100%利用率转为0%利用率,并经常回到100%。 由于我的网络很大且数据集也很大12 million,因此任何有关加速的富有成效的建议都会非常有用。

    我认为直接从tf.Queue读取数据比feed_dict更正确吗?

    注意:我使用的是12 GB Titan X GPU(Maxwell架构)

1 个答案:

答案 0 :(得分:1)

由于多种原因(主要是在CPU上完成加载和预处理,而不是在主线程上),您认为通过队列进行比feed_dict更好是正确的。但有一点可能会破坏这一点,即GPU消耗数据的速度快于加载数据。因此,您应该监视队列的大小,以检查是否有队列大小为0的时间。

如果是这种情况,我建议您将线程流程移动到图表中,tensorflow作为允许批量加载的一些不错的mecanismes(您的加载批次应该比您的训练批次更大,以最大化您的加载效率,我personnaly在CPU上的线程中使用训练批次128和加载批次1024)非常有效。此外,你应该把你的队列放在CPU上并给它一个很大的最大大小,你将能够利用大容量的RAM内存(我总是在RAM中加载超过16000个图像,等待训练)。

如果您仍有麻烦,请查看tensorflow的性能指南: https://www.tensorflow.org/performance/performance_guide