2016-08-12 9 views
1

私はTensorflowで分散seq2seqモデルを開始しようとしています。これは元の単一プロセスseq2seqモデルです。 テンソルフロー分散チュートリアルhereに従ってクラスタ(1ps、3人)を設定しました。テンソルフローは永久にseq2seqを分散

しかし、すべての労働者が永遠に立ち往生している、と出力同じプーリングログ情報:

ps_hosts = ["9.91.9.129:2222"] 
    worker_hosts = ["9.91.9.130:2223", "9.91.9.130:2224", "9.91.9.130:2225"] 
    #worker_hosts = ["9.91.9.130:2223"] 

    cluster = tf.train.ClusterSpec({"ps":ps_hosts, "worker":worker_hosts}) 
    server = tf.train.Server(cluster, 
          job_name=FLAGS.job_name, 
          task_index=FLAGS.task_index) 
    if FLAGS.job_name == "ps": 
     server.join() 
    elif FLAGS.job_name == "worker": 
     # Worker server 
     is_chief = (FLAGS.task_index == 0)  
     gpu_num = FLAGS.task_index 
     with tf.Graph().as_default(): 
     with tf.device(tf.train.replica_device_setter(cluster=cluster, 
      worker_device="/job:worker/task:%d/gpu:%d" % (FLAGS.task_index, gpu_num))): 

そして、私が使用:これは、translate.pyのクラスタの設定です

start running session 
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:244] PoolAllocator: After 7623 get requests, put_count=3649 evicted_count=1000 eviction_rate=0.274048 and unsatisfied allocation rate=0.665617 
I tensorflow/core/common_runtime/gpu/pool_allocator.cc:256] Raising pool_size_limit_ from 100 to 110 

tf.train.SyncReplicasOptimizer SyncTrainingを実装します。

これは私のseq2seq_model.pyの一部です:Tensorflowの人々が正しくの経験を共有し、まだ準備ができていないように思えこれは私の完全なPythonのコードは[こちら]

答えて

1

ある

# Gradients and SGD update operation for training the model. 
params = tf.trainable_variables() 
if not forward_only: 
    self.gradient_norms = [] 
    self.updates = [] 
    opt = tf.train.GradientDescentOptimizer(self.learning_rate) 
    opt = tf.train.SyncReplicasOptimizer(
    opt, 
    replicas_to_aggregate=num_workers, 
    replica_id=task_index, 
    total_num_replicas=num_workers)  

    for b in xrange(len(buckets)): 
    gradients = tf.gradients(self.losses[b], params) 
    clipped_gradients, norm = tf.clip_by_global_norm(gradients, 
                max_gradient_norm) 
    self.gradient_norms.append(norm) 
    self.updates.append(opt.apply_gradients(
      zip(clipped_gradients, params), global_step=self.global_step)) 


self.init_tokens_op = opt.get_init_tokens_op 
self.chief_queue_runners = [opt.get_chief_queue_runner] 
self.saver = tf.train.Saver(tf.all_variables()) 

クラスタ上でコードを実行している。これまでの包括的な文書は、ソースコード内でのみ見つけることができます。

あなたはSyncReplicasOptimizerの建設後、この実行する必要がSyncReplicasOptimizer.pyに応じてバージョン0.11の通り:

init_token_op = optimizer.get_init_tokens_op() 
chief_queue_runner = optimizer.get_chief_queue_runner() 

をそしてあなたのセッションは、スーパーバイザで構成された後にこれを実行します。

if is_chief: 
    sess.run(init_token_op) 
    sv.start_queue_runners(sess, [chief_queue_runner]) 

SyncReplicasOptimizerV2で0.12で導入されました。このコードは十分ではないかもしれませんので、使用しているバージョンのソースコードを参照してください。

関連する問題