我正密切关注Imagenet分布式TF列车示例。
当我在2个不同的工作人员上运行此示例时,我无法理解数据的分布情况如何?从理论上讲,不同的工人应该看到数据的不同部分。此外,代码的哪一部分告诉参数在参数服务器上传递?就像在multi-gpu示例中一样,有一个明确的部分用于' cpu:0'。
答案 0 :(得分:4)
不同的工作人员通过从单个预处理图像队列中取出迷你批量图像来查看数据的不同部分。为了详细说明,在用于训练Imagenet模型的分布式设置中,输入图像由多个线程预处理,并且预处理的图像存储在单个RandomShuffleQueue
中。您可以在this文件中查找tf.RandomShuffleQueue
,了解这是如何完成的。多个工人被组织为“初始塔”。并且每个塔从同一队列中出列一小批图像,从而获得输入的不同部分。图片here回答了问题的第二部分。在this文件中查找slim.variables.VariableDeviceChooser
。那里的逻辑确保将Variable
个对象均匀地分配给充当参数服务器的工作者。进行实际培训的所有其他工作人员在步骤开始时获取变量,并在步骤结束时更新它们。