tensorflow - 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
有谁知道为什么会这样?
谢谢!
解决方案
我相信在这个例子中会发生以下情况。
该global_step
变量是在参数服务器上创建的。每个工人在启动时,将其与所有其他变量一起获取。每个工作人员都有一个优化器,在运行时计算梯度和全局步长的增量。梯度和增量操作被发送到参数服务器。这些操作在 ps 上执行,worker 得到结果值。
在此设置中,如果您不选择同步训练,您几乎可以在工作人员身上看到任何东西。如果两个工人同时发送他们的更新,他们都可以得到相同的结果值global_step
。
推荐阅读
- system-verilog - 使用队列或动态创建转换覆盖范围
- r - 找到带有通用字符 '[a,z]-\n' 的子字符串,并替换子字符串 '-\n' 的非通用部分
- c# - 您将如何在 RichTextBox 的代码中的特定文本的新行上添加新文本?
- api - Vue前端每次向Phalcon后端发送相同的请求,第二个失败,所以请求失败
- javascript - 需要一些帮助来解决这个循环
- javascript - 通过 redux/redux-thunk 发布到 mongoDB
- python - Python sort nested dictionaries by value descending
- java - Can't find any java examples of using the androidx navigation architecture for single activity using bottom navigation
- c - 如何避免系统设置的 EEPROM 结构中的全局变量?
- android - 使用 sharedPreference 通过两个活动传递数据