在tensorflow的cifar10多GPU示例中,似乎(如果我错了,请纠正我)每个GPU创建一个训练图像队列."正确"的做事方式不是要让所有塔都有一个队列吗?如果是,是否有可用的共享队列示例?
你是对的,CIFAR-10模型的代码使用多个输入队列(通过多次调用cifar10.distorted_inputs()
via cifar10.tower_loss()
).
在GPU之间使用共享队列的最简单方法是执行以下操作:
将批量大小增加N倍,其中N是GPU的数量.
通过GPU将呼叫cifar10.distorted_inputs()
移出循环cifar10.tower_loss()
外部.
拆分从第0个(批处理)维度返回的images
和labels
张量cifar10.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()
为take images
和labels
arguments,并按如下方式调用它:
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])