

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

# 创建模型
<a name="async-inference-create-endpoint-create-model"></a>

以下示例说明如何使用 适用于 Python (Boto3) 的 Amazon SDK创建模型。前几行定义：
+ `sagemaker_client`：低级 SageMaker AI 客户端对象，可轻松向 Amazon 服务发送和接收请求。
+ `sagemaker_role`: 一个带有 A SageMaker I IAM 角色的字符串变量 Amazon 资源名称 (ARN)。
+ `aws_region`: 带有您所在 Amazon 地区名称的字符串变量。

```
import boto3

# Specify your AWS Region
aws_region={{'<aws_region>'}}

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Role to give SageMaker permission to access Amazon services.
sagemaker_role= "arn:aws:iam::{{<account>:role/*}}"
```

接下来，指定存储在 Amazon S3 中的预先训练模型的位置。在此示例中，我们使用名`demo-xgboost-model.tar.gz`为的预训练 XGBoost 模型。完整的 Amazon S3 URI 存储在字符串变量中 `model_url`：

```
#Create a variable w/ the model S3 URI
s3_bucket = {{'<your-bucket-name>'}} # Provide the name of your S3 bucket
bucket_prefix='saved_models'
model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz"

#Specify S3 bucket w/ model
model_url = f"s3://{s3_bucket}/{model_s3_key}"
```

指定主容器。对于主容器，您可以指定包含推理代码的 Docker 映像、构件（来自先前的训练）以及自定义环境映射，供推理代码在您部署模型进行预测时使用。

 在此示例中，我们指定了一个 XGBoost 内置算法容器镜像：

```
from sagemaker import image_uris

# Specify an AWS container image. 
container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')
```

使用在 Amazon A SageMaker I 中创建模型`CreateModel`。指定以下内容：
+ `ModelName`：模型的名称（在此示例中，存储在名为 `model_name` 的字符串变量中）。
+ `ExecutionRoleArn`：Amazon A SageMaker I 可以代入的 IAM 角色的亚马逊资源名称 (ARN)，用于访问模型工件和 Docker 镜像，以便在 ML 计算实例上部署或批量转换任务。
+ `PrimaryContainer`：主 Docker 映像的位置，其中包含推理代码、关联构件和自定义环境映射，供推理代码在部署模型进行预测时使用。

```
model_name = {{'<The_name_of_the_model>'}}

#Create model
create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        'Image': container,
        'ModelDataUrl': model_url,
    })
```

有关 SageMaker API 参数的完整列表，请参阅 API 参考指南中的[https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateModel.html)描述。

如果您使用的是 A SageMaker I 提供的容器，则可以通过在此步骤中设置环境变量，将模型服务器超时和有效负载大小从默认值增加到框架支持的最大值。如果您没有明确设置这些变量，则可能无法利用异步推理支持的最大超时和负载大小。以下示例说明如何基于 TorchServe为 PyTorch 推理容器设置环境变量。

```
model_name = {{'<The_name_of_the_model>'}}

#Create model
create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        'Image': container,
        'ModelDataUrl': model_url,
        'Environment': {
            'TS_MAX_REQUEST_SIZE': '100000000',
            'TS_MAX_RESPONSE_SIZE': '100000000',
            'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'
        },
    })
```

在创建了端点之后，您应从 `inference.py` 脚本中打印环境变量，以测试是否正确设置了环境变量。下表列出了多个框架的环境变量，您可以设置这些变量来更改默认值。


| 框架 | 环境变量 | 
| --- | --- | 
| PyTorch 1.8（基于 TorchServe） | 'TS\_MAX\_REQUEST\_SIZE': '100000000'<br />'TS\_MAX\_RESPONSE\_SIZE': '100000000'<br />'TS\_DEFAULT\_RESPONSE\_TIMEOUT': '1000' | 
| PyTorch 1.4（基于彩信） | 'MMS\_MAX\_REQUEST\_SIZE': '1000000000'<br />'MMS\_MAX\_RESPONSE\_SIZE': '1000000000'<br />'MMS\_DEFAULT\_RESPONSE\_TIMEOUT': '900' | 
| HuggingFace 推理容器（基于彩信） | 'MMS\_MAX\_REQUEST\_SIZE': '2000000000'<br />'MMS\_MAX\_RESPONSE\_SIZE': '2000000000'<br />'MMS\_DEFAULT\_RESPONSE\_TIMEOUT': '900' | 