如何在AWS Sagemaker中集成spark.ml管道拟合和超参数优化



以下是我试图实现的目标的高级图片:我想用spark作为计算后端来训练LightGBM模型,所有这些都在SageMaker中使用他们的Training Job api。澄清:

  1. 我通常必须使用LightGBM,这里没有选项
  2. 我需要使用spark计算后端的原因是,使用当前数据集的训练不再适合内存
  3. 我想使用SageMaker培训作业设置,这样我就可以使用SM超参数优化作业来找到LightGBM的最佳超参数。虽然LightGBM spark接口本身确实提供了一些超参数调整功能,但它不提供贝叶斯HP调整

现在,我知道了在SM中运行自定义训练的一般方法:以某种方式构建一个容器,然后从ECR中提取它,并通过sagemaker.EstimatorAPI启动训练作业/超参数调整作业。现在,在这种情况下,SM将为您处理资源调配,创建一个实例等等。我感到困惑的是,本质上,要使用spark计算后端,我需要运行一个EMR集群,所以SDK也必须处理这个问题。然而,我看不出上面API是如何做到这一点的。

现在,还有一个叫做Sagemaker Pyspark SDK的东西。但是,该软件包中提供的SageMakerEstimatorAPI也不支持直接集群配置。

有人知道如何运行Sagemaker培训作业吗?该作业将使用EMR集群,以便以后将相同的作业用于超参数调整活动?

我认为的一种方法是在后台运行一个EMR集群,然后创建一个常规的SM估计器作业,该作业将连接到EMR集群并进行培训,本质上是在SM estimator作业中运行一个火花驱动程序。

过去有人做过类似的事情吗?

感谢

感谢您的提问。以下是答案:

  • SageMaker PySpark SDKhttps://sagemaker-pyspark.readthedocs.io/en/latest/与您想要的相反:能够在spark环境中调用非spark(或spark(SageMaker作业。不确定你在这里需要的是什么。

  • 在SageMaker作业中运行Spark。虽然您可以使用SageMaker笔记本连接到远程电子病历集群进行交互式编码,但您不需要电子病历在SageMaker作业(培训和处理(中运行Spark。您有两个选项:

    • SageMaker Processing有一个内置的Spark Container,它很容易使用,但不幸的是,它没有连接到SageMaker模型调优(仅适用于Training(。如果使用此选项,则必须查找并使用第三方外部参数搜索库;例如,AWS本身的Syne Tune(支持贝叶斯优化(

    • SageMaker Training可以在一台或多台机器上运行基于docker的自定义作业。如果您能够将您的Spark代码符合SageMaker培训规范,那么您将能够使用SageMaker模型调整来调整您的Spark代码。然而,在SageMaker Training上没有Spark的框架容器,因此您必须构建自己的框架容器。我不知道有任何示例。也许你可以从这里的处理容器代码中获得灵感,构建一个自定义的训练容器

您将Training作业作为客户端来启动EMR集群的想法是好的,应该是可行的(如果SM具有正确的权限(,并且确实允许您使用SM Model Tuning。我推荐:

  • 每个SM作业创建一个新的临时集群(步骤后自动终止(,以保持低成本并避免调优结果受到作业间争用的污染,如果在同一集群上运行所有内容,则可能会出现这种争用
  • 为SM估计器使用尽可能便宜的实例类型,因为它需要在EMR实验的所有持续时间内保持不变,以收集和打印您的最终度量(准确性、持续时间、成本…(

本着同样的精神,我曾经使用SageMaker培训自己来启动Batch Transform作业,其唯一目的是利用贝叶斯搜索API来找到一种将成本降至最低的推理配置。

最新更新