AWS Sagemaker 自定义用户算法:如何利用额外实例

AWS Sagemaker custom user algorithms: how to take advantage of extra instances

这是一个基本的 AWS Sagemaker 问题。当我 运行 使用 Sagemaker 的一种内置算法进行训练时,我能够通过增加训练算法的 instance_count 参数来利用将作业分发到许多实例所带来的巨大加速。然而,当我打包自己的自定义算法时,增加实例数似乎只是在每个实例上重复训练,导致没有加速。

我怀疑当我打包我自己的算法时,我需要做一些特别的事情来控制它如何以不同的方式处理我的自定义 train() 函数内特定实例的训练(否则,它会如何知道应该如何分配工作?),但我没能在网上找到任何关于如何做到这一点的讨论。

有人知道怎么处理吗?非常感谢您。

具体例子: => 它在标准算法中运行良好:我验证了在第一个记录的 sagemaker 示例中增加 train_instance_count 可以加快速度:https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-train-model-create-training-job.html

=> 它在我的自定义算法中不起作用。我尝试采用标准的 sklearn build-your-own-model 示例,并在训练中添加一些额外的 sklearn 变体,然后打印出结果进行比较。当我增加传递给 Estimator 对象的 train_instance_count 时,它 运行 对每个实例进行相同的训练,因此输出在每个实例中重复(结果的打印输出重复)并且没有加速。 这是 sklearn 示例库: https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb 。本笔记本中 Estimator 对象的第三个参数可让您控制训练实例的数量。

分布式训练需要有一种方法来同步训练工作者之间的训练结果。大多数传统的库,例如 scikit-learn,都是为单个 worker 工作而设计的,不能只在分布式环境中使用。 Amazon SageMaker 正在跨工作人员分发数据,但您需要确保算法可以从多个工作人员中获益。一些算法,如随机森林,更容易利用分布,因为每个工人可以构建森林的不同部分,但其他算法需要更多帮助。

Spark MLLib 具有 k-means、逻辑回归或 PCA 等流行算法的分布式实现,但这些实现在某些情况下还不够好。他们中的大多数都太慢了,有些甚至在使用大量数据进行训练时崩溃了。 Amazon SageMaker 团队从头开始重新实施其中许多算法,以从云的规模和经济性中获益(一个实例 20 小时的成本与 20 个实例 1 小时的成本相同,仅快 20 倍)。这些算法中的许多现在比线性可扩展性更稳定、更快。在此处查看更多详细信息:https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html

对于深度学习框架(TensorFlow 和 MXNet),SageMaker 使用每个框架都在使用的内置参数服务器,但它正在承担构建集群和配置实例以与其通信的繁重工作.