如何使tf.gradients()函数在多个gpu中工作?

时间:2017-07-13 03:35:01

标签: tensorflow tensorflow-gpu

由于渐变会出现“内存不足”错误,如何在多个gpus中运行渐变功能?

    with tf.device('gpu:1'):
        trainable_variables = tf.trainable_variables()
        grads = tf.gradients(self.loss, trainable_variables)

    with tf.device('/gpu:2'):
        var1=trainable_variables[60:107]
        grad1=tf.gradients(self.loss, var1)
    with tf.device('/gpu:3'):
        var2=trainable_variables[57:107]
        grad2=tf.gradients(self.loss, var2)
    with tf.device('/gpu:3'):
        optimizer = tf.train.RMSPropOptimizer(
            self.lrn_rate,
            decay=0.9,
            momentum=0.9,
            epsilon=1.0)
        apply_op1 = optimizer.apply_gradients(
            zip(grads, trainable_variables),
            global_step=self.global_step, name='train_step')

上面的代码只在gpu:1中运行,因为渐变\或gradients_1 \ namespace只在gpu:1中退出,这怎么能在多个gpu中运行?

1 个答案:

答案 0 :(得分:0)

没关系,有两个解决方案: 1.使用这种代码,测试不同范围的内存。 2.重构gradient()函数,在gradient()函数中使用device(),使变量在不同的gpus中初始化。