Распределенная среда выполнения Tensorflow: где работают операции обновления переменных? - PullRequest
0 голосов
/ 19 декабря 2018

Как все мы знаем, TensorFlow Distributed Runtime позволяет легко обмениваться переменными между пс и работниками.Но я удивляюсь такой ситуации:

Мы объявляем переменные в ps: 0, но обновляем их на worker: 0, используя assign_add, где будет работать эта операция (assign_add)?

По моему мнению, в TensorFlow есть два возможных способа.

Кандидат 1: Поскольку переменная counter находится в узле ps, поэтому рабочий отправит 1 на пс и выполнить assign_add(1) в пс .

Кандидат 2: Поскольку assign_add(1) выполняется на сеансе работника, таким образом, работниквытащите переменную counter из ps, обновите ее, запустив op assign_add(1), и отправьте ее обратно в ps.

(еще один вопрос: является ли последний шаг в Candidate 2, который отправляет его обратно в ps, необязательным?)

# ...
if FLAGS.job_name == 'ps':
    with tf.device('/job:ps/task:0'):
        counter = tf.Variable(0, name='counter', trainable=False)
    with tf.Session(server.target):
        sess.run(tf.global_variables_initializer())

elif FLAGS.job_name == 'worker':

    with tf.device('/job:ps/task:0'):
        counter = tf.Variable(0, name='counter', trainable=False)

    with tf.Session(server.target):
      sess.run(counter.assign_add(1))

Добро пожаловать в ваши советы, которые помогут мне более детально понять распределенный Tensorflow :)

...