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

时间:2018-01-29 18:09:52

标签: amazon-sagemaker

这是一个基本的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构建你自己的模型示例,并在训练中添加一些额外的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对象的第三个参数可以让您控制训练实例的数量。

1 个答案:

答案 0 :(得分:1)

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

Spark MLLib已经分发了流行算法的实现,例如k-means,逻辑回归或PCA,但是这些实现对于某些情况来说还不够好。他们中的大多数都太慢了,有些甚至在大量数据被用于训练时都被粉碎了。亚马逊SageMaker团队从头开始重新实现了许多这些算法,以便从云的规模和经济性中受益(一个实例的20小时与20个实例的1小时相同,仅快20倍)。这些算法中的许多算法现在比线性可伸缩性更稳定且更快。在此处查看更多详细信息:https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html

对于深度学习框架(TensorFlow和MXNet),SageMaker正在使用每个人正在使用的内置参数服务器,但它正在构建集群并配置实例与之通信。

相关问题