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

最佳答案

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

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

  • 将批处理大小增加N倍,其中N是GPU的数量。
  • 将对cifar10.distorted_inputs()的调用移出cifar10.tower_loss()并移至loop over GPUs之外。
  • 沿第0(批次)维度划分从images返回的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)
    
  • 修改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])
    
  • 关于tensorflow - Tensorflow:多GPU单输入队列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34273951/

    10-12 05:48