Python 分布式TensorFlow:在低级别,工人和ps在培训期间如何相互作用?
我正在研究分布式TensorFlow如何处理其分布式计算以复制其体系结构。我需要在底层理解工人所做的操作和PS所做的操作,我不能仅仅依靠python API的正确性 PS(参数服务器)在内存中保存权重(即 参数)并接收渐变,运行我在中编写的更新步骤 上面的代码。每次它从一个窗口接收渐变时都会执行此操作 工人 另一方面,一个worker会查找 在PS中加权,在本地制作副本,运行正向和反向 在一批数据上向后传递网络并获取新数据 梯度,然后发送回PS 因此,工作人员似乎计算梯度,然后将梯度发送给PS,PS应用梯度更新权重。但是如果我查看在中找到的代码,我会发现在工作者代码中有一个对方法minimize()的调用 工作人员似乎执行计算和应用操作。然后工人们会向PS发送什么样的信息?他们可能会发送已经通过应用渐变更新的权重?如果PS收到所有权重,它如何合并它们Python 分布式TensorFlow:在低级别,工人和ps在培训期间如何相互作用?,python,tensorflow,distributed,Python,Tensorflow,Distributed,我正在研究分布式TensorFlow如何处理其分布式计算以复制其体系结构。我需要在底层理解工人所做的操作和PS所做的操作,我不能仅仅依靠python API的正确性 PS(参数服务器)在内存中保存权重(即 参数)并接收渐变,运行我在中编写的更新步骤 上面的代码。每次它从一个窗口接收渐变时都会执行此操作 工人 另一方面,一个worker会查找 在PS中加权,在本地制作副本,运行正向和反向 在一批数据上向后传递网络并获取新数据 梯度,然后发送回PS 因此,工作人员似乎计算梯度,然后将梯度发送给PS,
if FLAGS.job_name == "ps":
server.join()
elif FLAGS.job_name == "worker":
# Assigns ops to the local worker by default.
with tf.device(tf.train.replica_device_setter(
worker_device="/job:worker/task:%d" % FLAGS.task_index,
cluster=cluster)):
# Build model...
loss = ...
global_step = tf.contrib.framework.get_or_create_global_step()
train_op = tf.train.AdagradOptimizer(0.01).minimize(
loss, global_step=global_step) # < - - - - - - - - - HERE
def minimize(self, loss, global_step=None, var_list=None,
gate_gradients=GATE_OP, aggregation_method=None,
colocate_gradients_with_ops=False, name=None,
grad_loss=None):
grads_and_vars = self.compute_gradients(
loss, var_list=var_list, gate_gradients=gate_gradients,
aggregation_method=aggregation_method,
colocate_gradients_with_ops=colocate_gradients_with_ops,
grad_loss=grad_loss)
vars_with_grad = [v for g, v in grads_and_vars if g is not None]
if not vars_with_grad:
raise ValueError(
"No gradients provided for any variable, check your graph for ops"
" that do not support gradients, between variables %s and loss %s." %
([str(v) for _, v in grads_and_vars], loss))
return self.apply_gradients(grads_and_vars, global_step=global_step,
name=name)