我读过Distributed Tensorflow Doc,并提到在异步培训中,
图表的每个副本都有一个独立的训练循环,无需协调即可执行。
据我所知,如果我们将参数服务器与数据并行架构结合使用,则意味着每个工作人员都会计算渐变并更新自己的权重,而无需关心分布式训练神经网络的其他工作人员更新。由于所有权重都在参数服务器(ps)上共享,我认为ps仍然必须以某种方式协调(或聚合)来自所有工作者的权重更新。我想知道聚合在异步训练中是如何工作的。或者更一般地说,异步培训在分布式Tensorflow中如何工作?
答案 0 :(得分:24)
当您在Distributed TensorFlow中异步训练时,特定工作人员会执行以下操作:
工作人员从PS任务并行读取所有共享模型参数,并将它们复制到工作人员任务。这些读取与任何并发写入不协调,并且不获取锁定:特别是工作者可能会看到来自一个或多个其他工作者的部分更新(例如,可能已应用来自另一个工作者的更新的子集,或者元素的子集在变量中可能已经更新)。
工作人员根据一批输入数据及其在步骤1中读取的参数值在本地计算渐变。
工作人员将每个变量的渐变发送到适当的PS任务,并使用确定的更新规则将渐变应用于各自的变量通过优化算法(例如SGD,具有Momentum的SGD,Adagrad,Adam等)。更新规则通常使用(近似)可交换操作,因此它们可以独立应用于来自每个工作者的更新,并且每个变量的状态将是所接收更新序列的运行聚合。 / p>
在异步训练中,同时应用来自worker的每个更新,如果在初始化相应的优化器(例如tf.train.GradientDescentOptimizer
)时设置了可选的use_locking=True
标志,则可以稍微协调更新。但请注意,此处的锁定仅为两个并发更新提供互斥,并且(如上所述)读取不获取锁定;锁定不会在整个更新集中提供原子性。
(相比之下,在同步训练中,像tf.train.SyncReplicasOptimizer
这样的实用程序将确保所有工作人员为每个模型参数读取相同的,最新的值;并且同步的所有更新步骤在应用于基础变量之前进行聚合。为此,工作人员通过屏障进行同步,屏障在发送梯度更新后输入,并在聚合更新应用于所有变量后离开。)
答案 1 :(得分:2)
在异步训练中,工人之间没有权重同步。权重存储在参数服务器上。每个工作人员彼此独立地加载和更改共享权重。这样,如果一个工人比其他工人更快地完成迭代,则继续下一次迭代而不等待。工作者只与共享参数服务器交互,不互相交互。
总的来说,它可以(取决于任务)显着加快计算速度。但是,结果有时比使用较慢的同步更新获得的结果更差。
答案 2 :(得分:1)
查看链接到的文档中的示例:
with tf.device("/job:ps/task:0"):
weights_1 = tf.Variable(...)
biases_1 = tf.Variable(...)
with tf.device("/job:ps/task:1"):
weights_2 = tf.Variable(...)
biases_2 = tf.Variable(...)
with tf.device("/job:worker/task:7"):
input, labels = ...
layer_1 = tf.nn.relu(tf.matmul(input, weights_1) + biases_1)
logits = tf.nn.relu(tf.matmul(layer_1, weights_2) + biases_2)
# ...
train_op = ...
with tf.Session("grpc://worker7.example.com:2222") as sess:
for _ in range(10000):
sess.run(train_op)
您可以看到培训分布在三台机器上,这三台机器共享相同重量的副本,但正如下面示例所示:
在上面的示例中,变量是在ps作业中的两个任务上创建的,模型的计算密集型部分是在worker作业中创建的。 TensorFlow将在作业之间插入适当的数据传输(从ps到worker用于正向传递,从worker到ps用于应用渐变)。
换句话说,一个gpu用于计算正向传递,然后将结果传输到其他两台机器,而其他每台机器计算一部分权重的反向传播,然后将结果发送给其他机器,所以他们都可以适当更新他们的重量。
GPU用于加速矩阵乘法和并行数学运算,这对于正向传播和反向传播都是非常密集的。所以分布式训练只是意味着你在许多GPU上分配这些操作,模型仍然在机器之间同步,但现在可以并行计算不同权重的反向传播,并且可以计算不同小批量的前向传递。与前一个小批量的backprop同时仍在计算中。分布式培训并不意味着您在每台机器上都拥有完全独立的模型和权重。