【问题标题】:AWS Sagemaker | Why multiple instances training taking time multiplied to instance numberAWS Sagemaker |为什么多实例训练所花费的时间乘以实例数
【发布时间】:2019-05-30 17:51:25
【问题描述】:

我正在使用 AWS Sagemaker 进行模型训练和部署,这是模型训练的示例

from sagemaker.estimator import Estimator
hyperparameters = {'train-steps': 10}
instance_type = 'ml.m4.xlarge'

estimator = Estimator(role=role,
                      train_instance_count=1,
                      train_instance_type=instance_type,
                      image_name=ecr_image,
                      hyperparameters=hyperparameters)

estimator.fit(data_location)

这里提到的docker镜像是一个tensorflow系统。

假设训练模型需要 1000 秒,现在我将实例数增加到 5,那么训练时间将增加 5 倍,即 5000 秒。据我了解,培训工作将分配给 5 台机器,因此理想情况下每台机器需要 200 秒,但似乎它在每台机器上进行单独的训练。有人可以让我知道它在一般分布式系统或 Tensorflow 上的工作。

我试图在这个文档https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-dg.pdf 上找到答案,但似乎这里没有提到在分布式机器上工作的方式。

【问题讨论】:

    标签: python tensorflow amazon-sagemaker


    【解决方案1】:

    您是否在脚本中使用TensorFlow estimator APIs?如果是,我认为您应该按照in the documentation here 的描述将脚本包装在sagemaker.tensorflow.TensorFlow 类中来运行脚本。如果您以这种方式运行训练,实例之间的并行化和通信应该是开箱即用的。

    但请注意,当您增加实例数量时,缩放将不是线性的。在实例之间进行通信需要时间,并且脚本中可能存在不可并行的瓶颈,例如将数据加载到内存中。

    【讨论】:

    • 不,我们没有使用 Tensorflow estimator API,而是使用像 self.tf_prediction.eval(session=get_session()) 这样的核心模型,不确定这里的标准做法是什么
    • @Vineet 那么你的并行化策略是什么?你在做类似于Distributed TensorFlow 的事情吗?我不认为你可以在多台机器上训练一个普通的 TF 脚本并假设它们会自动相互感知。也许您可以尝试在一个大型 GPU 实例上进行训练,而不是尝试使用多个实例?
    • 我觉得 Sagemaker 完成了所有的并行化,我们只需要传递实例计数和类型,即使在自定义容器的情况下,我们是否需要显式编写所有内容
    • SageMaker 无法自动知道您希望如何将任意代码并行化到多台机器。即使它知道这是一个 TensorFlow 训练工作,它可以自动让机器相互感知,将它们分配为工人或参数服务器,并决定使用“数据并行”策略,它仍然需要决定是否这样做例如同步或异步梯度更新(你可以阅读更多关于那些here)。我建议您使用 TF 估算器编写代码并使用 SageMaker 的 TF 容器。
    猜你喜欢
    • 2020-11-08
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2020-05-12
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多