我正在关注此链接以创建分布式异步多gpu培训 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/dist_test/python/mnist_replica.py
每10个培训步骤我打印出具有损失值,全局步长值等的培训日志。但是我在日志中发现有时两个工人打印出相同的全局步骤(从下面的日志中可以看到),I没想到会发生这种情况。
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
谁知道为什么会这样?
谢谢!
答案 0 :(得分:1)
我相信在这个例子中会发生以下情况。
在参数服务器上创建global_step
变量。每个工人在启动时,将其与所有其他变量一起使用。每个worker都有一个优化器,在运行时,计算渐变和全局步的增量。渐变和增量操作被发送到参数服务器。这些操作在ps上执行,worker获取结果值。
在此设置中,如果您不选择同步培训,您几乎可以看到工作人员。如果两个工作人员同时发送更新,他们都可以获得global_step
的相同结果值。