

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

# 为实时推理部署模型
<a name="realtime-endpoints-deploy-models"></a>

**重要**  
允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限，是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记，则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息，请参阅 [提供标记 A SageMaker I 资源的权限](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
[AWS 亚马逊 A SageMaker I 的托管策略](security-iam-awsmanpol.md)授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

使用 SageMaker AI 托管服务部署模型有多种选择。您可以使用 SageMaker Studio 以交互方式部署模型。或者，你可以使用 SDK（例如 Python AWS SDK 或 SageMaker Python SDK for Boto3），以编程方式部署模型。您也可以使用进行部署 AWS CLI。

## 开始前的准备工作
<a name="deploy-prereqs"></a>

在部署 A SageMaker I 模型之前，请找到并记下以下内容：
+ 您的 AWS 区域 Amazon S3 存储桶所在的位置
+ 存储模型构件的 Amazon S3 URI 路径
+  SageMaker 人工智能的 IAM 角色
+ 包含推理代码的自定义镜像的 Docker Amazon ECR URI 注册表路径，或者支持和支持的内置 Docker 镜像的框架和版本 AWS

 有关每个地图中 AWS 服务 可用的列表 AWS 区域，请参阅[区域地图和边缘网络](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关如何创建 IAM 角色的信息，请参阅[创建 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。

**重要**  
存储模型构件的 Amazon S3 存储桶必须与所创建的模型位于相同 AWS 区域 中。

## 多种模式的资源共享利用
<a name="deployed-shared-utilization"></a>

您可以使用 Amazon A SageMaker I 将一个或多个模型部署到终端节点。当多个模型共享一个终端节点时，它们会共同使用托管在那里的资源，例如机器学习计算实例和加速器。 CPUs将多个模型部署到一个端点的最灵活方法是将每个模型定义为一个*推理组件*。

### 推理组件
<a name="inference-components"></a>

推理组件是一个 SageMaker AI 托管对象，可用于将模型部署到终端节点。在推理组件设置中，您可以指定模型、端点以及模型如何利用端点托管的资源。要指定模型，您可以指定 A SageMaker I 模型对象，也可以直接指定模型伪影和图像。

在设置中，您可以通过自定义如何为模型分配所需的 CPU 内核、加速器和内存来优化资源利用率。您可以为一个端点部署多个推理组件，每个推理组件包含一个模型和该模型的资源利用需求。

部署推理组件后，您可以在 SageMaker API 中使用 InvokeEndpoint 操作时直接调用关联的模型。

推理组件具有以下优点

**弹性**  
推理组件将托管模型的细节与端点本身分离开来。这样就能更灵活地控制端点托管和提供模型的方式。您可以在同一基础设施上托管多个模型，也可以根据需要从端点添加或删除模型。您可以独立更新每个模型。

**可扩展性**  
您可以指定要托管的每个模型的副本数量，还可以设置副本的最低数量，以确保模型加载的数量符合服务请求的要求。您可以将任何推理组件副本缩减为零，这样就可以为另一个副本的缩放腾出空间。

SageMaker 当您使用以下方法部署模型时，AI 会将模型打包为推理组件：
+ SageMaker 经典工作室。
+ 用于部署模型对象的 SageMaker Python SDK（将终端节点类型设置为其中`EndpointType.INFERENCE_COMPONENT_BASED`）。
+ 用于定义部署 适用于 Python (Boto3) 的 AWS SDK 到终端节点的`InferenceComponent`对象。

## 使用 SageMaker Studio 部署模型
<a name="deploy-models-studio"></a>

完成以下步骤，通过 SageMaker Studio 以交互方式创建和部署模型。有关 Studio 的更多信息，请参阅 [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) 文档。有关各种部署场景的更多演练，请参阅博客 Pack [age 并使用 Amazon A SageMaker I LLMs 轻松部署经典机器学习模型 — 第 2 部分](https://aws.amazon.com/blogs/machine-learning/package-and-deploy-classical-ml-and-llms-easily-with-amazon-sagemaker-part-2-interactive-user-experiences-in-sagemaker-studio/)。

### 准备构件和权限
<a name="studio-prereqs"></a>

在 SageMaker Studio 中创建模型之前，请先完成本节。

在 Studio 中，您有两种方法来获取构件和创建模型：

1. 您可以携带预先打包好的 `tar.gz` 存档，其中应包括模型构件、任何自定义推理代码以及 `requirements.txt` 文件中列出的任何依赖关系。

1. SageMaker AI 可以为你打包你的神器。你只需要将原始模型工件和任何依赖项带到`requirements.txt`文件中， SageMaker AI 就可以为你提供默认的推理代码（或者你可以用自己的自定义推理代码覆盖默认代码）。 SageMaker AI 支持以下框架的此选项： PyTorch， XGBoost。

除了带上您的模型、您的 AWS Identity and Access Management (IAM) 角色和 Docker 容器（或 A SageMaker I 具有预构建容器的所需框架和版本）外，您还必须授予通过 AI Stud SageMaker io 创建和部署模型的权限。

您应该将[AmazonSageMakerFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html)策略附加到您的 IAM 角色上，这样您就可以访问 SageMaker AI 和其他相关服务。要在 Studio 中查看实例类型的价格，您还必须附加[AWS PriceListServiceFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSPriceListServiceFullAccess.html)政策（或者如果您不想附加整个政策，更具体地说，就是`pricing:GetProducts`操作）。

如果您选择在创建模型时上传模型构件（或上传样本有效载荷文件以获得推理建议），则必须创建一个 Amazon S3 存储桶。存储桶名称的前缀必须是 `SageMaker AI`。 SageMaker 人工智能的替代大写形式也是可以接受的：`Sagemaker`或。`sagemaker`

我们建议您使用存储桶命名规范 `sagemaker-{Region}-{accountID}`。该存储桶用于存储您上传的构件。

创建存储桶后，将以下 CORS（跨源资源共享）策略附加到存储桶：

```
[
    {
        "AllowedHeaders": ["*"],
        "ExposeHeaders": ["Etag"],
        "AllowedMethods": ["PUT", "POST"],
        "AllowedOrigins": ['https://*.sagemaker.aws'],
    }
]
```

您可以使用以下任一方法将 CORS 策略附加到 Amazon S3 存储桶：
+ 通过 Amazon S3 管理控制台中的[编辑跨源资源共享（CORS）](https://s3.console.aws.amazon.com/s3/bucket/bucket-name/property/cors/edit)页面
+ 使用亚马逊 S3 API [PutBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html)
+ 使用以下 put-bucket-cors AWS CLI 命令：

  ```
  aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."
  ```

### 创建可部署模型
<a name="studio-create-model"></a>

在此步骤中，您将通过提供构件以及其他规范（例如所需的容器和框架、任何自定义推理代码和网络设置）来在 SageMaker AI 中创建模型的可部署版本。

通过执行以下操作在 SageMaker Studio 中创建可部署模型：

1. 打开 SageMaker Studio 应用程序。

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

1. 选择**可部署模型**选项卡。

1. 在**可部署模型**页面，选择**创建**。

1. 在**创建可部署模型**页面上，在**模型名称**字段中输入模型名称。

在**创建可部署模型**页面上还有几个部分需要填写。

**容器定义**部分看起来就像下面的界面截图：

![\[在 Studio 中创建模型的容器定义部分界面截图。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/inference/studio-container-definition.png)


**对于**容器定义**部分，请执行以下操作：**

1. 对于**容器类型**，如果您想使用 SageMaker AI 托管的**容器，请选择预建**容器；如果您有**自己的容器，请选择自带**容器。

1. 如果您选择了**预构建容器**，请选择要使用的**容器框架**、**框架版本**和**硬件类型**。

1. 如果您选择了**自带容器**，请为**容器映像的 ECR 路径**输入 Amazon ECR 路径。

然后，填写**构件**部分，如下界面截图所示：

![\[在 Studio 中创建模型的构件部分界面截图。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/inference/studio-artifacts-section.png)


**对于**构件**部分，请执行以下操作：**

1. 如果你使用的是 SageMaker AI 支持的框架之一来打包模型工件（PyTorch 或 XGBoost），那么对于**构件**，你可以选择**上传工件**选项。使用此选项，您可以简单地指定原始模型工件、您拥有的任何自定义推理代码以及 requirements.txt 文件， SageMaker AI 会为您打包存档。执行以下操作：

   1. 在**构件**中，选择**上传构件**继续提供文件。否则，如果您已经有一个包含模型文件、推理代码和 `requirements.txt` 文件的 `tar.gz` 存档，则选择**输入 S3 URI 到预打包构件**。

   1. 如果您选择上传项目，则对于 **S3 存储桶**，请输入 Amazon S3 路径，指向您希望 SageMaker AI 在为您打包项目后将其存储到的存储桶。然后，完成以下步骤。

   1. 对于**上传模型构件**，请上传模型文件。

   1. 对于**推理代码**，如果您想**使用 SageMaker AI 提供的用于提供推理**的默认代码，请选择使用默认推理代码。否则，请选择**上传自定义推理代码**，以使用您自己的推理代码。

   1. 对于**上传 requirements.txt**，请上传一个文本文件，其中列出要在运行时安装的任何依赖关系。

1. 如果您没有使用 A SageMaker I 支持的框架来打包模型工件，Studio 会向您显示**预打包的构件**选项，并且您必须提供所有已打包为`tar.gz`存档的构件。执行以下操作：

   1. 对于**预打包构件**，如果您已将 `tar.gz` 存档上传到 Amazon S3，请选择**输入预打包模型构件的 S3 URI**。如果您想直接将存档**上传到 SageMaker AI，请选择上传预先打包的模型工件**。

   1. 如果您选择了**预打包模型构件的输入 S3 URI**，请为 **S3 URI** 输入存档的 Amazon S3 路径。否则，请选择并从本地计算机上传存档。

下一部分是**安全性**，界面截图如下：

![\[在 Studio 中创建模型的安全性部分界面截图。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/inference/studio-security-section.png)


**对于**安全性**部分，请执行以下操作：**

1. 对于 **IAM 角色**，输入 IAM 角色的 ARN。

1. (可选）对于**虚拟私有云（VPC）**，您可以选择一个 Amazon VPC 来存储模型配置和构件。

1. (可选）如果您要限制容器的互联网访问，请打开**网络隔离**开关。

最后，您可以选择填写**高级选项**部分，如下界面截图所示：

![\[在 Studio 中创建模型的高级选项部分界面截图。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/inference/studio-advanced-options.png)


**(可选）对于**高级选项**部分，执行以下操作：**

1. 如果您想在模型创建后对其运行 Amazon SageMaker Inference 推荐器作业，请打开**自定义实例**推荐开关。Inference Recommender 是一项为您提供推荐实例类型的功能，用于优化推理性能和成本。您可以在准备部署模型时查看这些实例建议。

1. 在**添加环境变量**中，为容器输入键值对形式的环境变量。

1. 在**标签**中，以键值对形式输入任何标签。

1. 完成模型和容器配置后，选择**创建可部署模型**。

现在 SageMaker Studio 中应该有一个可以部署的模型。

### 部署模型
<a name="studio-deploy"></a>

最后，将上一步配置的模型部署到 HTTPS 端点。您可以将单个模型或多个模型部署到端点。

**模型和端点兼容性**  
在将模型部署到端点之前，模型和端点必须兼容，以下设置的值必须相同：  
IAM 角色
Amazon VPC，包括其子网络和安全组
网络隔离（启用或禁用）
Studio 可通过以下方式防止您将模型部署到不兼容的端点：  
如果您尝试将模型部署到新的终端节点， SageMaker AI 会使用兼容的初始设置配置该终端节点。如果您更改了这些设置，破坏了兼容性，Studio 就会显示警告并阻止您的部署。
如果您尝试部署到现有端点，而该端点不兼容，Studio 会显示警告并阻止部署。
如果您尝试将多个模型添加到部署中，Studio 会阻止您部署彼此不兼容的模型。
当 Studio 显示有关模型和端点不兼容的警告时，您可以在警告中选择**查看详情**，以查看哪些设置不兼容。

部署模型的一种方法是在 Studio 中执行以下操作：

1. 打开 SageMaker Studio 应用程序。

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

1. 在**模型**页面上，从 SageMaker AI 模型列表中选择一个或多个模型。

1. 选择**部署**。

1. 为**端点名称**打开下拉菜单。您可以选择一个现有的端点，也可以创建一个新的端点来部署模型。

1. 在**实例类型**中，选择要用于端点的实例类型。如果您之前为模型运行过推理推荐作业，那么您推荐的实例类型就会出现在列表中，标题为**推荐**。否则，您会看到一些可能适合您的模型的**预测性实例**。
**的实例类型兼容性 JumpStart**  
如果您正在部署 JumpStart 模型，Studio 仅显示该模型支持的实例类型。

1. 对于**初始实例数**，请输入您希望为端点配置的初始实例数。

1. 对于**最大实例数**，指定端点纵向扩展以适应流量增加时可提供的最大实例数。

1. 如果您要部署的模型是模型中心最常用的 JumpStart LLMs模型之一，则在实例类型和实例计数字段之后会显示**替代配置**选项。

   对于最受欢迎的实例类型 JumpStart LLMs， AWS 具有预先基准测试的实例类型，可以针对成本或性能进行优化。这些数据可以帮助您决定使用哪种实例类型来部署 LLM。选择**其他配置**，打开包含预设基准数据的对话框。面板看起来就像下面的界面截图：  
![\[其他配置框界面截图\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/inference/studio-jumpstart-alternate-configurations.png)

   在**其他配置**框中执行以下操作：

   1. 选择一个实例类型。您可以选择**每小时成本**或**最佳性能**，查看为指定模型优化成本或性能的实例类型。您也可以选择 “**其他支持的实例**”，查看与该 JumpStart 模型兼容的其他实例类型的列表。请注意，在此选择实例类型会覆盖之前在步骤 6 中指定的任何实例选择。

   1. (可选）打开**自定义所选配置**开关，以指定**最大总令牌数**（允许的最大令牌数，即输入令牌数与模型生成的输出之和）、**最大输入令牌长度**（允许每个请求输入的最大令牌数）和**最大并发请求数**（模型一次可处理的最大请求数）。

   1. 选择**选择**确认实例类型和配置设置。

1. **模型**字段应已填入要部署的一个或多个模型的名称。您可以选择**添加模型**将更多模型添加到部署中。对于添加的每个模型，请填写以下字段：

   1. 在 **CPU 内核数**中，输入您希望专用于模型使用的 CPU 内核数。

   1. 在**副本的最小数量**中，输入您希望在任何给定时间在端点上托管的模型副本的最小数量。

   1. 在**最小 CPU 内存 (MB)**中，输入模型所需的最小内存量（单位：MB）。

   1. 在**最大 CPU 内存 (MB)**中，输入允许模型使用的最大内存容量（单位：MB）。

1. (可选）对于**高级选项**，执行以下操作：

   1. 对于 **IAM 角色**，请使用默认 A SageMaker I IAM 执行角色，或者指定自己拥有所需权限的角色。请注意，此 IAM 角色必须与创建可部署模型时指定的角色相同。

   1. 对于**虚拟私有云（VPC）**，您可以指定一个 VPC 来托管端点。

   1. 对于**加密 KMS 密** AWS KMS 钥，选择一个密钥来加密连接到托管终端节点的 ML 计算实例的存储卷上的数据。

   1. 打开**启用网络隔离**开关，以限制容器的互联网访问。

   1. 在**超时配置**中，输入**模型数据下载超时（秒）**和**容器启动运行状况检查超时（秒）**字段的值。这些值分别确定 SageMaker AI 允许将模型下载到容器和启动容器的最大时间。

   1. 在**标签**中，以键值对形式输入任何标签。
**注意**  
SageMaker AI 使用与您正在部署的模型兼容的初始值配置 IAM 角色、VPC 和网络隔离设置。如果您更改了这些设置，破坏了兼容性，Studio 就会显示警告并阻止您的部署。

配置完选项后，页面应如下界面截图所示。

![\[Studio 中部署模型页面的界面截图。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/inference/studio-deploy-realtime-model-2.png)


配置部署后，选择**部署**创建端点并部署模型。

## 使用 Python 部署模型 SDKs
<a name="deploy-models-python"></a>

使用 SageMaker Python SDK，您可以通过两种方式构建模型。首先，从 `Model` 或 `ModelBuilder` 类中创建一个模型对象。如果您使用 `Model` 类创建 `Model` 对象，则需要指定模型包或推理代码（取决于模型服务器）、处理客户端与服务器之间数据序列化和反序列化的脚本，以及上传到 Amazon S3 供使用的任何依赖关系。构建模型的第二种方法是使用 `ModelBuilder`，并为其提供模型构件或推理代码。`ModelBuilder` 会自动捕捉您的依赖关系，推导出所需的序列化和反序列化函数，并将您的依赖关系打包，创建您的 `Model` 对象。有关 `ModelBuilder`的更多信息，请参阅[使用 Amazon A SageMaker I 创建模型 ModelBuilder](how-it-works-modelbuilder-creation.md)。

下文将介绍创建模型和部署模型对象的两种方法。

### 设置
<a name="python-setup"></a>

以下示例为模型部署过程做了准备。它们导入必要的库，并定义用于定位模型构件的 S3 URL。

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

**Example 导入语句**  
以下示例从 SageMaker Python SDK、Python SDK (Boto3) 和 Python 标准库中导入模块。这些模块提供了有用的方法，可以帮助您部署模型，下面的示例也会用到它们。  

```
import boto3
from datetime import datetime
from sagemaker.compute_resource_requirements.resource_requirements import ResourceRequirements
from sagemaker.predictor import Predictor
from sagemaker.enums import EndpointType
from sagemaker.model import Model
from sagemaker.session import Session
```

------
#### [ boto3 inference components ]

**Example 导入语句**  
下面的示例从 Python SDK (Boto3) 和 Python 标准库导入了模块。这些模块提供了有用的方法，可以帮助您部署模型，下面的示例也会用到它们。  

```
import boto3
import botocore
import sys
import time
```

------
#### [ boto3 models (without inference components) ]

**Example 导入语句**  
下面的示例从 Python SDK (Boto3) 和 Python 标准库导入了模块。这些模块提供了有用的方法，可以帮助您部署模型，下面的示例也会用到它们。  

```
import boto3
import botocore
import datetime
from time import gmtime, strftime
```

------

**Example 模型构件 URL**  
以下代码构建了一个 Amazon S3 URL 示例。该 URL 可定位 Amazon S3 存储桶中预训练模型的模型构件。  

```
# Create a variable w/ the model S3 URL

# The name of your S3 bucket:
s3_bucket = "amzn-s3-demo-bucket"
# The directory within your S3 bucket your model is stored in:
bucket_prefix = "sagemaker/model/path"
# The file name of your model artifact:
model_filename = "my-model-artifact.tar.gz"
# Relative S3 path:
model_s3_key = f"{bucket_prefix}/"+model_filename
# Combine bucket name, model file name, and relate S3 path to create S3 model URL:
model_url = f"s3://{s3_bucket}/{model_s3_key}"
```
完整的 Amazon S3 URL 保存在变量 `model_url` 中，并在下面的示例中使用。

### 概述
<a name="python-overview"></a>

您可以通过多种方式使用 SageMaker Python SDK 或适用于 Python 的 SDK (Boto3) 部署模型。以下章节总结了几种可能方法的操作步骤。下面的示例演示了这些步骤。

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

使用 SageMaker Python SDK，您可以通过以下任一方式构建模型：
+ **从 `Model` 类创建模型对象**：您必须指定模型包或推理代码（取决于您的模型服务器）、处理客户端和服务器之间数据序列化和反序列化的脚本，以及上传到 Amazon S3 供使用的任何依赖关系。
+ **从 `ModelBuilder` 类创建模型对象**：您只需提供模型构件或推理代码，`ModelBuilder` 就会自动捕捉您的依赖关系，推理出所需的序列化和反序列化函数，并打包您的依赖关系，创建您的 `Model` 对象。

  有关 `ModelBuilder`的更多信息，请参阅[使用 Amazon A SageMaker I 创建模型 ModelBuilder](how-it-works-modelbuilder-creation.md)。您还可以查看博客 Pack [age 并部署经典机器学习模型，并使用 SageMaker AI LLMs 轻松部署 — 第 1 部分](https://aws.amazon.com/blogs/machine-learning/package-and-deploy-classical-ml-and-llms-easily-with-amazon-sagemaker-part-1-pysdk-improvements/)，了解更多信息。

下面的示例介绍了创建模型和部署模型对象的两种方法。要以这些方式部署模型，您需要完成以下步骤：

1. 使用 `ResourceRequirements` 对象定义要分配给模型的端点资源。

1. 从 `Model` 或 `ModelBuilder` 类中创建模型对象。`ResourceRequirements` 对象在模型设置中指定。

1. 使用 `Model` 对象的 `deploy` 方法将模型部署到端点。

------
#### [ boto3 inference components ]

下面的示例演示了如何将模型分配给推理组件，然后将推理组件部署到端点。要以这种方式部署模型，您需要完成以下步骤：

1. （可选）使用[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html)方法创建 SageMaker AI 模型对象。

1. 通过创建端点配置对象来指定端点的设置。要创建它，您需要使用 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config) 方法。

1. 使用 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) 方法创建端点，并在请求中提供所创建的端点配置。

1. 使用 `create_inference_component` 方法创建推理组件。在设置中，您可以通过以下任一操作来指定模型：
   + 指定 A SageMaker I 模型对象
   + 指定模型映像 URI 和 S3 URL

   您还可以为模型分配端点资源。创建推理组件后，您就可以将模型部署到端点。您可以通过创建多个推理组件将多个模型部署到一个端点--每个模型一个推理组件。

------
#### [ boto3 models (without inference components) ]

下面的示例演示了如何创建模型对象，然后将模型部署到端点。要以这种方式部署模型，您需要完成以下步骤：

1. 使用[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html)方法创建 SageMaker AI 模型。

1. 通过创建端点配置对象来指定端点的设置。要创建它，您需要使用 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config) 方法。在端点配置中，您将模型对象分配给生产变体。

1. 使用 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) 方法创建端点。在请求中，提供您创建的端点配置。

   当您创建终端节点时， SageMaker AI 会配置终端节点资源，然后将模型部署到终端节点。

------

### 配置
<a name="python-configure"></a>

以下示例配置了将模型部署到端点所需的资源。

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

下面的示例使用 `ResourceRequirements` 对象为模型分配端点资源。这些资源包括 CPU 内核、加速器和内存。然后，示例从 `Model` 类中创建了一个模型对象。或者，您可以通过实例化[ModelBuilder](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-modelbuilder-creation.html)类并运行来创建模型对象，`build`该方法也显示在示例中。 `ModelBuilder`为模型打包提供了统一的接口，在本例中，它为大型模型部署准备模型。该示例利用 `ModelBuilder` 构建了一个 Hugging Face 模型。（您也可以传递 JumpStart 模型）。构建模型后，您就可以在模型对象中指定资源需求。下一步，您将使用该对象将模型部署到端点。

```
resources = ResourceRequirements(
    requests = {
        "num_cpus": 2,  # Number of CPU cores required:
        "num_accelerators": 1, # Number of accelerators required
        "memory": 8192,  # Minimum memory required in Mb (required)
        "copies": 1,
    },
    limits = {},
)

now = datetime.now()
dt_string = now.strftime("%d-%m-%Y-%H-%M-%S")
model_name = "my-sm-model"+dt_string

# build your model with Model class
model = Model(
    name = "model-name",
    image_uri = "image-uri",
    model_data = model_url,
    role = "arn:aws:iam::111122223333:role/service-role/role-name",
    resources = resources,
    predictor_cls = Predictor,
)
                        
# Alternate mechanism using ModelBuilder
# uncomment the following section to use ModelBuilder
/*
model_builder = ModelBuilder(
    model="<HuggingFace-ID>", # like "meta-llama/Llama-2-7b-hf"
    schema_builder=SchemaBuilder(sample_input,sample_output),
    env_vars={ "HUGGING_FACE_HUB_TOKEN": "<HuggingFace_token>}" }
)

# build your Model object
model = model_builder.build()

# create a unique name from string 'mb-inference-component'
model.model_name = unique_name_from_base("mb-inference-component")

# assign resources to your model
model.resources = resources
*/
```

------
#### [ boto3 inference components ]

下面的示例使用 `create_endpoint_config` 方法配置了一个端点。您可以在创建端点时将此配置分配给端点。在配置中，您可以定义一个或多个生产变体。对于每个变体，您可以选择希望 Amazon A SageMaker I 预配置的实例类型，也可以启用托管实例扩展。

```
endpoint_config_name = "endpoint-config-name"
endpoint_name = "endpoint-name"
inference_component_name = "inference-component-name"
variant_name = "variant-name"

sagemaker_client.create_endpoint_config(
    EndpointConfigName = endpoint_config_name,
    ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name",
    ProductionVariants = [
        {
            "VariantName": variant_name,
            "InstanceType": "ml.p4d.24xlarge",
            "InitialInstanceCount": 1,
            "ManagedInstanceScaling": {
                "Status": "ENABLED",
                "MinInstanceCount": 1,
                "MaxInstanceCount": 2,
            },
        }
    ],
)
```

------
#### [ boto3 models (without inference components) ]

**Example 模型定义**  
以下示例使用中的`create_model`方法定义了 SageMaker AI 模型 适用于 Python (Boto3) 的 AWS SDK。  

```
model_name = "model-name"

create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name",
    PrimaryContainer = {
        "Image": "image-uri",
        "ModelDataUrl": model_url,
    }
)
```
该示例指定了以下内容：  
+ `ModelName`：模型的名称（在此示例中，存储在名为 `model_name` 的字符串变量中）。
+ `ExecutionRoleArn`：Amazon A SageMaker I 可以代入的 IAM 角色的亚马逊资源名称 (ARN)，用于访问模型工件和 Docker 镜像，以便在 ML 计算实例上部署或批量转换任务。
+ `PrimaryContainer`：主 Docker 映像的位置，其中包含推理代码、关联构件和自定义环境映射，供推理代码在部署模型进行预测时使用。

**Example 端点配置**  
下面的示例使用 `create_endpoint_config` 方法配置了一个端点。Amazon SageMaker AI 使用此配置来部署模型。在配置中，您可以确定使用`create_model`方法创建的一个或多个模型，用于部署您希望 Amazon A SageMaker I 预配置的资源。  

```
endpoint_config_response = sagemaker_client.create_endpoint_config(
    EndpointConfigName = "endpoint-config-name", 
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint:
    ProductionVariants = [
        {
            "VariantName": "variant-name", # The name of the production variant.
            "ModelName": model_name, 
            "InstanceType": "ml.p4d.24xlarge",
            "InitialInstanceCount": 1 # Number of instances to launch initially.
        }
    ]
)
```
本例为 `ProductionVariants` 字段指定了以下键值：  
+ `VariantName`：生产变体的名称。
+ `ModelName`：您希望托管的模型的名称。这是您在创建模型时指定的名称。
+ `InstanceType`：计算实例类型。有关支持的计算实例类型列表[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html)和每种实例类型的[定价，请参阅和 SageMaker AI](https://aws.amazon.com/sagemaker/pricing/) 定价中的`InstanceType`字段。

------

### 部署
<a name="python-deploy"></a>

以下示例将模型部署到端点。

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

下面的示例使用模型对象的 `deploy` 方法将模型部署到实时 HTTPS 端点。如果您为模型创建和部署都指定了 `resources` 参数值，则为部署指定的资源优先。

```
predictor = model.deploy(
    initial_instance_count = 1,
    instance_type = "ml.p4d.24xlarge", 
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    resources = resources,
)
```

对于 `instance_type` 字段，示例指定了模型的 Amazon EC2 实例类型名称。对于 `initial_instance_count` 字段，它指定了端点运行的初始实例数。

下面的代码示例演示了另一种情况，即把一个模型部署到一个端点，然后再把另一个模型部署到同一个端点。在这种情况下，您必须为两个模型的 `deploy` 方法提供相同的端点名称。

```
# Deploy the model to inference-component-based endpoint
falcon_predictor = falcon_model.deploy(
    initial_instance_count = 1,
    instance_type = "ml.p4d.24xlarge", 
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    endpoint_name = "<endpoint_name>"
    resources = resources,
)

# Deploy another model to the same inference-component-based endpoint
llama2_predictor = llama2_model.deploy( # resources already set inside llama2_model
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    endpoint_name = "<endpoint_name>"  # same endpoint name as for falcon model
)
```

------
#### [ boto3 inference components ]

端点配置完成后，使用 [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) 方法创建端点。终端节点名称 AWS 区域 在您的 AWS 账户中必须是唯一的。

下面的示例使用请求中指定的端点配置创建端点。Amazon SageMaker AI 使用终端节点来配置资源。

```
sagemaker_client.create_endpoint(
    EndpointName = endpoint_name,
    EndpointConfigName = endpoint_config_name,
)
```

创建端点后，可以通过创建推理组件将一个或多个模型部署到端点。下面的示例使用 `create_inference_component` 方法进行创建。

```
sagemaker_client.create_inference_component(
    InferenceComponentName = inference_component_name,
    EndpointName = endpoint_name,
    VariantName = variant_name,
    Specification = {
        "Container": {
            "Image": "image-uri",
            "ArtifactUrl": model_url,
        },
        "ComputeResourceRequirements": {
            "NumberOfCpuCoresRequired": 1, 
            "MinMemoryRequiredInMb": 1024
        }
    },
    RuntimeConfig = {"CopyCount": 2}
)
```

------
#### [ boto3 models (without inference components) ]

**Example 部署**  

向 SageMaker AI 提供端点配置。该服务会启动机器学习计算实例，并按照配置中的规定部署一个或多个模型。

获得模型和端点配置后，使用 [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) 方法创建端点。终端节点名称 AWS 区域 在您的 AWS 账户中必须是唯一的。

下面的示例使用请求中指定的端点配置创建端点。Amazon SageMaker AI 使用终端节点来配置资源和部署模型。

```
create_endpoint_response = sagemaker_client.create_endpoint(
    # The endpoint name must be unique within an AWS Region in your AWS account:
    EndpointName = "endpoint-name"
    # The name of the endpoint configuration associated with this endpoint:
    EndpointConfigName = "endpoint-config-name")
```

------

## 使用部署模型 AWS CLI
<a name="deploy-models-cli"></a>

您可以使用将模型部署到终端节点 AWS CLI。

### 概述
<a name="deploy-models-cli-overview"></a>

使用部署模型时 AWS CLI，无论是否使用推理组件，都可以部署模型。以下章节概述了这两种方法下运行的命令。下面的示例将演示这些命令。

------
#### [ With inference components ]

要部署带有推理组件的模型，请执行以下操作：

1. (可选）使用 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html) 命令创建模型。

1. 创建端点配置，指定端点设置。要创建它，请运行 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html) 命令。

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html) 命令创建端点。在命令体中，指定您创建的端点配置。

1. 使用 `create-inference-component` 命令创建推理组件。在设置中，您可以通过以下任一操作来指定模型：
   + 指定 A SageMaker I 模型对象
   + 指定模型映像 URI 和 S3 URL

   您还可以为模型分配端点资源。创建推理组件后，您就可以将模型部署到端点。您可以通过创建多个推理组件将多个模型部署到一个端点--每个模型一个推理组件。

------
#### [ Without inference components ]

要在不使用推理组件的情况下部署模型，请执行以下操作：

1. 使用[https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html)命令创建 SageMaker AI 模型。

1. 通过创建端点配置对象来指定端点的设置。要创建它，请使用 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html) 命令。在端点配置中，您将模型对象分配给生产变体。

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html) 命令创建端点。在命令体中，指定您创建的端点配置。

   当您创建终端节点时， SageMaker AI 会配置终端节点资源，然后将模型部署到终端节点。

------

### 配置
<a name="cli-configure-endpoint"></a>

以下示例配置了将模型部署到端点所需的资源。

------
#### [ With inference components ]

**Example create-endpoint-config 命令**  
以下示例使用[create-endpoint-config](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html)命令创建终端节点配置。  

```
aws sagemaker create-endpoint-config \
--endpoint-config-name endpoint-config-name \
--execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name\
--production-variants file://production-variants.json
```
在本例中，文件 `production-variants.json` 使用以下 JSON 定义了生产变体：  

```
[
    {
        "VariantName": "variant-name",
        "ModelName": "model-name",
        "InstanceType": "ml.p4d.24xlarge",
        "InitialInstanceCount": 1
    }
]
```
如果命令成功，则会使用您 AWS CLI 创建的资源的 ARN 进行响应。  

```
{
    "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name"
}
```

------
#### [ Without inference components ]

**Example create-model 命令**  
下面的示例使用 [create-model](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html) 命令创建了模型。  

```
aws sagemaker create-model \
--model-name model-name \
--execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name \
--primary-container "{ \"Image\": \"image-uri\", \"ModelDataUrl\": \"model-s3-url\"}"
```
如果命令成功，则会使用您 AWS CLI 创建的资源的 ARN 进行响应。  

```
{
    "ModelArn": "arn:aws:sagemaker:us-west-2:111122223333:model/model-name"
}
```

**Example create-endpoint-config 命令**  
以下示例使用[create-endpoint-config](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html)命令创建终端节点配置。  

```
aws sagemaker create-endpoint-config \
--endpoint-config-name endpoint-config-name \
--production-variants file://production-variants.json
```
在本例中，文件 `production-variants.json` 使用以下 JSON 定义了生产变体：  

```
[
    {
        "VariantName": "variant-name",
        "ModelName": "model-name",
        "InstanceType": "ml.p4d.24xlarge",
        "InitialInstanceCount": 1
    }
]
```
如果命令成功，则会使用您 AWS CLI 创建的资源的 ARN 进行响应。  

```
{
    "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name"
}
```

------

### 部署
<a name="cli-deploy"></a>

以下示例将模型部署到端点。

------
#### [ With inference components ]

**Example create-endpoint 命令**  
下面的示例使用 [create-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html) 命令创建了一个端点。  

```
aws sagemaker create-endpoint \
--endpoint-name endpoint-name \
--endpoint-config-name endpoint-config-name
```
如果命令成功，则会使用您 AWS CLI 创建的资源的 ARN 进行响应。  

```
{
    "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name"
}
```

**Example create-inference-component 命令**  
以下示例使用 create-inference-component命令创建推理组件。  

```
aws sagemaker create-inference-component \
--inference-component-name inference-component-name \
--endpoint-name endpoint-name \
--variant-name variant-name \
--specification file://specification.json \
--runtime-config "{\"CopyCount\": 2}"
```
在这个示例中，文件 `specification.json` 用以下 JSON 定义了容器和计算资源：  

```
{
    "Container": {
        "Image": "image-uri",
        "ArtifactUrl": "model-s3-url"
    },
    "ComputeResourceRequirements": {
        "NumberOfCpuCoresRequired": 1,
        "MinMemoryRequiredInMb": 1024
    }
}
```
如果命令成功，则会使用您 AWS CLI 创建的资源的 ARN 进行响应。  

```
{
    "InferenceComponentArn": "arn:aws:sagemaker:us-west-2:111122223333:inference-component/inference-component-name"
}
```

------
#### [ Without inference components ]

**Example create-endpoint 命令**  
下面的示例使用 [create-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html) 命令创建了一个端点。  

```
aws sagemaker create-endpoint \
--endpoint-name endpoint-name \
--endpoint-config-name endpoint-config-name
```
如果命令成功，则会使用您 AWS CLI 创建的资源的 ARN 进行响应。  

```
{
    "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name"
}
```

------