Tensorflow:多GPU单输入队列

时间:2015-12-14 18:20:20

标签: tensorflow

tensorflow's cifar10 multi-GPU example中,似乎(如果我错了,请纠正我)每个GPU创建一个训练图像队列。 “正确”的做事方式不是要让所有塔都有一个队列吗?如果是,是否有可用的共享队列示例?

1 个答案:

答案 0 :(得分:13)

CIDAR-10模型的代码使用多个输入队列(通过cifar10.tower_loss()多次调用cifar10.distorted_inputs()),这是正确的。

在GPU之间使用共享队列的最简单方法是执行以下操作:

  1. 将批量大小增加N倍,其中N是GPU的数量。

  2. 将来自cifar10.distorted_inputs()的号码移至loop over GPUs之外的cifar10.tower_loss()

  3. 拆分从images沿第0个(批量)尺寸返回的labelscifar10.distorted_inputs()张量:

    images, labels = cifar10.distorted_inputs()
    split_images = tf.split(0, FLAGS.num_gpus, images)
    split_labels = tf.split(0, FLAGS.num_gpus, labels)
    
  4. 修改cifar10.tower_loss()以获取imageslabels个参数,并按如下方式调用它:

    for i in xrange(FLAGS.num_gpus):
      with tf.device('/gpu:%d' % i):
        with tf.name_scope('%s_%d' % (cifar10.TOWER_NAME, i)) as scope:
    
          loss = tower_loss(scope, split_images[i], split_labels[i])