2016-11-12 1 views
0

Je forme mon premier modèle multi-gpu en utilisant tensorflow. Comme indiqué dans le tutoriel, les variables sont épinglées sur la CPU et les opérations sur chaque GPU en utilisant name_scope. Comme je suis en train d'effectuer un petit test et de consigner le placement du périphérique, je peux voir que les opérations sont placées sur le GPU correspondant avec le préfixe TOWER_1/TOWER_0, mais les variables ne sont pas placées sur le CPU. Ai-je manqué quelque chose ou ai-je mal compris le journal d'emplacement de l'appareil?Tensorflow: Pinning Variables to CPU dans l'entraînement Multigpu ne fonctionne pas

Fixation du code de test et est ici les device placement log

Merci

CODE D'ESSAI

with tf.device('cpu:0'): 
    imgPath=tf.placeholder(tf.string) 
    imageString=tf.read_file(imgPath) 
    imageJpeg=tf.image.decode_jpeg(imageString, channels=3) 
    inputImage=tf.image.resize_images(imageJpeg, [299,299]) 
    inputs = tf.expand_dims(inputImage, 0) 
    for i in range(2): 
     with tf.device('/gpu:%d' % i): 
      with tf.name_scope('%s_%d' % ('TOWER', i)) as scope: 
       with slim.arg_scope([tf.contrib.framework.python.ops.variables.variable], device='/cpu:0'): 
        with slim.arg_scope(inception_v3.inception_v3_arg_scope()): 
         logits,endpoints = inception_v3.inception_v3(inputs, num_classes=1001, is_training=False) 
       tf.get_variable_scope().reuse_variables() 

with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)) as sess: 
    tf.initialize_all_variables().run() 
exit(0) 

EDIT Fondamentalement, la ligne « avec slim.arg_scope ([tf.contrib .framework.python.ops.variables.variable], device = '/ cpu: 0'): 'devrait forcer toutes les variables sur le cpu, mais ils sont créés d sur 'gpu: 0'

+0

Eh bien, jusqu'à ce que les variables 'expand_dims' sont placés dans' cpu', comme vous avez demandé avec 'avec tf.device ('cpu: 0'):'. Toutes les variables connectées au modèle 'inception' sont placées dans' gpu'. – sygi

+0

merci, je comprends, quel est le rôle de 'avec slim.arg_scope ([tf.contrib.framework.python.ops.variables.variable], device ='/cpu: 0 '):' si –

+0

n'est pas 'allow_soft_placement' interférant? Si vous le définissez sur False, il devrait le placer là où vous l'aviez dit (ou échouer). – drpng

Répondre

0

Essayez avec:

with slim.arg_scope([slim.model_variable, slim.variable], device='/cpu:0'): 

Ceci a été pris de: model_deploy