2017-06-27 279 views
1

我创建了以下在本系列教程tensorflow 1.2.0多GPU的培训体系: https://github.com/tensorflow/tensorflow/blob/r0.10/tensorflow/models/image/cifar10/cifar10_multi_gpu_train.pytensorflow多GPU训练

创建多GPU版本之前,我能够在单一GPU贴合的64批次大小。我想如果我在上面的教程之后创建了一个多GPU版本的代码,我可以通过数据并行化来适应更多的批处理。我希望使用4个GPUS,批量大小为64,但是我面临内存不足的问题。我只能使用32批次大小在使用的64批次大小只有4个GPU时使用2个GPU的并行数据使用多个GPU的两种情况,我得到以下错误:

tensorflow.python.framework.errors_impl.InternalError: Dst tensor is not initialized. 

在一些Google上,我发现这个错误发生在GPU内存不足时。我不明白为什么会发生这种情况。我的机器上有8个nvidia泰坦卡,每个卡都有12个内存。我不明白为什么当我可以在一个GPU上适合64位的批处理大小时,我不能在两个以上的GPUS上适应64位的同一批处理大小。为什么记忆变得饱和?在增加正在使用的GPUS数量时是否会增加一些开销?

回答

1

可以是它缺少变量范围在环路

with tf.variable_scope(tf.get_variable_scope()): 

     for i in xrange(FLAGS.num_gpus): 

      with tf.device('/gpu:%d' % i): 
+0

我使用的name_scope如在教程中指定的前定义。我不会错过范围,除非你说我应该用variable_scope替换name_scope? –