我使用从tf.train.shuffle_batch
调用返回的队列来训练TensorFlow。我假设TF在GPU上对当前批执行计算时会预取下一批。也就是说,我想象了这样的流动
- 在CPU上加载批处理A
- 在GPU上使用批处理A,而在CPU上加载批处理B
- 在GPU上使用批处理B,而在CPU上加载批处理C
- 。。。你知道吗
但是,从跟踪输出来看,情况似乎并非如此:
对于大多数QueueDequeueMany
操作,GPU是空闲的。你知道吗
像我想象的那样,张量流是否可能,如果可能的话:我做错了什么?你知道吗
Tags:
我不认为TensorFlow目前正在进行这种优化。值得提交一个功能请求(TensorFlow github问题)。这种优化的一个潜在成本是增加内存占用,以便为下一批进行额外的缓冲。你知道吗
问题是FIFOQueue只是CPU,所以预取只能在CPU上工作。 但是,您可以通过创建GPU变量并并行地将FIFO队列中的内容复制到GPU变量上,然后依靠这些变量而不是队列来进行GPU输入,来实现自己的预取。下面是Tim Zaman对这个想法的一个实现:
https://github.com/tensorflow/tensorflow/issues/5722#issuecomment-266297116
相关问题 更多 >
编程相关推荐