我使用从tf.train.shuffle_batch
调用返回的队列进行TensorFlow培训。我曾假设TF会在使用GPU上的当前批处理执行计算时预取下一批。即,我想象了这样的流程
但是,查看跟踪输出,情况似乎并非如此:
对于大多数QueueDequeueMany
操作,GPU处于空闲状态。
就像TensorFlow中我想象的那样,如果是这样的话:我做错了什么?
答案 0 :(得分:1)
问题是FIFOQueue仅限CPU,因此预取仅适用于CPU。 但是,您可以通过创建GPU变量并将FIFO队列中的内容并行复制到GPU变量上,然后依靠这些变量而不是队列进行GPU输入来实现自己的预取。以下是Tim Zaman对这一想法的实现:
https://github.com/tensorflow/tensorflow/issues/5722#issuecomment-266297116
答案 1 :(得分:0)
我不认为TensorFlow目前正在进行此优化。值得提交功能请求(TensorFlow github问题)。这种优化的一个潜在成本是增加了内存占用,以便为下一批进行额外的缓冲。