如何在 AWS Sagemaker 中集成 spark.ml 管道拟合和超参数优化?
How to integrate spark.ml pipeline fitting and hyperparameter optimisation in AWS Sagemaker?
这是我想要实现的目标的高级图片:我想使用 spark 作为计算来训练 LightGBM 模型 backend,所有这些都在 SageMaker 中使用他们的训练作业 api .
澄清一下:
- 一般都得用LightGBM,这里没有选项
- 我需要使用 spark 计算后端的原因是因为当前数据集的训练不再适合内存。
- 我想使用 SageMaker 训练作业设置,这样我就可以使用 SM 超参数优化作业来找到 LightGBM 的最佳超参数。虽然 LightGBM spark 接口本身确实提供了一些超参数调整功能,但它不提供贝叶斯 HP 调整。
现在,我知道了 运行在 SM 中进行自定义训练的一般方法:以某种方式构建容器,然后从 ECR 中提取它并开始训练 job/hyperparameter通过 sagemaker.Estimator
API 调整工作。现在,在这种情况下,SM 会为您处理资源配置、创建实例等。我感到困惑的是,本质上,要使用 spark 计算后端,我需要有一个 EMR 集群 运行ning,因此 SDK 也必须处理它。但是,我看不出上面的 API 是如何实现的。
现在,还有一个叫做 Sagemaker Pyspark SDK 的东西。但是,该包中提供的 SageMakerEstimator
API 也不支持即时集群配置。
有谁知道如何 运行 使用 EMR 集群的 Sagemaker 训练作业,以便稍后可以将相同的作业用于超参数调整活动?
我看到的一种方法是在后台 运行 一个 EMR 集群,然后只创建一个常规的 SM 估计器作业,该作业将连接到 EMR 集群并进行训练,本质上是 运行在 SM Estimator 作业中使用 spark 驱动程序。
过去有没有人做过类似的事情?
谢谢
感谢您的提问。以下是答案:
SageMaker PySpark SDK https://sagemaker-pyspark.readthedocs.io/en/latest/ 与您想要的相反:能够调用 non-spark(或 spark)来自 Spark 环境的 SageMaker 作业。不确定这就是您需要的。
运行 SageMaker 作业中的 Spark。虽然您可以使用 SageMaker Notebooks 连接到远程 EMR 集群以进行交互式编码,但您不需要 EMR 来 运行 SageMaker 作业(训练和处理)中的 Spark。您有 2 个选择:
SageMaker Processing has a built-in Spark Container, which is easy to use but unfortunately not connected to SageMaker Model Tuning (that works with Training only). If you use this, you will have to find and use a third-party, external parameter search library ; for example Syne Tune 来自 AWS 本身(支持贝叶斯优化)
SageMaker Training 可以在一台或多台机器上 运行 自定义 docker-based 作业。如果您可以使您的 Spark 代码符合 SageMaker 培训规范,那么您将能够使用 SageMaker 模型调整来调整您的 Spark 代码。但是,SageMaker Training 上没有适用于 Spark 的框架容器,因此您必须自己构建,而且我不知道有任何示例。也许您可以从 Processing container code here 中获得灵感来构建自定义训练容器
您将训练作业用作客户端来启动 EMR 集群的想法很好并且应该可行(如果 SM 具有正确的权限),并且确实允许您使用 SM 模型调整。我会推荐:
- 每个 SM 作业创建一个新的临时集群(auto-terminate 在步骤之后)以保持低成本并避免调整结果被 inter-job 争用所污染,如果 运行将所有内容都放在同一个集群上。
- 为 SM 估计器使用尽可能便宜的实例类型,因为它需要在 EMR 实验的所有持续时间内保持运行以收集和打印最终指标(准确性、持续时间、成本...)
本着同样的精神,我曾经自己使用 SageMaker Training 来启动批量转换作业,其唯一目的是利用贝叶斯搜索 API 来找到可将成本降至最低的推理配置。
这是我想要实现的目标的高级图片:我想使用 spark 作为计算来训练 LightGBM 模型 backend,所有这些都在 SageMaker 中使用他们的训练作业 api . 澄清一下:
- 一般都得用LightGBM,这里没有选项
- 我需要使用 spark 计算后端的原因是因为当前数据集的训练不再适合内存。
- 我想使用 SageMaker 训练作业设置,这样我就可以使用 SM 超参数优化作业来找到 LightGBM 的最佳超参数。虽然 LightGBM spark 接口本身确实提供了一些超参数调整功能,但它不提供贝叶斯 HP 调整。
现在,我知道了 运行在 SM 中进行自定义训练的一般方法:以某种方式构建容器,然后从 ECR 中提取它并开始训练 job/hyperparameter通过 sagemaker.Estimator
API 调整工作。现在,在这种情况下,SM 会为您处理资源配置、创建实例等。我感到困惑的是,本质上,要使用 spark 计算后端,我需要有一个 EMR 集群 运行ning,因此 SDK 也必须处理它。但是,我看不出上面的 API 是如何实现的。
现在,还有一个叫做 Sagemaker Pyspark SDK 的东西。但是,该包中提供的 SageMakerEstimator
API 也不支持即时集群配置。
有谁知道如何 运行 使用 EMR 集群的 Sagemaker 训练作业,以便稍后可以将相同的作业用于超参数调整活动?
我看到的一种方法是在后台 运行 一个 EMR 集群,然后只创建一个常规的 SM 估计器作业,该作业将连接到 EMR 集群并进行训练,本质上是 运行在 SM Estimator 作业中使用 spark 驱动程序。
过去有没有人做过类似的事情?
谢谢
感谢您的提问。以下是答案:
SageMaker PySpark SDK https://sagemaker-pyspark.readthedocs.io/en/latest/ 与您想要的相反:能够调用 non-spark(或 spark)来自 Spark 环境的 SageMaker 作业。不确定这就是您需要的。
运行 SageMaker 作业中的 Spark。虽然您可以使用 SageMaker Notebooks 连接到远程 EMR 集群以进行交互式编码,但您不需要 EMR 来 运行 SageMaker 作业(训练和处理)中的 Spark。您有 2 个选择:
SageMaker Processing has a built-in Spark Container, which is easy to use but unfortunately not connected to SageMaker Model Tuning (that works with Training only). If you use this, you will have to find and use a third-party, external parameter search library ; for example Syne Tune 来自 AWS 本身(支持贝叶斯优化)
SageMaker Training 可以在一台或多台机器上 运行 自定义 docker-based 作业。如果您可以使您的 Spark 代码符合 SageMaker 培训规范,那么您将能够使用 SageMaker 模型调整来调整您的 Spark 代码。但是,SageMaker Training 上没有适用于 Spark 的框架容器,因此您必须自己构建,而且我不知道有任何示例。也许您可以从 Processing container code here 中获得灵感来构建自定义训练容器
您将训练作业用作客户端来启动 EMR 集群的想法很好并且应该可行(如果 SM 具有正确的权限),并且确实允许您使用 SM 模型调整。我会推荐:
- 每个 SM 作业创建一个新的临时集群(auto-terminate 在步骤之后)以保持低成本并避免调整结果被 inter-job 争用所污染,如果 运行将所有内容都放在同一个集群上。
- 为 SM 估计器使用尽可能便宜的实例类型,因为它需要在 EMR 实验的所有持续时间内保持运行以收集和打印最终指标(准确性、持续时间、成本...)
本着同样的精神,我曾经自己使用 SageMaker Training 来启动批量转换作业,其唯一目的是利用贝叶斯搜索 API 来找到可将成本降至最低的推理配置。