使用Tensorflow训练网络时,我们如何最小化GPU的空闲时间?
要做到这一点: -
tf.RandomShuffleQueue
。我认为这比feed_dict
方法更有效。
但是,我仍然发现nvidia-smi
我的GPU仍然从100%
利用率转为0%
利用率,并经常回到100%
。
由于我的网络很大且数据集也很大12 million
,因此任何有关加速的富有成效的建议都会非常有用。
我认为直接从tf.Queue
读取数据比feed_dict
更正确吗?
注意:我使用的是12 GB Titan X GPU(Maxwell架构)
答案 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