张量流将训练数据存储在 GPU 内存上



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

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

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

我的问题是:是否可以将输入数据存储在GPU内存上以进行张量流? 还是已经以某种神奇的方式做到了?

谢谢。

如果你的数据适合 GPU,你可以从 numpy 数组中将其加载到 GPU 上的常量中:

with tf.device('/gpu:0'):
  tensorflow_dataset = tf.constant(numpy_dataset)

提取小批量的一种方法是在每一步对该数组进行切片,而不是使用 tf.slice 馈送它:

  batch = tf.slice(tensorflow_dataset, [index, 0], [batch_size, -1])

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

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

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

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

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

2) 尝试通过将图形定义放在with tf.device('/gpu:0'):块中来手动将图形放置在 GPU 上。如果操作不受 GPU 支持,这将引发异常。

最新更新