首页 > 解决方案 > tensorflow 分布式异步训练:两个工作人员打印出相同全局步骤的日志

问题描述

我正在按照此链接创建分布式异步多 GPU 培训 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/dist_test/python/mnist_replica.py

每 10 个训练步骤我打印出带有损失值、全局步骤值等的训练日志。但是我在日志中发现有时两个工作人员会打印出相同的全局步骤(从下面的日志中可以看出),我没想到这会发生。

expr_dist_async_b32.worker1.log:2018-06-12 00:09:59 Worker 1: step 13 (global step 50), sample prob 0.100000, train loss = 3.033742, lrate=0.000107, norm=1.311264
expr_dist_async_b32.worker2.log:2018-06-12 00:09:59 Worker 2: step 13 (global step 50), sample prob 0.100000, train loss = 3.060724, lrate=0.000107, norm=1.311264
expr_dist_async_b32.worker3.log:2018-06-12 00:10:08 Worker 3: step 16 (global step 60), sample prob 0.100000, train loss = 2.913497, lrate=0.000108, norm=1.034301
expr_dist_async_b32.worker2.log:2018-06-12 00:10:15 Worker 2: step 18 (global step 70), sample prob 0.100000, train loss = 2.913340, lrate=0.000109, norm=0.895563
expr_dist_async_b32.worker3.log:2018-06-12 00:10:25 Worker 3: step 21 (global step 80), sample prob 0.100000, train loss = 2.924278, lrate=0.000111, norm=1.006683

有谁知道为什么会这样?

谢谢!

标签: tensorflow

解决方案


我相信在这个例子中会发生以下情况。

global_step变量是在参数服务器上创建的。每个工人在启动时,将其与所有其他变量一起获取。每个工作人员都有一个优化器,在运行时计算梯度和全局步长的增量。梯度和增量操作被发送到参数服务器。这些操作在 ps 上执行,worker 得到结果值。

在此设置中,如果您不选择同步训练,您几乎可以在工作人员身上看到任何东西。如果两个工人同时发送他们的更新,他们都可以得到相同的结果值global_step


推荐阅读