2017-01-09 5 views
0

複数のマシン、複数のGPUでテンソルフローを実行します。最初のステップとして、分散Tensorflowがsess.run()でスタックしています

ベローはsess.run()stucks

import tensorflow as tf 
cluster = tf.train.ClusterSpec({"local": ["localhost:2222", "localhost:2223"]}) 
server = tf.train.Server(cluster, job_name="local", task_index=0) 
a = tf.constant(8) 
b = tf.constant(9) 
sess = tf.Session('grpc://localhost:2222') 

すべてはここまで正常に動作している後行です(tensorflowチュートリアルhttps://www.tensorflow.org/how_tos/distributed/以下)単一マシン上の分散tensorflowを試したが、とき私はsess.run()を実行しています。

sess.run(tf.mul(a,b)) 

既に誰かが分散型テンソルフローで作業している場合は、解決策やその他のチュートリアルをうまく教えてください。

答えて

2

デフォルトでは、Distributed TensorFlowは、tf.train.ClusterSpecで指定されたすべてのサーバーが起動するまでブロックします。これは、サーバーとの最初の対話中に発生します。これは通常、最初のsess.run()コールになります。したがって、localhost:2223でリッスンしているサーバーも起動していない場合、TensorFlowはユーザーが行うまでブロックします。

は、あなたの後の目標に応じて、この問題にいくつかの解決策があります。

  1. localhost:2223上でサーバを起動し

    。あなたはtf.Sessionようにセッションのみの使用を作成するときに、「デバイスフィルタ」を指定し

    import tensorflow as tf 
    cluster = tf.train.ClusterSpec({"local": ["localhost:2222"]}) 
    server = tf.train.Server(cluster, job_name="local", task_index=0) 
    # ... 
    
  2. :オリジナルtf.train.ClusterSpecから

    import tensorflow as tf 
    cluster = tf.train.ClusterSpec({"local": ["localhost:2222", "localhost:2223"]}) 
    server = tf.train.Server(cluster, job_name="local", task_index=1) 
    server.join() # Wait forever for incoming connections. 
    
  3. 削除タスク1:別のプロセスでは、次のスクリプトを実行します。タスク0。

    # ... 
    sess = tf.Session("grpc://localhost:2222", 
            config=tf.ConfigProto(device_filters=["/job:local/task:0"])) 
    
関連する問題