2017-04-19 64 views
1

当使用Tensorflow训练网络时,我们如何最小化GPU的空闲时间?使用TensorFlow时尽量减少GPU的空闲时间

要做到这一点: -

  1. 我用Python的多线程来预处理数据,并将其从TensorFlow拿着数据,其中饲料为tf.RandomShuffleQueue

我认为这会比feed_dict方法更有效率。

但是我仍然觉得做nvidia-smi我的GPU仍然100%利用去0%利用率和回100%经常。 由于我的网络很大,数据集也很大,所以任何关于加速的富有成效的建议都会非常有帮助。

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

注:我使用的是12 GB泰坦X GPU(麦克斯韦架构)

回答

0

你是在假设正确,通过队列进料比feed_dict更好,出于多种原因(主要是加载和预处理做了CPU,而不是主线程)。但是有一件事可以破坏这一点,即如果GPU消耗数据的速度比加载速度快。因此,您应该监视队列的大小,以检查队列大小为0的时间。

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

如果您仍然有麻烦,你应该检查tensorflow的性能指南: https://www.tensorflow.org/performance/performance_guide