Neural network tensorflow将训练数据存储在GPU内存中

Neural network tensorflow将训练数据存储在GPU内存中,neural-network,tensorflow,theano,deep-learning,Neural Network,Tensorflow,Theano,Deep Learning,我对tensorflow很陌生。我曾经使用theano进行深度学习发展。我注意到这两者之间的区别,即输入数据可以存储在哪里 在Theano中,它支持共享变量将输入数据存储在GPU内存中,以减少CPU和GPU之间的数据传输 在tensorflow中,我们需要将数据输入占位符,数据可以来自CPU内存或文件 我的问题是:是否可以将输入数据存储在tensorflow的GPU内存中?或者它已经用某种神奇的方式做到了 谢谢。如果您的数据适合GPU,您可以将其加载到GPU上的常量中,例如从numpy阵列: w

我对tensorflow很陌生。我曾经使用theano进行深度学习发展。我注意到这两者之间的区别,即输入数据可以存储在哪里

在Theano中,它支持共享变量将输入数据存储在GPU内存中,以减少CPU和GPU之间的数据传输

在tensorflow中,我们需要将数据输入占位符,数据可以来自CPU内存或文件

我的问题是:是否可以将输入数据存储在tensorflow的GPU内存中?或者它已经用某种神奇的方式做到了


谢谢。

如果您的数据适合GPU,您可以将其加载到GPU上的常量中,例如从numpy阵列:

with tf.device('/gpu:0'):
  tensorflow_dataset = tf.constant(numpy_dataset)
提取小批量的一种方法是在每一步对该阵列进行切片,而不是使用以下方法进行馈送:


围绕这个主题有许多可能的变化,包括使用队列将数据动态预取到GPU。

正如前面所指出的,这是可能的,但在投入太多精力之前,请确保它确实有用。至少在目前,并不是每个操作都有GPU支持,没有这种支持的操作列表包括一些常见的批处理和洗牌操作。如果处理的第一阶段是将数据移动到CPU,那么将数据放在GPU上可能没有任何好处

在尝试重构要在GPU存储上使用的代码之前,请至少尝试以下操作之一:

1) 使用设备放置日志启动会话,以记录在哪些设备上执行的操作:

config = tf.ConfigProto(log_device_placement=True)
sess = tf.Session(config=config)

2) 通过将图形的定义放入带有tf.device('/GPU:0'):块的
中,尝试手动将图形放置在GPU上。如果GPU不支持ops,这将引发异常。

这里有一个完整的例子--@YaroslavBulatov谢谢@zwlayer--这里是到ConvNet基准的链接--。另外,我将Torch lbfgs.lua示例脚本移植到TensorFlow,并使其在全尺寸批处理中运行得更快,下面是一个比较--。在较小的批量上匹配性能更难——因为TensorFlow旨在扩展到分布式系统/未来的硬件芯片,因此存在多个级别的间接寻址,其中一些恒定的开销在微小的计算中占主导地位。也就是说,在TF中,将2个数字相乘的脚本的速度是TF的1000倍numpy@YaroslavBulatov我知道这是一个老问题,但在您链接到的第一个示例中打开
log\u device\u placement
会显示
tf.train.slice\u producer
生成的排队操作驻留在CPU上。在CPU上对片进行排队似乎否定了将数据存储在GPU上的优势,因为片将被传输到CPU并返回。我是不是遗漏了什么?我明白了。这似乎是一种不常见的情况,通常数据读取不是瓶颈,所以数据非常依赖于cpuThank!我会调查的。
config = tf.ConfigProto(log_device_placement=True)
sess = tf.Session(config=config)