2017-10-10 109 views
0

看我的代碼中寫道:圖間複製的分佈式tensorflow?

import tensorflow as tf 


tf.flags.DEFINE_string('job_name', 'ps', 'worker or ps') 
tf.flags.DEFINE_integer('task_index', 0, 'task id') 
FLAGS = tf.flags.FLAGS 

host = '127.0.0.1:' 
cluster = {"ps": [host+'2222'], 
      "worker": [host+'2223', host+'2224']} 
clusterspec = tf.train.ClusterSpec(cluster) 

server = tf.train.Server(cluster, 
         job_name=FLAGS.job_name, 
         task_index=FLAGS.task_index) 

def print_fn(): 
    print('job_name: %s, task_index: %d' % (FLAGS.job_name, FLAGS.task_index)) 


if FLAGS.job_name == 'ps': 
    server.join() 
elif FLAGS.job_name == 'worker': 
    with tf.device(tf.train.replica_device_setter(
     worker_device="/job:worker/task:%d" % FLAGS.task_index, 
     cluster=cluster)): 

     a = tf.Variable(tf.zeros([]), name='a') 
     b = tf.Variable(tf.zeros([]), name='b') 
     op = tf.add(a, b) 
     print(a.device) 
     print(b.device) 
     print(op.device) 
     print(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)) 
print_fn() 

當我運行在cmdpython distributed_replicas.py --job_name=worker --task_index=0,但在此之前運行python distributed_replicas.py --job_name=ps --task_index=0,該程序也適用。 a.deviceb.device都是/job:ps/task:0,但ps server不啓動,變量ab如何存儲在ps server?並且tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)也包含變量ab,這意味着ab創建在/job:worker/task:0,雖然他們的設備是/job:ps/task:0,所以怎麼了?在哪裏ab產生的?

回答

0

這是預期的行爲。至此,在您的代碼中,您只創建了一個圖表,該圖表不需要/關心作業即可啓動並運行。

創建一個會話(或會話的任何變化)後,您會遇到的問題。

點擊此處瞭解詳情: https://www.tensorflow.org/extend/architecture

+0

它編碼創建分佈式'master'的和分區圖?這是否意味着每個「工作服務器」上的圖形都將被分區?這是否意味着每個'worker server'都會讓接收節點和所有'worker server'都會從'ps server'接收相同的參數? – gaussclb

+0

一般而言,萬事達(哪個客戶端被連接在創建會話時向服務器)將創建的分區的圖形,並將其發送到其他服務器(服務器由一個新的會話或tf.train.Server創建任一)。 – xldrx

+0

當使用PS架構中,所有的工人有歐普的Recv在前進的開始通過從一個或多個的PS讀取數據和發送op將向後傳遞期間更新發送回PS。 – xldrx