2017-07-13 1 views
0

Étant donné que les dégradés auront une erreur 'out of memory', comment puis-je exécuter la fonction de gradient dans plusieurs GPU?Comment faire pour que la fonction tf.gradients() fonctionne dans plusieurs gpu?

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') 

Le code ci-dessus ne fonctionne que dans gpu: 1, étant donné que les gradients \ ou gradients_1 \ espace de noms sort uniquement en gpu: 1, comment peut-il fonctionner dans plusieurs gpu?

Répondre

0

Peu importe, il existe deux solutions: 1.En utilisant ce style de code, tester la mémoire avec différents allant. 2.Reconstruire la fonction gradient(), en utilisant device() dans la fonction gradient(), initialise les variables dans différents gpus.