training.py:此文件包含参数服务器的源代码和为使用同步分布式优化器(tf.train.SyncReplicasOptimizer)和培训主管而创建的工作程序。 run.sh:此文件启动了参数服务器和工作者。
最近,我尝试在群集上部署同步分布式TensorFlow培训。我按照教程和初始示例编写了自己的程序。 training.py遵循与官方示例相同的API用法。我在一台具有多个GPU的计算机上运行它,使它们通过localhost进行通信,并映射每个worker只能看到一个GPU。
run.sh启动了三个进程。其中一个是参数服务器,其他是由图之间复制实现的两个工作者。我通过tf.train.Supervisor()创建了培训主管,以管理分布式培训中的多个会话以进行初始化和同步。
我希望这两个工作人员能够同步每个批次并在同一时期内工作。然而,在工人1之前启动的工人0完成了整个训练集而没有等待工人1.之后,工人0的过程完成了训练过程并正常退出而工人1表现得像是落入死锁并在几个小时内保持接近0%的CPU和GPU利用率。
根据我的观察,我怀疑这两个工作人员没有通过他们传递的数据进行通信和同步。我将此问题报告为错误,因为我根据官方网站和初始示例的建议创建了优化程序tf.train.SyncReplicasOptimizer。但是,似乎同步行为(如果有的话)非常奇怪,程序无法正常退出。
我为TensorFlow创建了一个问题#9596,因为我既没有使用优化器也没有使用训练管理器。但是,这个问题已经关闭,因为官方团队认为这不是一个错误。是否有人帮我弄清楚我的代码有什么问题以及使用tf.train.SyncReplicasOptimizer()的正确方法。如果您认为我没有错误地调用优化器,我会考虑很快再次提出它作为一个问题。
非常感谢。