【问题标题】:Data Preprocessing on AWS SageMakerAWS SageMaker 上的数据预处理
【发布时间】:2021-01-23 13:09:51
【问题描述】:
我有一个在 AWS 上运行经过训练的 SageMaker 模型的端点,它需要特定格式的数据。
最初,数据已经在应用程序的客户端进行了处理,这意味着API Gateway(在 AWS 上接收 POST API 调用)用于接收预处理数据,但现在有一个变化, API Gateway 将从客户端接收原始数据,在发送到我们的 SageMaker 模型之前预处理这些数据的工作取决于我们的工作流程。
在此工作流程上创建预处理作业而不需要重新训练模型的最佳方法是什么?我的预处理只是一堆数据帧转换,不需要标准化或计算所需的训练集(它不需要保存任何模型文件)。
谢谢!
【问题讨论】:
标签:
amazon-web-services
aws-api-gateway
amazon-sagemaker
【解决方案1】:
我会创建一个 Lambda,它会被 API-Gateway 调用,处理数据并将其发送到您的 SageMaker 端点。
【解决方案2】:
经过一番研究,这是我遵循的解决方案:
- 首先,我创建了一个
SKLearn sagemaker 模型来执行所有预处理设置(我已经构建了一个 Scikit-Learn 自定义类来处理所有预处理步骤,遵循这个 AWS code)
- 根据我的训练数据训练了这个预处理模型。具体来说,我的模型不需要训练(它没有任何标准化或任何需要存储训练数据参数的东西),但 sagemaker 需要训练模型。
- 已使用
Model 参数加载了经过训练的旧模型。
- 使用级联的预处理模型和遗留模型创建了
PipelineModel:
pipeline_model = PipelineModel(name=model_name,
role=role,
models=[
preprocess_model,
trained_model
])
- 创建一个新端点,调用
PipelineModel,然后更改Lambda 函数来调用这个新端点。有了这个,我可以直接为同一个 API Gateway 发送 原始数据,它只会调用 一个 端点,而无需支付两个端点 24/7 来执行整个过程。
我发现这是在经过训练的模型之外执行预处理的一种很好且“经济”的方法,而无需在 Lambda 函数上执行繁重的处理工作。