0

article表明有三个选项用于分布式训练云ML引擎分布式训练默认类型的自定义tf.estimator

  1. 数据并行训练同步更新。
  2. 异步更新的数据并行训练。
  3. 模型平行训练。

教程然后继续建议遵循执行数据并行训练对云ML引擎这表现为“异步更新的代码如果10个工作节点之间分发10000个批次,每个节点工程上大约有1000批次。“

但是,不清楚代码的哪一部分实际上指定了这是使用异步更新的数据并行训练。如果您使用自定义tf.estimator在分布式训练模式下运行,这仅仅是ML引擎的默认值?

回答

1

简短的回答是tf.estimator目前主要是围绕数据并行训练(2)。

只需在代码中使用with tf.device()语句即可获得模型平行培训。

您可以尝试使用SyncReplicasOptimizer并可能完成同步训练(1)。

以上所有内容一般适用于tf.estimator; CloudML Engine没有什么不同。

+0

谢谢!我的后续问题发布在这里:https://stackoverflow.com/questions/45989971/distributed-training-with-tf-estimator-resulting-in-more-training-steps - 我想先确认我应该期待数据并行训练,所以我对我正在运行的分布式ML引擎实验的性能感到困惑 – reese0106

+0

另外,是否需要使用tf.device()语句来利用GPU?我发现有冲突的文档表明这是需要的,但我正在观察BASIC和BASIC_GPU之间的一些加速,但我不确定这是由于GPU还是BASIC_GPU有更大的CPU。 – reese0106

+0

如果您有一个gpu(如BASIC_GPU),则不需要指定设备(有关详细信息,请参阅https://www.tensorflow.org/tutorials/using_gpu)。也就是说,高性能GPU代码通常需要强制CPU上的某些操作。有关更多信息,请参阅https://www.tensorflow.org/performance/performance_guide#preprocessing_on_the_cpu。 – rhaertel80

0

Cloud ML引擎不确定分布式培训的模式。这取决于用户如何使用TensorFlow库设置培训。在从文章链接的mnist示例中,代码使用的是TF Learn类,具体而言,Estimator构建于model.py

该代码选择优化程序,在本例中为使用异步更新的AdamOptimizer。如果您想要执行同步更新,则必须使用不同的优化器,例如SyncReplicasOptimizer。

有关如何设置同步培训的更多信息,请参阅此doc

+0

啊我没有意识到这是从优化确定的,谢谢!优化器之外还有其他一些因素可以控制分布式培训的类型吗?优化器是否也指定了“数据并行”? – reese0106

+0

我已经生成了我自己的Estimator(返回tf.estimator.EstimatorSpec),并且正在查找其他信息以了解如何分发培训。我也基于你的答案使用AdamOptimizer,我假设它是数据并行异步培训,但是如果我选择不同的估算器,我不知道如何确认行为。我没有看到这个优化器相关的行为记录在任何地方,以便我可以自己决定行为。你能分享任何相关的链接吗? – reese0106