看我的代碼中寫道:圖間複製的分佈式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()
當我運行在cmd
python distributed_replicas.py --job_name=worker --task_index=0
,但在此之前運行python distributed_replicas.py --job_name=ps --task_index=0
,該程序也適用。 a.device
和b.device
都是/job:ps/task:0
,但ps server
不啓動,變量a
和b
如何存儲在ps server
?並且tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)
也包含變量a
和b
,這意味着a
和b
創建在/job:worker/task:0
,雖然他們的設備是/job:ps/task:0
,所以怎麼了?在哪裏a
和b
產生的?
它編碼創建分佈式'master'的和分區圖?這是否意味着每個「工作服務器」上的圖形都將被分區?這是否意味着每個'worker server'都會讓接收節點和所有'worker server'都會從'ps server'接收相同的參數? – gaussclb
一般而言,萬事達(哪個客戶端被連接在創建會話時向服務器)將創建的分區的圖形,並將其發送到其他服務器(服務器由一個新的會話或tf.train.Server創建任一)。 – xldrx
當使用PS架構中,所有的工人有歐普的Recv在前進的開始通過從一個或多個的PS讀取數據和發送op將向後傳遞期間更新發送回PS。 – xldrx