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