批量推理 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

批量推理

批量预测也称为离线推理,可根据一批观察数据生成模型预测。对于大型数据集或者在您不需要立即响应模型预测请求时,批量推理是很好的选择。

与之对比的是,在线推理(实时推理)会实时生成预测。

您可以使用 SageMaker Python SDK、Autopilot 用户界面 (UI)、Amazon SDK for Python (boto3) 或 Amazon Command Line Interface (Amazon CLI),从 Autopilot 模型进行批量推理。

以下选项卡显示用于部署模型的三个选项:使用 API、Autopilot UI 或使用 API 从不同的账户进行部署。这些说明假定您已在 Autopilot 中创建了模型。如果您还没有模型,请参阅 为表格数据创建 Amazon SageMaker Autopilot 实验。要查看每个选项的示例,请打开各个选项卡。

Autopilot UI 包含有用的下拉菜单、切换开关、工具提示等,可帮助您浏览模型部署。

下面的步骤说明如何部署 Autopilot 实验中的模型以便批量预测。

  1. 通过 https://console.aws.amazon.com/sagemaker/ 登录并从左侧导航窗格中选择 Studio

  2. 在左侧导航窗格中,选择 Studio

  3. 开始使用下,选择要在其中启动 Studio 应用程序的域。如果您的用户配置文件仅属于一个域,则看不到用于选择域的选项。

  4. 选择要为其启动 Studio 应用程序的用户配置文件。如果域中没有用户配置文件,请选择创建用户配置文件。有关更多信息,请参阅添加和删除用户配置文件

  5. 选择启动 Studio。如果用户配置文件属于共享空间,请选择打开空间

  6. 当 SageMaker Studio 控制台打开时,选择启动 SageMaker Studio 按钮。

  7. 从左侧导航窗格中选择 AutoML

  8. 名称下,选择与您要部署的模型相对应的 Autopilot 实验。这将打开新的 Autopilot 作业选项卡。

  9. 模型名称部分中,选择要部署的模型。

  10. 选择 Deploy model (部署模型)。这将打开一个新选项卡。

  11. 在页面顶部,选择批量预测

  12. 对于批量转换作业配置,请输入实例类型实例计数和其他可选信息。

  13. 输入数据配置部分中,打开下拉菜单。

    1. 对于 S3 数据类型,请选择 ManifestFileS3Prefix

    2. 对于拆分类型,请选择RecordIOTFRecord

    3. 对于压缩,选择 Gzip

  14. 对于 S3 位置,请输入数据和其他可选信息的 Amazon S3 存储桶位置。

  15. 输出数据配置下,输入用于存储输出数据的 S3 存储桶,然后选择如何组合作业的输出

    1. 对于其他配置(可选),您可以输入 MIME 类型和 S3 加密密钥

  16. 对于输入/输出筛选和数据连接(可选),您可以输入 JSONpath 表达式来筛选输入数据,连接输入源数据与输出数据,然后输入 JSONpath 表达式来筛选输出数据。

    1. 有关每种筛选条件的示例,请参阅 DataProcessing API

  17. 要对输入数据集执行批量预测,请选择创建批量转换作业。此时将打开一个新的批量转换作业选项卡。

  18. 批量转换作业选项卡中:在状态部分查找您的作业名称。然后检查作业的进度。

要使用 SageMaker API 进行批量推理,请执行以下三个步骤:

  1. 获取候选项定义

    InferenceContainers 中的候选模型定义用于创建 SageMaker 模型。

    以下示例演示如何使用 DescribeAutoMLJob API 获取最佳候选模型的候选模型定义。请参阅以下 Amazon CLI 命令示例。

    aws sagemaker describe-auto-ml-job --auto-ml-job-name <job-name> --region <region>

    使用 ListCandidatesForAutoMLJob API 列出所有候选模型。请参阅以下 Amazon CLI 命令示例。

    aws sagemaker list-candidates-for-auto-ml-job --auto-ml-job-name <job-name> --region <region>
  2. 创建 SageMaker 模型

    要使用 CreateModel API 创建 SageMaker 模型,请使用上一步中的容器定义。请参阅以下 Amazon CLI 命令示例。

    aws sagemaker create-model --model-name '<your-custom-model-name>' \ --containers ['<container-definition1>, <container-definition2>, <container-definition3>]' \ --execution-role-arn '<execution-role-arn>' --region '<region>
  3. 创建 SageMaker 转换作业

    以下示例使用 CreateTransformJob API 创建 SageMaker 转换作业。请参阅以下 Amazon CLI 命令示例。

    aws sagemaker create-transform-job --transform-job-name '<your-custom-transform-job-name>' --model-name '<your-custom-model-name-from-last-step>'\ --transform-input '{ "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "<your-input-data>" } }, "ContentType": "text/csv", "SplitType": "Line" }'\ --transform-output '{ "S3OutputPath": "<your-output-path>", "AssembleWith": "Line" }'\ --transform-resources '{ "InstanceType": "<instance-type>", "InstanceCount": 1 }' --region '<region>'

使用 DescribeTransformJob API 检查转换作业的进度。请参阅以下 Amazon CLI 命令示例。

aws sagemaker describe-transform-job --transform-job-name '<your-custom-transform-job-name>' --region <region>

作业完成后,在 <your-output-path> 中可找到预测结果。

输出文件名称格式如下:<input_data_file_name>.out。例如,如果您的输入文件是 text_x.csv,则输出文件名称是 text_x.csv.out

以下选项卡显示了 SageMaker Python SDK、Amazon SDK for Python (boto3) 以及 Amazon CLI 的代码示例。

SageMaker Python SDK

以下示例使用 SageMaker Python SDK 进行批量预测。

from sagemaker import AutoML sagemaker_session= sagemaker.session.Session() job_name = 'test-auto-ml-job' # your autopilot job name automl = AutoML.attach(auto_ml_job_name=job_name) output_path = 's3://test-auto-ml-job/output' input_data = 's3://test-auto-ml-job/test_X.csv' # call DescribeAutoMLJob API to get the best candidate definition best_candidate = automl.describe_auto_ml_job()['BestCandidate'] best_candidate_name = best_candidate['CandidateName'] # create model model = automl.create_model(name=best_candidate_name, candidate=best_candidate) # create transformer transformer = model.transformer(instance_count=1, instance_type='ml.m5.2xlarge', assemble_with='Line', output_path=output_path) # do batch transform transformer.transform(data=input_data, split_type='Line', content_type='text/csv', wait=True)
Amazon SDK for Python (boto3)

以下示例使用 Amazon SDK for Python (boto3) 进行批量预测。

import sagemaker import boto3 session = sagemaker.session.Session() sm_client = boto3.client('sagemaker', region_name='us-west-2') role = 'arn:aws:iam::1234567890:role/sagemaker-execution-role' output_path = 's3://test-auto-ml-job/output' input_data = 's3://test-auto-ml-job/test_X.csv' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName=job_name)['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName'] # create model reponse = sm_client.create_model( ModelName = best_candidate_name, ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName=f'{best_candidate_name}-transform-job', ModelName=model_name, TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': input_data } }, 'ContentType': "text/csv", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m5.2xlarge', 'InstanceCount': 1, }, )

批量推理作业返回以下格式的响应。

{'TransformJobArn': 'arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-transform-job', 'ResponseMetadata': {'RequestId': '659f97fc-28c4-440b-b957-a49733f7c2f2', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '659f97fc-28c4-440b-b957-a49733f7c2f2', 'content-type': 'application/x-amz-json-1.1', 'content-length': '96', 'date': 'Thu, 11 Aug 2022 22:23:49 GMT'}, 'RetryAttempts': 0}}
Amazon Command Line Interface (Amazon CLI)
  1. 使用以下代码示例可获取候选项定义

    aws sagemaker describe-auto-ml-job --auto-ml-job-name 'test-automl-job' --region us-west-2
  2. 使用以下代码示例可创建模型

    aws sagemaker create-model --model-name 'test-sagemaker-model' --containers '[{ "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", "ModelDataUrl": "s3://test-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/output/model.tar.gz", "Environment": { "AUTOML_SPARSE_ENCODE_RECORDIO_PROTOBUF": "1", "AUTOML_TRANSFORM_MODE": "feature-transform", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "application/x-recordio-protobuf", "SAGEMAKER_PROGRAM": "sagemaker_serve", "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" } }, { "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-xgboost:1.3-1-cpu-py3", "ModelDataUrl": "s3://test-bucket/out/test-job1/tuning/flicdf10v2-dpp0-xgb/test-job1E9-244-7490a1c0/output/model.tar.gz", "Environment": { "MAX_CONTENT_LENGTH": "20971520", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,probabilities" } }, { "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", "ModelDataUrl": "s3://test-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/output/model.tar.gz", "Environment": { "AUTOML_TRANSFORM_MODE": "inverse-label-transform", "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", "SAGEMAKER_INFERENCE_INPUT": "predicted_label", "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,labels,probabilities", "SAGEMAKER_PROGRAM": "sagemaker_serve", "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" } }]' \ --execution-role-arn 'arn:aws:iam::1234567890:role/sagemaker-execution-role' \ --region 'us-west-2'
  3. 使用以下代码示例可创建转换作业

    aws sagemaker create-transform-job --transform-job-name 'test-tranform-job'\ --model-name 'test-sagemaker-model'\ --transform-input '{ "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://test-bucket/data.csv" } }, "ContentType": "text/csv", "SplitType": "Line" }'\ --transform-output '{ "S3OutputPath": "s3://test-bucket/output/", "AssembleWith": "Line" }'\ --transform-resources '{ "InstanceType": "ml.m5.2xlarge", "InstanceCount": 1 }'\ --region 'us-west-2'
  4. 使用以下代码示例可检查转换作业的进度

    aws sagemaker describe-transform-job --transform-job-name 'test-tranform-job' --region us-west-2

    以下是来自转换作业的响应。

    { "TransformJobName": "test-tranform-job", "TransformJobArn": "arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-tranform-job", "TransformJobStatus": "InProgress", "ModelName": "test-model", "TransformInput": { "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://test-bucket/data.csv" } }, "ContentType": "text/csv", "CompressionType": "None", "SplitType": "Line" }, "TransformOutput": { "S3OutputPath": "s3://test-bucket/output/", "AssembleWith": "Line", "KmsKeyId": "" }, "TransformResources": { "InstanceType": "ml.m5.2xlarge", "InstanceCount": 1 }, "CreationTime": 1662495635.679, "TransformStartTime": 1662495847.496, "DataProcessing": { "InputFilter": "$", "OutputFilter": "$", "JoinSource": "None" } }

    TransformJobStatus 更改为 Completed 后,您可以在中 S3OutputPath 查看推理结果。

要在不同于生成模型的账户的其他账户中创建批量推理作业,请按照部署来自不同账户的模型中的说明进行操作。然后,您可以按照使用 SageMaker API 进行部署中的步骤创建模型和转换作业。