我正在试验Cloud ML Engine上的分布式培训选项,并观察了一些特殊的结果。我基本上改变了人口普查定制估算例子,以包含稍微不同的模型,并将我的损失函数更改为AdamOptimizer作为唯一真正的变化。基于其他thread,我的理解是,任何分布式培训都应该是数据并行异步培训,这将提示“如果您在10个工作节点中分发10,000个批次,则每个节点的工作量大约为1,000个批次。”在我的实验中,我有〜650k个训练实例,并且我正在运行下列实验,批处理量为128个1个时期。给定650k个训练实例和128个批处理大小,我预计会有~5.1k个步骤时代。下面是我看到的性能不同--scale-tier
的tf.estimator的分布式培训导致更多的培训步骤
尚未发放
- BASIC:8步/秒,5.1K步骤,11分钟挂钟时间
- BASIC_GPU:24步/秒,5.1K步骤,3.5分钟壁时间
分布式
标准_1:14.5步/秒 - 26K步骤(26K * 128 =〜3.3M比所述训练样本实际上是在数据多路),29分钟壁时间
CUSTOM - 5 complex_model_m工人,2 large_model参数服务器:27步/秒,31K的步骤(128 * 31K =〜3.9M其比650K训练样本实际上是在数据路以上),壁时间20分钟
我期望的是,基于该文章的数据平行分布式培训将在所有工人中分配批次,所以如果我有5名工人在〜5k蝙蝠那么每个工人就会执行〜1,000个批次。然而,我观察到的实际行为是,似乎更接近每5个工人进行1个时代的每一个人。在分布式环境下进行训练时,在一个时代中所采用的步数是训练样例的6倍 - 我知道每次梯度的更新都会对步骤的真实定义产生影响,但我对数据并行训练的理解是:这只是分割批次,所以应该有相同数量的梯度更新 - 有什么理由可以预期这种行为?在数据并行异步培训分布式环境中需要更多的培训步骤是否合理?任何人都可以解释我正在观察的行为吗?
令人难以置信的答案!这将成为一篇很好的博客文章,因为很难找到在线分发tensorflow文档中解释的信息。我猜这里唯一值得关注的是,如果我处理的是不平衡的数据,我喜欢使用时代来确保我遍历所有少数族裔的例子,并且似乎使用max_steps确实无法保证(尽管如果你采取足够的步骤,那么你应该从甚至最小的少数族裔中抽样)。 – reese0106
我对像Adam这样的优化者的理解是,他们通常使用“开箱即用”的学习率,因为他们已经或多或少地进行了优化。是否有任何建议的启发式方法来调整学习率来处理更大的有效批量?我认识到可能需要试验/超参数调整,但希望阅读更多内容以获得更多信息 – reese0106
此外,您还引用了max_steps--这与此[line](https)自定义估算人口普查样本中的train_steps相同://github.com/GoogleCloudPlatform/cloudml-samples/blob/master/census/customestimator/trainer/task.py#L201)或者这是一个完全不同的论点? – reese0106