2

这是一个基本的 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 对象的第三个参数是让您控制训练实例数量的原因。

4

1 回答 1

1

分布式培训需要有一种方法在培训工作者之间同步培训结果。大多数传统库,例如 scikit-learn,都是为单个工作人员设计的,不能只在分布式环境中使用。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 使用每个人都在使用的内置参数服务器,但它承担了构建集群和配置实例以与其通信的繁重工作。

于 2018-02-04T01:12:42.273 回答