了解tensorflow队列和cpu< - > gpu转移

时间:2016-08-03 19:04:44

标签: memory-management gpu tensorflow

在阅读了这个github问题之后,我觉得我对队列的理解缺少了一些东西:

https://github.com/tensorflow/tensorflow/issues/3009

我认为在将数据加载到队列中时,它会在最后一批计算时被预先传输到GPU,因此几乎没有带宽瓶颈,假设计算时间比加载下一个时间长批量。

但是上面的链接表明从队列到图表(numpy< - > TF)有一个昂贵的副本,并且将文件加载到图表中并在那里进行预处理会更快。但这对我来说没有意义。如果我从文件加载一个原始numpy数组的256x256图像,为什么重要?如果有的话,我认为numpy版本更快。我错过了什么?

2 个答案:

答案 0 :(得分:4)

没有GPU队列的实现,因此它只将内容加载到主内存中,并且没有异步预取GPU。您可以使用固定到if ($(window).width() < 1000) { alert('Less than 1000'); } else { alert('More than 1000'); }

的变量来制作类似基于GPU的队列

答案 1 :(得分:2)

documentation表示可以将队列固定到设备:

  

N.B。队列方法(例如q.enqueue(...))必须在与队列相同的设备上运行。创建这些操作时,将忽略不兼容的设备放置指令。

但是上面对我来说意味着任何一个试图入队的变量应该已经在GPU上了。

This评论表明可以使用tf.identity执行预取。