要重现的文件:

training.py:此文件包含参数服务器和为使用同步分布式优化器(tf.train.SyncReplicasOptimizer)和培训主管而创建的工作程序的源代码 . run.sh:此文件启动了参数服务器和工作者 .

问题描述

最近,我尝试在集群上部署同步分布式TensorFlow培训 . 我按照教程和初始示例编写了自己的程序 . training.py遵循与官方示例相同的API用法 . 我通过localhost进行通信并将每个worker映射到只有一个GPU,从而使它能够在具有多个GPU的单台机器上运行 .

run.sh启动了三个进程 . 其中一个是参数服务器,其他是由图之间复制实现的两个工作者 . 我通过tf.train.Supervisor()创建了培训主管,以管理分布式培训中的多个会话以进行初始化和同步 .

我希望这两个 Worker 能够同步每个批次并在同一时期工作 . 然而,在 Worker 1之前启动的 Worker 0完成了整个训练集而没有等待 Worker 1.之后, Worker 0的过程完成了训练过程并正常退出而 Worker 1表现得像是落入死锁并在几个小时内保持接近0%的CPU和GPU利用率 .

根据我的观察,我怀疑这两个 Worker 根本没有沟通和同步他们传递的数据 . 我将此问题报告为错误,因为我根据官方网站和初始示例的建议创建了优化程序tf.train.SyncReplicasOptimizer . 但是,似乎同步行为(如果有的话)非常奇怪,并且程序无法正常退出 .

GitHub问题或Stack Overflow问题?

我为TensorFlow创建了一个问题#9596因为我既没有使用优化器也没有使用训练管理器 . 但是,这个问题已经关闭,因为官方团队认为这不是一个错误 . 是否有人帮我弄清楚我的代码有什么问题以及使用tf.train.SyncReplicasOptimizer()的正确方法 . 如果您认为我没有错误地调用优化器,我会考虑很快再次提出它作为一个问题 .

非常感谢 .