未使用的并行化潜能

2024-09-30 18:26:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用从tf.train.shuffle_batch调用返回的队列来训练TensorFlow。我假设TF在GPU上对当前批执行计算时会预取下一批。也就是说,我想象了这样的流动

  • 在CPU上加载批处理A
  • 在GPU上使用批处理A,而在CPU上加载批处理B
  • 在GPU上使用批处理B,而在CPU上加载批处理C
  • 。。。你知道吗

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

Trace

对于大多数QueueDequeueMany操作,GPU是空闲的。你知道吗


像我想象的那样,张量流是否可能,如果可能的话:我做错了什么?你知道吗


Tags: gpu队列tftensorflowbatch情况traincpu
2条回答

我不认为TensorFlow目前正在进行这种优化。值得提交一个功能请求(TensorFlow github问题)。这种优化的一个潜在成本是增加内存占用,以便为下一批进行额外的缓冲。你知道吗

问题是FIFOQueue只是CPU,所以预取只能在CPU上工作。 但是,您可以通过创建GPU变量并并行地将FIFO队列中的内容复制到GPU变量上,然后依靠这些变量而不是队列来进行GPU输入,来实现自己的预取。下面是Tim Zaman对这个想法的一个实现:

https://github.com/tensorflow/tensorflow/issues/5722#issuecomment-266297116

相关问题 更多 >