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

2024-01-27

这是一个基本的 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 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_functionity/scikit_bring_your_own/scikit_bring_your_own.ipynb https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb。本笔记本中 Estimator 对象的第三个参数可让您控制训练实例的数量。


分布式培训需要有一种方法在培训工作者之间同步培训结果。大多数传统库(例如 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 https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐