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