由于渐变会出现“内存不足”错误,如何在多个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中运行?
答案 0 :(得分:0)
没关系,有两个解决方案: 1.使用这种代码,测试不同范围的内存。 2.重构gradient()函数,在gradient()函数中使用device(),使变量在不同的gpus中初始化。