

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

# 运行批量推理作业
<a name="autopilot-deploy-models-batch"></a>

批量预测也称为离线推理，可根据一批观察数据生成模型预测。对于大型数据集或者在您不需要立即响应模型预测请求时，批量推理是很好的选择。与之对比的是，在线推理（[实时推理](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-deploy-models.html#autopilot-deploy-models-realtime)）会实时生成预测。你可以使用 Python SDK、Autopilot 用户界面 (UI)、[SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/) ([boto3) 或 () 从自动驾驶模型中AWS 进行](https://aws.amazon.com/sdk-for-python/)批量推断。 AWS Command Line Interface [AWS CLI](https://docs.aws.amazon.com/cli/)

以下选项卡显示了部署模型的三个选项：使用 APIs、Autopilot UI 或使用从不同的账户 APIs 进行部署。这些说明假定您已在 Autopilot 中创建了模型。如果您还没有模型，请参阅 [使用 AutoML API 为表格数据创建回归或分类作业](autopilot-automate-model-development-create-experiment.md)。要查看每个选项的示例，请打开各个选项卡。

## 使用 Autopilot UI 部署模型
<a name="autopilot-deploy-models-batch-ui"></a>

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

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

1. 登录[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)并从导航窗格中选择 **Studio**。

1. 在左侧导航窗格中，选择 **Studio**。

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

1. 选择要为其启动 Studio Classic 应用程序的用户配置文件。如果域中没有用户配置文件，请选择**创建用户配置文件**。有关更多信息，请参阅[添加用户配置文件](https://docs.aws.amazon.com/sagemaker/latest/dg/domain-user-profile-add.html)。

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

1. 当 SageMaker Studio Classic 主机打开时，选择 “**启动 SageMaker Studio**” 按钮。

1. 从左侧导航窗格中选择 **AutoML**。

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

1. 在**模型名称**部分中，选择要部署的模型。

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

1. 在页面顶部，选择**批量预测**。

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

1. 在**输入数据配置**部分中，打开下拉菜单。

   1. 对于 **S3 数据类型**，请选择**ManifestFile**或 **S3** Prefix。

   1. **对于 “**分割” 类型**，选择 “**线路**”、“**录音**” **TFRecord**或 “无”。**

   1. 对于**压缩**，选择 **Gzip** 或**无**。

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

1. 在**输出数据配置**下，输入用于存储输出数据的 S3 存储桶，然后选择如何[组合作业的输出](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#sagemaker-Type-TransformOutput-AssembleWith)。

   1. 对于**其他配置（可选）**，您可以输入 MIME 类型和 **S3 加密密钥**。

1. 对于**输入/输出筛选和数据联接（可选）**，您可以输入 JSONpath 表达式来筛选输入数据，将输入源数据与输出数据联接，然后输入 JSONpath 表达式来筛选输出数据。

   1. 有关每种过滤器的示例，请参阅 [DataProcessing API](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html#sagemaker-Type-DataProcessing-InputFilter)。

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

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

## 使用部署 SageMaker APIs
<a name="autopilot-deploy-models-batch-steps"></a>

要使用 SageMaker APIs 进行批量推理，需要三个步骤：

1. **获取候选项定义** 

   中的候选定义[InferenceContainers](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLCandidate.html#sagemaker-Type-AutoMLCandidate-InferenceContainers)用于创建 A SageMaker I 模型。

   以下示例说明如何使用 [DescribeAutoMLJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJob.html)API 获取最佳候选模型的候选定义。以以下 AWS CLI 命令为例。

   ```
   aws sagemaker describe-auto-ml-job --auto-ml-job-name {{<job-name>}} --region {{<region>}}
   ```

   使用 [ListCandidatesForAutoMLJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListCandidatesForAutoMLJob.html)API 列出所有候选人。请参阅以下 AWS CLI 命令示例。

   ```
   aws sagemaker list-candidates-for-auto-ml-job --auto-ml-job-name {{<job-name>}} --region {{<region>}}
   ```

1. **创建 A SageMaker I 模型**

   要使用 [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API 创建 SageMaker AI 模型，请使用前面步骤中的容器定义。请参阅以下 AWS 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>}}
   ```

1. **创建 A SageMaker I 转换作业** 

   以下示例使用 [CreateTransformJob](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-transform-job.html)AP SageMaker I 创建 AI 转换作业。以以下 AWS 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](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTransformJob.html)API 检查转换任务的进度。以以下 AWS 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 SD AWS K、Python SDK (boto3) 和. AWS CLI

------
#### [ SageMaker Python SDK ]

以下示例使用 **[SageMaker Python 开发工具包](https://sagemaker.readthedocs.io/en/stable/overview.html)**进行批量预测。

```
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)
```

------
#### [ AWS SDK for Python (boto3) ]

 以下示例使用 **AWS 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}}
```

------
#### [ AWS Command Line Interface (AWS CLI) ]

1. 使用以下代码示例可**获取候选项定义**。

   ```
   aws sagemaker describe-auto-ml-job --auto-ml-job-name '{{test-automl-job}}' --region {{us-west-2}}
   ```

1. 使用以下代码示例可**创建模型**。

   ```
   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://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-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}}'
   ```

1. 使用以下代码示例可**创建转换作业**。

   ```
   aws sagemaker create-transform-job --transform-job-name '{{test-tranform-job}}'\
    --model-name '{{test-sagemaker-model}}'\
   --transform-input '{
           "DataSource": {
               "S3DataSource": {
                   "S3DataType": "S3Prefix",
                   "S3Uri": "{{s3://amzn-s3-demo-bucket/data.csv}}"
               }
           },
           "ContentType": "{{text/csv}}",
           "SplitType": "Line"
       }'\
   --transform-output '{
           "S3OutputPath": "{{s3://amzn-s3-demo-bucket/output/}}",
           "AssembleWith": "Line"
       }'\
   --transform-resources '{
           "InstanceType": "{{ml.m5.2xlarge}}",
           "InstanceCount": {{1}}
       }'\
   --region '{{us-west-2}}'
   ```

1. 使用以下代码示例可**检查转换作业的进度**。

   ```
   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://amzn-s3-demo-bucket/data.csv}}"
               }
           },
           "ContentType": "{{text/csv}}",
           "CompressionType": "None",
           "SplitType": "Line"
       },
       "TransformOutput": {
           "S3OutputPath": "{{s3://amzn-s3-demo-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` 查看推理结果。

------

## 部署来自不同账户的模型
<a name="autopilot-deploy-models-batch-across-accounts"></a>

要在不同于生成模型的账户的其他账户中创建批量推理作业，请按照[部署来自不同账户的模型](autopilot-deploy-models-realtime.md#autopilot-deploy-models-realtime-across-accounts)中的说明进行操作。然后，您可以按照[使用部署 SageMaker APIs](#autopilot-deploy-models-batch-steps)中的步骤创建模型和转换作业。