【问题标题】:Cloud ML Engine distributed training default type for custom tf.estimator自定义 tf.estimator 的 Cloud ML Engine 分布式训练默认类型
【发布时间】:2017-09-01 02:39:09
【问题描述】:

这个article 建议分布式训练有三种选择

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

本教程接着建议以下代码执行 在 Cloud ML Engine 上使用异步更新进行数据并行训练,其行为类似于“如果您在 10 个工作节点之间分配 10,000 个批次,则每个节点适用于大约 1,000 个批次。”

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

【问题讨论】:

    标签: tensorflow google-cloud-platform google-cloud-ml google-cloud-ml-engine


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!我的后续问题发布在这里:stackoverflow.com/questions/45989971/…——我想首先确认我应该期待数据并行训练,所以我对我正在运行的分布式 ML Engine 实验所看到的性能感到非常困惑
    • 另外,是否需要 tf.device() 语句才能利用 GPU?我看到相互矛盾的文档表明这是必需的,但我观察到 BASIC 和 BASIC_GPU 之间的一些加速,但我不确定这是由于 GPU 还是 BASIC_GPU 也有更大的 CPU。跨度>
    • 如果您有一个 gpu(如 BASIC_GPU),则不必指定设备(有关更多信息,请参阅tensorflow.org/tutorials/using_gpu)。也就是说,高性能 GPU 代码通常需要在 CPU 上强制执行一些操作。有关更多信息,请参阅tensorflow.org/performance/…
    【解决方案2】:

    Cloud ML Engine 无法确定分布式训练的模式。这取决于用户如何使用 TensorFlow 库设置训练。在文章链接的 mnist 示例中,代码使用 TF Learn 类,特别是在 model.py 中构造了一个 Estimator

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

    有关如何设置同步训练的更多信息,您可以参考doc

    【讨论】:

    • 啊,我没有意识到这是从优化确定的,谢谢!除了优化器之外,还有其他因素可以控制分布式训练的类型吗?优化器是否也指定了“数据并行”?
    • 我已经生成了自己的 Estimator(返回 tf.estimator.EstimatorSpec),我正在寻找更多信息来了解培训是如何分配的。我也在使用 AdamOptimizer,因此根据您的回答,我假设它是数据并行异步训练,但是如果我要选择不同的估计器,我还不清楚如何确认行为。我没有在任何地方看到这种与优化器相关的行为,因此我可以自己确定行为。你能分享任何相关的链接吗?
    猜你喜欢
    • 2018-10-28
    • 2018-11-03
    • 2018-03-24
    • 2019-06-01
    • 1970-01-01
    • 2021-11-01
    • 2018-02-09
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多