

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

# 将模型部署到 Amazon EC2
<a name="ex1-model-deployment"></a>

要获得预测，请使用亚马逊 A SageMaker I 将您的模型部署到亚马逊 EC2。

**Topics**
+ [将模型部署到 SageMaker AI 托管服务](#ex1-deploy-model)
+ [（可选）使用 SageMaker AI 预测器重用托管端点](#ex1-deploy-model-sdk-use-endpoint)
+ [（可选）利用批量转换进行预测](#ex1-batch-transform)

## 将模型部署到 SageMaker AI 托管服务
<a name="ex1-deploy-model"></a>

要使用 Amazon A SageMaker I 通过 Amazon EC2 托管模型，请[创建并运行训练作业](ex1-train-model.md#ex1-train-model-sdk)通过调用`xgb_model`估算器的`deploy`方法来部署您训练过的模型。调用 `deploy` 方法时，必须指定用于托管端点的 EC2 ML 实例的数量和类型。

```
import sagemaker
from sagemaker.serializers import CSVSerializer
xgb_predictor=xgb_model.deploy(
    initial_instance_count=1,
    instance_type='ml.t2.medium',
    serializer=CSVSerializer()
)
```
+ `initial_instance_count` (int) – 要部署模型的实例数量。
+ `instance_type` (str) – 要操作已部署模型的实例类型。
+ `serializer`(int)-将各种格式（ NumPy 数组、列表、文件或缓冲区）的输入数据序列化为 CSV 格式的字符串。我们之所以使用它，是因为该 XGBoost 算法接受 CSV 格式的输入文件。

该`deploy`方法创建可部署模型，配置 SageMaker AI 托管服务端点，然后启动终端节点来托管模型。有关更多信息，请参阅 Amaz [on Pyth SageMaker on](https://sagemaker.readthedocs.io/en/stable) SDK 中[SageMaker 人工智能通用估算器的部署类方法](https://sagemaker.readthedocs.io/en/stable/estimators.html#sagemaker.estimator.Estimator.deploy)。要检索 `deploy` 方法生成的端点的名称，请运行以下代码：

```
xgb_predictor.endpoint_name
```

这应该返回 `xgb_predictor` 的端点名称。端点名称的格式为 `"sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS"`。此端点在 ML 实例中保持活动状态，您可以随时进行即时预测，除非稍后将其关闭。复制此端点名称并将其保存，以便在 SageMaker Studio 或 SageMaker AI 笔记本实例的其他地方重复使用和进行实时预测。

**提示**  
要了解有关编译和优化模型以部署到 Amazon EC2 实例或边缘设备的更多信息，请参阅[使用 Neo 编译和部署模型](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html)。

## （可选）使用 SageMaker AI 预测器重用托管端点
<a name="ex1-deploy-model-sdk-use-endpoint"></a>

将模型部署到终端节点后，您可以通过配对端点来设置新的 SageMaker AI 预测器，并在任何其他笔记本中持续进行实时预测。以下示例代码演示如何使用 SageMaker AI Predictor 类使用相同的端点设置新的预测变量对象。重新使用 `xgb_predictor` 中使用的端点名称。

```
import sagemaker
xgb_predictor_reuse=sagemaker.predictor.Predictor(
    endpoint_name="sagemaker-xgboost-YYYY-MM-DD-HH-MM-SS-SSS",
    sagemaker_session=sagemaker.Session(),
    serializer=sagemaker.serializers.CSVSerializer()
)
```

`xgb_predictor_reuse` Predictor 的行为与原始 `xgb_predictor` 完全相同。有关更多信息，请参阅 A [maz SageMaker on Python 软件开发工具包中的 A SageMaker ](https://sagemaker.readthedocs.io/en/stable) [I 预测器](https://sagemaker.readthedocs.io/en/stable/predictors.html#sagemaker.predictor.RealTimePredictor)类。

## （可选）利用批量转换进行预测
<a name="ex1-batch-transform"></a>

您无需在生产环境中托管终端节点，而是可以运行一次性批量推理作业，使用 SageMaker AI 批量转换对测试数据集进行预测。模型训练完成后，您可以将估计器扩展到基于 [SageMaker AI](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html) Transformer 类的`transformer`对象。批量转换器从指定的 S3 存储桶中读取输入数据并进行预测。

**运行批量转换作业**

1. 运行以下代码，将测试数据集的特征列转换为 CSV 文件并上传到 S3 存储桶：

   ```
   X_test.to_csv('test.csv', index=False, header=False)
   
   boto3.Session().resource('s3').Bucket(bucket).Object(
   os.path.join(prefix, 'test/test.csv')).upload_file('test.csv')
   ```

1. 为批处理转换任务指定 S3 存储桶 URIs 的输入和输出，如下所示：

   ```
   # The location of the test dataset
   batch_input = 's3://{}/{}/test'.format(bucket, prefix)
   
   # The location to store the results of the batch transform job
   batch_output = 's3://{}/{}/batch-prediction'.format(bucket, prefix)
   ```

1. 创建一个 transformer 对象，指定最少数量的参数：`instance_count` 和 `instance_type` 参数用于运行批量转换作业，`output_path` 参数用于保存预测数据，如下所示：

   ```
   transformer = xgb_model.transformer(
       instance_count=1, 
       instance_type='ml.m4.xlarge', 
       output_path=batch_output
   )
   ```

1. 通过执行 `transformer` 对象的 `transform()` 方法启动批量转换作业，如下所示：

   ```
   transformer.transform(
       data=batch_input, 
       data_type='S3Prefix',
       content_type='text/csv', 
       split_type='Line'
   )
   transformer.wait()
   ```

1. 批量转换作业完成后， SageMaker AI 会创建保存在`batch_output`路径中的`test.csv.out`预测数据，该数据应采用以下格式：`s3://sagemaker-<region>-111122223333/demo-sagemaker-xgboost-adult-income-prediction/batch-prediction`。运行以下 AWS CLI 命令下载批量转换作业的输出数据：

   ```
   ! aws s3 cp {batch_output} ./ --recursive
   ```

   这应该在当前工作目录下创建 `test.csv.out` 文件。您将能够看到根据 XGBoost 训练作业的逻辑回归预测的浮点值。