最近,我尝试在集群上部署同步分布式tensorflow培训。我按照教程和初始示例编写了自己的程序。 training.py来自其他用户的实现,它遵循与官方示例相同的API用法。我对它进行了修改,使其能够在具有多个GPU的单台机器上运行,方法是让它们通过localhost进行通信,并将每个worker映射到只能看到一个GPU。
run.sh启动了三个进程。其中一个是参数服务器,其他是由图之间复制实现的两个工作者。我通过tf.train.Supervisor()创建了培训主管,以管理分布式培训中的多个会话以进行初始化和同步。
我希望这两个工作人员能够同步每个批次并在同一时期内工作。然而,在工人1之前启动的工人0完成了整个训练集而没有等待工人1.之后,工人0的过程完成了训练过程并正常退出而工人1表现得像是落入死锁并在几个小时内保持接近0%的CPU和GPU利用率。
根据我的观察,我怀疑这两个工作人员没有通过他们传递的数据进行通信和同步。我将此问题报告为错误,因为我根据官方网站和初始示例的建议创建了优化程序tf.train.SyncReplicasOptimizer。但是,似乎同步行为(如果有的话)非常奇怪,程序无法正常退出。
两个文件: training.py:此文件包含参数服务器的源代码和为使用同步分布式优化器而创建的工作程序(tf.train.SyncReplicasOptimizer)。 run.sh:这个文件启动了参数服务器和worker。 日志: 请根据步骤生成并查看worker_0_log和worker_1_log