未使用的并行化潜力

时间:2016-12-27 10:55:57

标签: python tensorflow

我使用从tf.train.shuffle_batch调用返回的队列进行TensorFlow培训。我曾假设TF会在使用GPU上的当前批处理执行计算时预取下一批。即,我想象了这样的流程

  • 在CPU上加载批处理
  • 在GPU上使用批处理A,上加载批处理B
  • 时使用
  • 在GPU上使用批次B,上加载C上的批次C
  • ...

但是,查看跟踪输出,情况似乎并非如此:

Trace

对于大多数QueueDequeueMany操作,GPU处于空闲状态。

就像TensorFlow中我想象的那样,如果是这样的话:我做错了什么?

2 个答案:

答案 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问题)。这种优化的一个潜在成本是增加了内存占用,以便为下一批进行额外的缓冲。