使用 Amazon 中的推理管道将预处理逻辑部署到单个终端节点的 ML 模型中 SageMaker - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon 中的推理管道将预处理逻辑部署到单个终端节点的 ML 模型中 SageMaker

由 Mohan Gowda Purushothama (AWS)、Gabriel Rodriguez Garcia (AWS) 和 Mateusz Zaremba (AWS) 创建

环境:生产

技术:机器学习和人工智能;容器和微服务

AWS 服务:亚马逊 SageMaker;亚马逊 ECR

Summary

此模式说明了如何使用 Amazon SageMaker 中的推理管道在单个终端节点中部署多个管道模型对象。管道模型对象表示不同的机器学习 (ML) 工作流程阶段,例如预处理、模型推断和后期处理。为了说明串行连接的管道模型对象的部署,此模式向您展示了如何部署预处理的 Scikit-Learn 容器和基于内置线性学习器算法的回归模型。 SageMaker部署托管在中的单个端点后面 SageMaker。

请注意:此模式使用 ml.m4.2xlarge 实例类型部署。建议使用符合您的数据大小和工作流程复杂要求的实例类型。有关更多信息,请参阅 Amazon SageMaker 定价。此模式使用了预先构建的 Scikit-Learn Docker 映像,但您可以使用自己的 Docker 容器并将其集成至工作流程。

先决条件和限制

先决条件

产品版本

架构

目标技术堆栈

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon SageMaker

  • 亚马逊 SageMaker Studio

  • Amazon Simple Storage Service (Amazon S3)

  • Amazon 的实时推理终端节点 SageMaker

目标架构

下图显示了部署 Amazon SageMaker 管道模型对象的架构。

用于部署 SageMaker 管道模型对象的架构

图表显示了以下工作流:

  1. SageMaker 笔记本部署管道模型。

  2. S3 存储桶存储模型构件。

  3. Amazon ECR 从 S3 存储桶获取源容器映像。

工具

AWS 工具

代码

此模式的代码可在带有 Scikit-Learn 和 L GitHub inear Learner 存储库的推理管道中找到。

操作说明

任务描述所需技能

为回归任务准备数据集。

在 Amazon SageMaker Studio 中@@ 打开一本笔记本

若要导入所有必要的库并初始化工作环境,请在笔记本中使用以下示例代码:

import sagemaker from sagemaker import get_execution_role sagemaker_session = sagemaker.Session() # Get a SageMaker-compatible role used by this Notebook Instance. role = get_execution_role() # S3 prefix bucket = sagemaker_session.default_bucket() prefix = "Scikit-LinearLearner-pipeline-abalone-example"

若要下载示例数据集,请将以下代码添加至您的笔记本:

! mkdir abalone_data ! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data

请注意 此模式中的示例使用 UCI 机器学习存储库中的 Abalone 数据集

数据科学家

将数据集上传至 S3 存储桶。

在此前准备数据集的笔记本中,添加以下代码,以将示例数据上传至 S3 存储桶:

WORK_DIRECTORY = "abalone_data" train_input = sagemaker_session.upload_data( path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"), bucket=bucket, key_prefix="{}/{}".format(prefix, "train"), )
数据科学家
任务描述所需技能

准备 preprocessor.py 脚本。

  1. 从 GitHub sklearn_abalone_featurizer.py 存储库中的 Python 文件中复制预处理逻辑,然后将该代码粘贴到名sklearn_abalone_featurizer.py为的单独的 Python 文件中。您可以修改代码,以适应您的自定义数据集和自定义工作流程。

  2. sklearn_abalone_featurizer.py文件保存在项目的根目录中(也就是说,与运行 SageMaker 笔记本的位置相同)。

数据科学家

创建 SKLearn 预处理器对象。

要创建可以整合到最终推理管道中的 skLearn 预处理器对象(名为 skLearn Estimator),请在笔记本中运行以下代码: SageMaker

from sagemaker.sklearn.estimator import SKLearn FRAMEWORK_VERSION = "0.23-1" script_path = "sklearn_abalone_featurizer.py" sklearn_preprocessor = SKLearn( entry_point=script_path, role=role, framework_version=FRAMEWORK_VERSION, instance_type="ml.c4.xlarge", sagemaker_session=sagemaker_session, ) sklearn_preprocessor.fit({"train": train_input})
数据科学家

测试预处理器推理。

要确认您的预处理器定义正确,请在 SageMaker 笔记本中输入以下代码来启动批处理转换作业

# Define a SKLearn Transformer from the trained SKLearn Estimator transformer = sklearn_preprocessor.transformer( instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv" ) # Preprocess training input transformer.transform(train_input, content_type="text/csv") print("Waiting for transform job: " + transformer.latest_transform_job.job_name) transformer.wait() preprocessed_train = transformer.output_path
任务描述所需技能

创建模型对象。

要基于线性学习器算法创建模型对象,请在 SageMaker 笔记本中输入以下代码:

import boto3 from sagemaker.image_uris import retrieve ll_image = retrieve("linear-learner", boto3.Session().region_name) s3_ll_output_key_prefix = "ll_training_output" s3_ll_output_location = "s3://{}/{}/{}/{}".format( bucket, prefix, s3_ll_output_key_prefix, "ll_model" ) ll_estimator = sagemaker.estimator.Estimator( ll_image, role, instance_count=1, instance_type="ml.m4.2xlarge", volume_size=20, max_run=3600, input_mode="File", output_path=s3_ll_output_location, sagemaker_session=sagemaker_session, ) ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32) ll_train_data = sagemaker.inputs.TrainingInput( preprocessed_train, distribution="FullyReplicated", content_type="text/csv", s3_data_type="S3Prefix", ) data_channels = {"train": ll_train_data} ll_estimator.fit(inputs=data_channels, logs=True)

先前代码从公共 Amazon ECR 注册表中检索模型的相关 Amazon ECR Docker 映像,创建估算器对象,然后使用该对象训练回归模型。

数据科学家
任务描述所需技能

部署管道模型。

要创建管道模型对象(即预处理器对象)并部署该对象,请在 SageMaker 笔记本中输入以下代码:

from sagemaker.model import Model from sagemaker.pipeline import PipelineModel import boto3 from time import gmtime, strftime timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime()) scikit_learn_inferencee_model = sklearn_preprocessor.create_model() linear_learner_model = ll_estimator.create_model() model_name = "inference-pipeline-" + timestamp_prefix endpoint_name = "inference-pipeline-ep-" + timestamp_prefix sm_model = PipelineModel( name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model] ) sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)

请注意:可调整模型对象中使用的实例类型,以满足您的需求。

数据科学家

测试推理。

要确认端点是否正常工作,请在 SageMaker 笔记本中运行以下示例推理代码:

from sagemaker.predictor import Predictor from sagemaker.serializers import CSVSerializer payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155" actual_rings = 10 predictor = Predictor( endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer() ) print(predictor.predict(payload))
数据科学家

相关资源