2016-11-12 2 views
0

私はテンソルフローを使用して最初のマルチ-gpuモデルをトレーニングしています。 チュートリアルでは、変数はname_scopeを使用してすべてのGPUでCPUとopsに固定されています。Tensorflow:MultigpuトレーニングでCPUに変数を固定することができません

私は小さなテストを実行してデバイスの配置を記録しているので、TOWER_1/TOWER_0接頭辞付きのそれぞれのGPUにopsが配置されていることがわかりますが、変数はCPUに配置されていません。

何か不足していますか、デバイスの配置ログが間違っていますか?

device placement log

おかげ

テストコード

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 基本的slim.arg_scope伴い」([tf.contribはここにテストコードを取り付けると.framework.python.ops.variables.variable]、device = '/ cpu:0'): 'は、CPU上のすべての変数を強制するはずですが、

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

これはから取られた:上のD 'GPU:0' で

+0

さて、あなたが要求したとしてexpand_dims'は、cpu' 'に配置されている'までの変数'tf.device( 'cpu:0'):'を使用します。 '開始 'モデルに接続されたすべての変数は' gpu'に置かれます。 – sygi

+0

ありがとう、私は、slim.arg_scope([tf.contrib.framework.python.ops.variables.variable]、device = '/ cpu:0')の役割は何ですか: ' –

+0

はありませんが'allow_soft_placement'は干渉していますか? 'False'に設定した場合は、それを指定した場所(または失敗した場所)に配置する必要があります。 – drpng

答えて

関連する問題