【问题标题】:Is there a way to parallelize stacked RNNs over multiple GPUs in TensorFlow?有没有办法在 TensorFlow 中的多个 GPU 上并行化堆叠的 RNN?
【发布时间】:2016-08-29 14:21:01
【问题描述】:

是否可以获取tf.scan 操作的输出并将其直接流式传输到不同的 GPU,从而有效地在两个 GPU 上并行运行两个堆叠的 RNN?像这样的:

cell1 = tf.nn.rnn_cell.MultiRNNCell(..)
cell2 = tf.nn.rnn_cell.MultiRNNCell(..)

with tf.device("/gpu:0"):
  ys1 = tf.scan(lambda a, x: cell1(x, a[1]), inputs,
          initializer=(tf.zeros([batch_size, state_size]), init_state))

with tf.device("/gpu:1"):
  ys2 = tf.scan(lambda a, x: cell2(x, a[1]), ys1,
          initializer=(tf.zeros([batch_size, state_size]), init_state))

TensorFlow 会自动处理该优化,还是会阻止图形流直到列表 ys1 最终确定。

【问题讨论】:

标签: parallel-processing tensorflow recurrent-neural-network


【解决方案1】:

不幸的是,tf.scan 在输出处有一个“边界”,所有迭代都必须在输出张量被下一个操作读取之前完成。但是,您可以在不同的 GPU 上运行不同级别的 lstm 堆栈,并在一次扫描中获得帧并行性。编写您自己的 MultiRNNCell 版本,为每个 lstm 层使用单独的设备。

您可能还想使用 tf.nn.dynamic_rnn 而不是 scan。

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2018-05-25
    • 2016-07-07
    相关资源
    最近更新 更多