Tiempo de ejecución distribuido de Tensorflow: ¿dónde se ejecutan las operaciones de actualización de variables?

Como todos sabemos, TensorFlow Distributed Runtime nos permite compartir fácilmente Variables entre ps y workers. Pero me pregunto tal situación:

Declaramos Variables en ps: 0, pero lo actualizamos en worker: 0 usando assign_add, donde se ejecutará este op (assign_add)?

En mi opinión, hay dos formas de candidatos en TensorFlow.

Candidato 1: dado que la variable del counter está ubicada en el nodo ps , el trabajador enviará 1 a la ps, y realizará assign_add(1) en la ps .

Candidato 2: Dado que assign_add(1) se ejecuta en la sesión del trabajador, el trabajador extrae el counter variable del ps, y lo actualiza ejecutando op assign_add(1) , y lo envía de vuelta a ps.

(otra pregunta: si el último paso en Candidato 2 que lo envía a ps es opcional)

 # ... 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)) 

Bienvenido a sus consejos para que me ayuden a entender más distribuido Tensorflow distribuido 🙂