

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

# 托管选项
<a name="realtime-endpoints-options"></a>

以下主题描述了可用的 SageMaker AI 实时托管选项，以及如何设置、调用和删除每个托管选项。

**Topics**
+ [

# 单一模型端点
](realtime-single-model.md)
+ [

# 多模型端点
](multi-model-endpoints.md)
+ [

# 多容器端点
](multi-container-endpoints.md)
+ [

# 亚马逊 A SageMaker I 中的推理管道
](inference-pipelines.md)
+ [

# 删除端点和资源
](realtime-endpoints-delete-resources.md)

# 单一模型端点
<a name="realtime-single-model"></a>

您可以使用 Amazon SageMaker Studio、适用于 Python (Boto3) 的 AWS SDK、SageMaker Python SDK 或 AWS CLI 创建、更新和删除承载单个模型的实时推理端点。有关程序和代码示例，请参阅 [为实时推理部署模型](realtime-endpoints-deploy-models.md)。

# 多模型端点
<a name="multi-model-endpoints"></a>

多模型端点提供了经济高效的可扩展解决方案，可用于部署数量非常多的模型。它们使用相同的资源实例集和共享的服务容器来托管您的所有模型。与使用单模型端点相比，这可以提高端点利用率，从而降低托管成本。它还可以减少部署开销，因为 Amazon SageMaker AI 可以管理在内存中加载模型，并根据终端节点的流量模式对其进行扩展。

下图显示多模型端点与单模型端点相比的工作原理。

![\[此图显示了多模型端点与单模型端点如何托管模型。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/multi-model-endpoints-diagram.png)


多模型端点非常适合在共享服务容器上托管使用相同机器学习框架的大量模型。如果您的模型中包括经常访问和不经常访问的模型，则多模型端点可以在使用更少资源并节约更高成本的同时高效地为对应流量提供服务。您的应用程序应容忍在调用不常使用的模型时偶尔出现的、与冷启动相关的延迟损失。

多模型端点支持托管 CPU 和 GPU 支持的模型。通过使用 GPU 支持的模型，您可以通过提高端点及其底层加速型计算实例的使用率来降低模型部署成本。

多模型端点还可在模型之间实现内存资源的时间共享。当模型的大小和调用延迟非常相似时，这种方法效果最佳。在这种情况下，多模型端点可以有效地在所有模型中使用实例。如果模型具有明显较高的每秒事务数 (TPS) 或延迟要求，我们建议在专用端点上托管这些模型。

您可以使用具有以下特征的多模型端点：
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html)和 VPCs
+ [自动扩缩](multi-model-endpoints-autoscaling.md)
+ [串行推理管线](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html)（但推理管线中只能包含一个启用多模型的容器）
+ A/B 测试

您可以使用 AWS SDK for Python (Boto) 或 SageMaker AI 控制台创建多模型终端节点。对于 CPU 支持的多模型端点，可以通过集成[多模型服务器](https://github.com/awslabs/multi-model-server)库来使用自定义构建的容器创建端点。

**Topics**
+ [

## 多模型端点的工作原理
](#how-multi-model-endpoints-work)
+ [

## 用于多模型端点的示例笔记本
](#multi-model-endpoint-sample-notebooks)
+ [

# 支持多模型终端节点的算法、框架和实例
](multi-model-support.md)
+ [

# 多模型端点部署的实例建议
](multi-model-endpoint-instance.md)
+ [

# 创建多模型端点
](create-multi-model-endpoint.md)
+ [

# 调用多模型端点
](invoke-multi-model-endpoint.md)
+ [

# 添加或删除模型
](add-models-to-endpoint.md)
+ [

# 为 SageMaker AI 多模型端点构建自己的容器
](build-multi-model-build-container.md)
+ [

# 多模型端点安全性
](multi-model-endpoint-security.md)
+ [

# CloudWatch 多模型端点部署指标
](multi-model-endpoint-cloudwatch-metrics.md)
+ [

# 设置 SageMaker AI 多模型端点模型缓存行为
](multi-model-caching.md)
+ [

# 为多模型端点部署设置自动扩缩策略
](multi-model-endpoints-autoscaling.md)

## 多模型端点的工作原理
<a name="how-multi-model-endpoints-work"></a>

 SageMaker AI 管理容器内存中多模型端点上托管的模型的生命周期。当您创建终端节点时，A SageMaker I 不会将所有模型从 Amazon S3 存储桶下载到容器，而是在您调用它们时动态加载和缓存它们。当 SageMaker AI 收到特定模型的调用请求时，它会执行以下操作：

1. 将请求路由到端点后面的实例。

1. 将模型从 S3 存储桶下载到该实例的存储卷中。

1. 将模型加载到该加速计算实例上的容器内存（CPU 或 GPU，具体取决于您拥有 CPU 还是 GPU 支持的实例）。如果模型已加载到容器的内存中，则调用速度会更快，因为 SageMaker AI 不需要下载和加载它。

SageMaker AI 继续将模型请求路由到已加载模型的实例。但是，如果模型收到许多调用请求，并且多模型终端节点还有其他实例， SageMaker AI 会将一些请求路由到另一个实例以容纳流量。如果尚未在第二个实例上加载模型，则模型将下载到该实例的存储卷中，并加载到容器的内存中。

当一个实例的内存利用率很高且 SageMaker AI 需要将另一个模型加载到内存中时，它会从该实例的容器中卸载未使用的模型，以确保有足够的内存来加载模型。卸载的模型将保留在实例的存储卷上，并且稍后可加载到容器的内存中，而无需再次从 S3 存储桶进行下载。如果实例的存储卷达到其容量， SageMaker AI 会从存储卷中删除所有未使用的模型。

要删除模型，请停止发送请求并将其从 S3 存储桶中删除。 SageMaker AI 在服务容器中提供多模型端点功能。在多模型端点中添加和删除模型不需要更新端点本身。要添加一个模型，请将该模型上传到 S3 存储桶并调用它。无需更改代码即可使用它。

**注意**  
更新多模型端点时，由于多模型端点中的智能路由会适应您的流量模式，因此端点上的初始调用请求可能会遇到更高的延迟。但在它了解您的流量模式后，您就会体验到最常用模型的延迟较低。由于模型是动态加载到实例的，因此不常使用的模型可能会发生一定的冷启动延迟。

## 用于多模型端点的示例笔记本
<a name="multi-model-endpoint-sample-notebooks"></a>

要了解有关如何使用多模型端点的更多信息，您可以参阅以下示例笔记本：
+ 使用 CPU 支持的实例的多模型端点示例：
  + [多模型端点 XGBoost 示例笔记本](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html) — 本笔记本展示了如何将多个 XGBoost 模型部署到一个端点。
  + [多模型端点 BYOC 示例笔记本](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_bring_your_own/multi_model_endpoint_bring_your_own.html) — 本笔记本展示了如何设置和部署支持 AI 中多模型端点的客户容器。 SageMaker 
+ 使用 GPU 支持的实例的多模型端点示例：
  + 使用 [Amazon A SageMaker I 多模型终端节点 (MME) 运行多个深度学习模型](https://github.com/aws/amazon-sagemaker-examples/blob/main/multi-model-endpoints/mme-on-gpu/cv/resnet50_mme_with_gpu.ipynb) — 本笔记本展示了如何使用 NVIDIA Triton 推理容器将 ResNet -50 个模型部署到多模型终端节点。 GPUs 

有关如何创建和访问可用于在 SageMaker AI 中运行前面示例的 Jupyter 笔记本实例的说明，请参阅。[Amazon SageMaker 笔记本实例](nbi.md)创建并打开笔记本实例后，选择 “**SageMaker AI 示例**” 选项卡以查看所有 SageMaker AI 示例的列表。多模型端点笔记本位于**高级功能**部分。要打开笔记本，请选择其**使用**选项卡，然后选择**创建副本**。

有关多模型端点使用案例的更多信息，请参阅以下博客和资源：
+ 视频：[在 SageMaker AI 上托管数千个模型](https://www.youtube.com/watch?v=XqCNTWmHsLc&t=751s)
+ 视频：[适用于 SaaS SageMaker 的人工智能机器](https://www.youtube.com/watch?v=BytpYlJ3vsQ)学习
+ 博客：[如何针对多租户 SaaS 使用案例扩展机器学习推理](https://aws.amazon.com/blogs/machine-learning/how-to-scale-machine-learning-inference-for-multi-tenant-saas-use-cases/)
+ 案例研究：[Veeva Systems](https://aws.amazon.com/partners/success/advanced-clinical-veeva/)

# 支持多模型终端节点的算法、框架和实例
<a name="multi-model-support"></a>

有关可用于多模型端点的算法、框架和实例类型的信息，请参阅以下各部分。

## 使用 CPU 支持的实例的多模型端点所支持的算法、框架和实例
<a name="multi-model-support-cpu"></a>

以下算法和框架的推理容器支持多模型端点：
+ [XGBoost 使用 Amazon A SageMaker I 的算法](xgboost.md)
+ [K 最近邻 (k-NN) 算法](k-nearest-neighbors.md)
+ [线性学习器算法](linear-learner.md)
+ [Random Cut Forest (RCF) 算法](randomcutforest.md)
+ [TensorFlow 与 Amazon A SageMaker I 配合使用的资源](tf.md)
+ [在 Amazon AI 中使用 Scikit-Learn 的资源 SageMaker](sklearn.md)
+ [将 Apache MXNet 与 Amazon SageMaker AI 配合使用的资源](mxnet.md)
+ [PyTorch 与 Amazon A SageMaker I 配合使用的资源](pytorch.md)

要使用任何其他框架或算法，请使用 SageMaker AI 推理工具包构建支持多模型端点的容器。有关信息，请参阅 [为 SageMaker AI 多模型端点构建自己的容器](build-multi-model-build-container.md)。

多模型端点支持所有 CPU 实例类型。

## 使用 GPU 支持的实例的多模型端点所支持的算法、框架和实例
<a name="multi-model-support-gpu"></a>

[SageMaker AI Triton 推](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)理服务器支持在多模型端点上托管多个 GPU 支持的模型。这支持所有主要的推理框架，例如 NVIDIA® Tensorrt™、、、Python、ONNX PyTorch、 MXNet、scikit-learn RandomForest、OpenVino XGBoost、自定义 C\$1\$1 等。

要使用任何其他框架或算法，可以使用适用于 Python 或 C\$1\$1 的 Triton 后端来编写模型逻辑并提供任何自定义模型。服务器准备就绪后，可以开始在一个端点后部署数以百计的深度学习模型。

多模型端点支持下列 GPU 实例类型。


| 实例系列 | 实例类型 | v CPUs | 每个 vCPU 的内存 GiB 数量 | GPUs | GPU 内存 | 
| --- | --- | --- | --- | --- | --- | 
| p2 | ml.p2.xlarge | 4 | 15.25 | 1 | 12 | 
| p3 | ml.p3.2xlarge | 8 | 7.62 | 1 | 16 | 
| g5 | ml.g5.xlarge | 4 | 4 | 1 | 24 | 
| g5 | ml.g5.2xlarge | 8 | 4 | 1 | 24 | 
| g5 | ml.g5.4xlarge | 16 | 4 | 1 | 24 | 
| g5 | ml.g5.8xlarge | 32 | 4 | 1 | 24 | 
| g5 | ml.g5.16xlarge | 64 | 4 | 1 | 24 | 
| g4dn | ml.g4dn.xlarge | 4 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.2xlarge | 8 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.4xlarge | 16 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.8xlarge | 32 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.16xlarge | 64 | 4 | 1 | 16 | 

# 多模型端点部署的实例建议
<a name="multi-model-endpoint-instance"></a>

为多模型终端节点选择 A SageMaker I ML 实例类型时，需要考虑以下几点：
+ 为需要服务的所有模型预置充足的 [Amazon Elastic Block Store (Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) 容量。
+ 平衡性能（最大限度地减少冷启动）和成本（不要过度预配置实例容量）。有关 SageMaker AI 为终端节点和多模型终端节点的每种实例类型附加的存储卷大小的信息，请参阅[实例存储卷](host-instance-storage.md)。
+ 对于配置为以 `MultiModel` 模式运行的容器，为其实例预置的存储卷比默认 `SingleModel` 模式时更大。这样，与 `SingleModel` 模式相比，可以在实例存储卷上缓存更多模型。

选择 A SageMaker I ML 实例类型时，请考虑以下因素：
+ 目前，所有 CPU 实例类型和单 GPU 实例类型都支持多模型端点。
+ 要为在多模型端点后托管的模型进行流量分配（访问模式）并确定模型数量（实例上可加载到内存中的模型数），请记住以下信息。
  + 将实例上的内存量视为要加载模型的缓存空间，将 v 的数量CPUs 视为对加载的模型进行推断的并发限制（假设调用模型与 CPU 绑定）。
  + 对于 CPU 支持的实例，v 的数量会CPUs 影响每个实例的最大并发调用次数（假设调用模型与 CPU 绑定）。使用较大的 v CPUs 可以同时调用更多独特的模型。
  + 对于 GPU 支持的实例，更大的实例和 GPU 内存使您可以加载更多模型，并准备好响应推理请求。
  + 对于 CPU 和 GPU 支持的实例，都请提供一定的“松弛”内存以便卸载未使用的模型，特别是具有多个实例的多模型端点。如果实例或可用区发生故障，这些实例上的模型将被重新路由到端点后的其他实例。
+ 确定你对 loading/downloading 时间的容忍度：
  + d 实例类型系列（例如 m5d、c5d 或 r5d）和 g5s 均配有 NVMe（非易失性存储器快速）固态硬盘，该固态硬盘可提供高 I/O 性能，并且可以缩短将模型下载到存储卷以及容器从存储卷加载模型所需的时间。
  + 由于 d 和 g5 实例类型附带 NVMe SSD 存储，因此 SageMaker AI 不会将 Amazon EBS 存储卷附加到托管多模型终端节点的这些 ML 计算实例。当模型大小相似且同质（也即，它们具有相似的推理延迟和资源要求）时，自动扩缩的效果最佳。

您还可以使用以下指南来帮助优化多模型端点上的模型加载：

**选择无法在内存中容纳所有目标模型的实例类型**

在某些情况下，您可以选择一种无法同时在内存中容纳所有目标模型的实例类型，从而降低成本。 SageMaker AI 会在内存耗尽时动态卸载模型，以便为新目标模型腾出空间。对于请求频率不高的模型，您可以牺牲动态加载延迟。在延迟需求更严格的情况下，您可以选择更大的实例类型或更多实例。提前投入时间进行性能测试和分析，可以帮助您成功地进行生产部署。

**评估您的模型缓存命中率**

Amazon CloudWatch 指标可以帮助您评估您的模型。有关可用于多模型端点的指标的更多信息，请参阅[CloudWatch 多模型端点部署指标](multi-model-endpoint-cloudwatch-metrics.md)。

 您可以使用 `ModelCacheHit` 指标的 `Average` 统计数据来监控已加载模型的请求比率。您可以使用 `ModelUnloadingTime` 指标的 `SampleCount` 统计数据来监控在一段时间内发送到容器的卸载请求数。如果模型卸载频率过高（*颠簸*指示器，由于工作模型集的缓存空间不足，因此将卸载并重新加载模型），请考虑使用具有更多内存的更大实例类型，或者增加多模型端点后的实例数。对于具有多个实例的多模型端点，请注意可以在多个实例上加载一个模型。

# 创建多模型端点
<a name="create-multi-model-endpoint"></a>

您可以使用 SageMaker AI 控制台或创建多模型终端节点。 AWS SDK for Python (Boto) 要通过控制台创建 CPU 或 GPU 支持的端点，请参阅以下各部分中的控制台过程。如果要使用创建多模型终端节点 AWS SDK for Python (Boto)，请使用以下各节中的 CPU 或 GPU 过程。CPU 和 GPU 工作流相似但有一些区别，例如容器要求。

**Topics**
+ [

## 创建多模型端点（控制台）
](#create-multi-model-endpoint-console)
+ [

## 使用 CPUs 和创建多模型端点 适用于 Python (Boto3) 的 AWS SDK
](#create-multi-model-endpoint-sdk-cpu)
+ [

## 使用 GPUs 和创建多模型端点 适用于 Python (Boto3) 的 AWS SDK
](#create-multi-model-endpoint-sdk-gpu)

## 创建多模型端点（控制台）
<a name="create-multi-model-endpoint-console"></a>

您可以通过控制台创建 CPU 和 GPU 支持的多模型端点。使用以下步骤通过 SageMaker AI 控制台创建多模型终端节点。

**创建多模型端点（控制台）**

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 选择 **Models (模型)**，然后从 **Inference (推理)** 组选择 **Create models (创建模型)**。

1. 对于 **Model name (模型名称)**，输入一个名称。

1. 对于 **IAM 角色**，选择或创建附加 `AmazonSageMakerFullAccess` IAM 策略的 IAM 角色。

1.  在**容器定义**部分中，为**提供模型构件和推理映像选项**选择**使用多个模型**。  
![\[在创建模型页面中，您可以选择使用多个模型。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/mme-create-model-ux-2.PNG)

1. 对于**推理容器镜像**，请输入所需容器镜像的 Amazon ECR 路径。

   对于 GPU 型号，必须使用由 NVIDIA Triton 推理服务器支持的容器。有关使用 GPU 支持的端点的容器映像列表，请参阅 [NVIDIA Triton 推理容器（仅支持 SM）](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only)。有关 NVIDIA Triton 推理服务器的更多信息，请参阅将 T [riton 推理服务器与 AI 配合使用](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)。 SageMaker 

1. 选择**创建模型**。

1. 按照单个模型端点的部署方式来部署多模型端点。有关说明，请参阅[将模型部署到 SageMaker AI 托管服务](ex1-model-deployment.md#ex1-deploy-model)。

## 使用 CPUs 和创建多模型端点 适用于 Python (Boto3) 的 AWS SDK
<a name="create-multi-model-endpoint-sdk-cpu"></a>

使用以下部分创建由 CPU 实例支持的多模型端点。您可以使用 Amazon A SageMaker I 创建多模型终端节点 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model)，[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) APIs 就像创建单一模型终端节点一样，但有两处更改。定义模型容器时，您需要传递一个新的 `Mode` 参数值 `MultiModel`。您还需要传递 `ModelDataUrl` 字段，该字段指定模型构件在 Amazon S3 中位置的前缀，而不是像部署单个模型时一样指定单个模型构件的路径。

有关使用 SageMaker AI 将多个 XGBoost 模型部署到端点的示例笔记本，请参阅[多模型端点 XGBoost 示例笔记本](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html)。

以下过程概述了创建 CPU 支持的多模型端点的示例中所使用的关键步骤。

**部署模型（AWS 适用于 Python 的 SDK（Boto 3））**

1. 获取包含支持部署多模型端点的映像的容器。有关支持多模型端点的内置算法和框架容器的列表，请参阅[支持多模型终端节点的算法、框架和实例](multi-model-support.md)。在此示例中，我们使用 [K 最近邻 (k-NN) 算法](k-nearest-neighbors.md) 内置算法。我们调用 [SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html) 实用函数`image_uris.retrieve()`来获取 K-Nearest Neighbors 内置算法图像的地址。

   ```
   import sagemaker
   region = sagemaker_session.boto_region_name
   image = sagemaker.image_uris.retrieve("knn",region=region)
   container = { 
                 'Image':        image,
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   ```

1. 获取 A 适用于 Python (Boto3) 的 AWS SDK SageMaker I 客户端并创建使用此容器的模型。

   ```
   import boto3
   sagemaker_client = boto3.client('sagemaker')
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container])
   ```

1. （可选）如果您使用的是串行推理管道，请获取要包含在管道中的其他容器，并将其包含在 `CreateModel` 的 `Containers` 参数中：

   ```
   preprocessor_container = { 
                  'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>'
               }
   
   multi_model_container = { 
                 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>',
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [preprocessor_container, multi_model_container]
               )
   ```
**注意**  
串行推理管道中只能使用一个 multi-model-enabled端点。

1. （可选）如果您的使用案例不能通过模型缓存受益，请将 `MultiModelConfig` 参数的 `ModelCacheSetting` 字段值设置为 `Disabled`，并将其包含在调用 `create_model` 的 `Container` 参数中。`ModelCacheSetting` 字段的默认值是 `Enabled`。

   ```
   container = { 
                   'Image': image, 
                   'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                   'Mode': 'MultiModel' 
                   'MultiModelConfig': {
                           // Default value is 'Enabled'
                           'ModelCacheSetting': 'Disabled'
                   }
              }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container]
               )
   ```

1. 为模型配置多模型端点。我们建议您至少为端点配置两个实例。这允许 SageMaker AI 为模型提供跨多个可用区域的高可用性预测集。

   ```
   response = sagemaker_client.create_endpoint_config(
                   EndpointConfigName = '<ENDPOINT_CONFIG_NAME>',
                   ProductionVariants=[
                        {
                           'InstanceType':        'ml.m4.xlarge',
                           'InitialInstanceCount': 2,
                           'InitialVariantWeight': 1,
                           'ModelName':            '<MODEL_NAME>',
                           'VariantName':          'AllTraffic'
                         }
                   ]
              )
   ```
**注意**  
串行推理管道中只能使用一个 multi-model-enabled端点。

1. 使用 `EndpointName` 和 `EndpointConfigName` 参数创建多模型端点。

   ```
   response = sagemaker_client.create_endpoint(
                 EndpointName       = '<ENDPOINT_NAME>',
                 EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')
   ```

## 使用 GPUs 和创建多模型端点 适用于 Python (Boto3) 的 AWS SDK
<a name="create-multi-model-endpoint-sdk-gpu"></a>

使用以下部分创建由 GPU 支持的多模型端点。您可以使用 Amazon A SageMaker I 创建多模型终端节点 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model)，与创建单模型终端节点[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) APIs 类似，但有几处更改。定义模型容器时，您需要传递一个新的 `Mode` 参数值 `MultiModel`。您还需要传递 `ModelDataUrl` 字段，该字段指定模型构件在 Amazon S3 中位置的前缀，而不是像部署单个模型时一样指定单个模型构件的路径。对于 GPU 支持的多模型端点，所使用的容器必须具有已针对在 GPU 实例上运行进行优化的 NVIDIA Triton 推理服务器。有关使用 GPU 支持的端点的容器映像列表，请参阅 [NVIDIA Triton 推理容器（仅支持 SM）](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only)。

有关演示如何创建由支持的多模型终端节点的示例笔记本 GPUs，请参阅[使用 GPUs Amazon A SageMaker I 多模型终端节点 (MME) 运行多个深度学习模型](https://github.com/aws/amazon-sagemaker-examples/blob/main/multi-model-endpoints/mme-on-gpu/cv/resnet50_mme_with_gpu.ipynb)。

以下过程概述了创建由 GPU 支持的多模型端点的关键步骤。

**部署模型（AWS 适用于 Python 的 SDK（Boto 3））**

1. 定义容器映像。要为模型创建支持 GPU 的多模型端点，请定义容器以使用 [NVIDIA Triton Server 镜像](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)。 ResNet 此容器支持多模型端点，并针对在 GPU 实例上运行进行了优化。我们调用 [SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html) 实用函数`image_uris.retrieve()`来获取图像的地址。例如：

   ```
   import sagemaker
   region = sagemaker_session.boto_region_name
   
   // Find the sagemaker-tritonserver image at 
   // https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-triton/resnet50/triton_resnet50.ipynb
   // Find available tags at https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only
   
   image = "<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/sagemaker-tritonserver:<TAG>".format(
       account_id=account_id_map[region], region=region
   )
   
   container = { 
                 'Image':        image,
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel',
                 "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "resnet"},
               }
   ```

1. 获取 A 适用于 Python (Boto3) 的 AWS SDK SageMaker I 客户端并创建使用此容器的模型。

   ```
   import boto3
   sagemaker_client = boto3.client('sagemaker')
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container])
   ```

1. （可选）如果您使用的是串行推理管道，请获取要包含在管道中的其他容器，并将其包含在 `CreateModel` 的 `Containers` 参数中：

   ```
   preprocessor_container = { 
                  'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>'
               }
   
   multi_model_container = { 
                 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>',
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [preprocessor_container, multi_model_container]
               )
   ```
**注意**  
串行推理管道中只能使用一个 multi-model-enabled端点。

1. （可选）如果您的使用案例不能通过模型缓存受益，请将 `MultiModelConfig` 参数的 `ModelCacheSetting` 字段值设置为 `Disabled`，并将其包含在调用 `create_model` 的 `Container` 参数中。`ModelCacheSetting` 字段的默认值是 `Enabled`。

   ```
   container = { 
                   'Image': image, 
                   'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                   'Mode': 'MultiModel' 
                   'MultiModelConfig': {
                           // Default value is 'Enabled'
                           'ModelCacheSetting': 'Disabled'
                   }
              }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container]
               )
   ```

1. 为模型配置使用由 GPU 支持的实例的多模型端点。我们建议在您的端点上配置多个实例，以实现高可用性和更高的缓存命中率。

   ```
   response = sagemaker_client.create_endpoint_config(
                   EndpointConfigName = '<ENDPOINT_CONFIG_NAME>',
                   ProductionVariants=[
                        {
                           'InstanceType':        'ml.g4dn.4xlarge',
                           'InitialInstanceCount': 2,
                           'InitialVariantWeight': 1,
                           'ModelName':            '<MODEL_NAME>',
                           'VariantName':          'AllTraffic'
                         }
                   ]
              )
   ```

1. 使用 `EndpointName` 和 `EndpointConfigName` 参数创建多模型端点。

   ```
   response = sagemaker_client.create_endpoint(
                 EndpointName       = '<ENDPOINT_NAME>',
                 EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')
   ```

# 调用多模型端点
<a name="invoke-multi-model-endpoint"></a>

要调用多模型端点，请使用来[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint)自 SageMaker AI 运行时的，就像调用单个模型端点一样，只需进行一次更改。传递新 `TargetModel` 参数，该参数指定要定向到端点上的哪些模型。 SageMaker AI Runtime `InvokeEndpoint` 请求支持`X-Amzn-SageMaker-Target-Model`作为新的标头，该标头采用为调用指定的模型的相对路径。 SageMaker AI 系统通过将 `CreateModel` API 调用中提供的前缀与模型的相对路径相结合来构造模型的绝对路径。

CPU 和 GPU 支持的多模型端点的以下过程相同。

------
#### [ AWS SDK for Python (Boto 3) ]

以下预测请求示例使用示例笔记本中的[适用于 Python 的AWS SDK (Boto 3)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html)。

```
response = runtime_sagemaker_client.invoke_endpoint(
                        EndpointName = "<ENDPOINT_NAME>",
                        ContentType  = "text/csv",
                        TargetModel  = "<MODEL_FILENAME>.tar.gz",
                        Body         = body)
```

------
#### [ AWS CLI ]

 以下示例说明如何使用 AWS Command Line Interface (AWS CLI) 发出两行的 CSV 请求。

```
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name "<ENDPOINT_NAME>" \
  --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \
  --content-type "text/csv" \
  --target-model "<MODEL_NAME>.tar.gz"
  output_file.txt
```

如果推理成功，会生成包含有关您的推理请求的信息的 `output_file.txt`。有关如何使用进行预测的更多示例 AWS CLI，请参阅 SageMaker Python SDK 文档 AWS CLI中的[使用进行预测](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#making-predictions-with-the-aws-cli)。

------

多模型端点根据需要动态加载目标模型。您可以在运行 [MME 示例笔记本](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html)时发现这一点，该笔记本会针对单个端点后托管的多个目标模型遍历随机调用。针对给定模型的第一个请求需要更长时间，因为必须从 Amazon Simple Storage Service (Amazon S3) 下载模型并将其加载到内存中。这被称为*冷启动*，预计在多模型端点上会优化，从而为客户提供更好的性价比。由于加载模型后没有额外开销，因此后续调用完成速度更快。

**注意**  
对于由 GPU 支持的实例，来自 GPU 容器的、带有 507 的 HTTP 响应代码表示内存或其他资源不足。这会导致从容器中卸载未使用的模型，以便加载更常用的模型。

## 出错时重试请求 ModelNotReadyException
<a name="invoke-multi-model-config-retry"></a>

首次为模型调用 `invoke_endpoint` 时，会从 Amazon Simple Storage Service 下载模型并将其加载到推理容器中。因此需要更长的时间才能返回第一次调用。由于模型已加载完毕，因此对同一模型的后续调用会更快地完成。

SageMaker AI 会`invoke_endpoint`在 60 秒内返回呼叫的响应。有些模型太大，无法在 60 秒内下载。如果模型未在 60 秒超时限制之前完成加载，则对 `invoke_endpoint` 的请求将返回错误代码 `ModelNotReadyException`，会继续下载模型并将其加载到推理容器中，最长 360 秒。如果您收到 `invoke_endpoint` 请求的 `ModelNotReadyException` 错误代码，重试该请求。默认情况下，会导致错误 AWS SDKs 的 Python（Boto 3）（使用[旧版重试模式](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#legacy-retry-mode)）和 Java 重试`invoke_endpoint`请求。`ModelNotReadyException`您可以将重试策略配置为继续重试请求最多 360 秒。如果您预计下载模型并将其加载到容器中的时间超过 60 秒，请将 SDK 套接字超时设置为 70 秒。有关为 适用于 Python (Boto3) 的 AWS SDK配置重试策略的更多信息，请参阅[配置重试模式](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#configuring-a-retry-mode)。以下代码显示一个示例，将重试调用 `invoke_endpoint` 的重试策略配置为最长 180 秒。

```
import boto3
from botocore.config import Config

# This example retry strategy sets the retry attempts to 2. 
# With this setting, the request can attempt to download and/or load the model 
# for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds)
config = Config(
    read_timeout=70,
    retries={
        'max_attempts': 2  # This value can be adjusted to 5 to go up to the 360s max timeout
    }
)
runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)
```

# 添加或删除模型
<a name="add-models-to-endpoint"></a>

您可以将其他模型部署到多模型端点，并立即通过该端点调用这些模型。添加新模型时，您无需更新或关闭端点，因此可以避免为每个新模型创建和运行单独的端点的成本。对于 CPU 和 GPU 支持的多模型端点，添加和删除模型的过程相同。

 SageMaker 当实例达到内存容量并且需要将更多模型下载到容器中时，AI 会从容器中卸载未使用的模型。 SageMaker 当实例存储卷达到容量且需要下载新模型时，AI 还会从实例存储卷中删除未使用的模型工件。首次调用新添加的模型需要较长时间，因为端点需要一定时间才能将模型从 S3 下载到托管端点的实例中的容器内存

如果端点已在运行，请将新的模型构件集复制到存储模型的 Amazon S3 位置。

```
# Add an AdditionalModel to the endpoint and exercise it
aws s3 cp AdditionalModel.tar.gz s3://amzn-s3-demo-bucket/path/to/artifacts/
```

**重要**  
请按照添加新模型的方式继续操作以便更新模型。使用新的唯一名称。不要覆盖 Amazon S3 中的模型构件，这是因为旧版模型仍可能加载到容器中或端点的实例存储卷上。然后，调用新模型可能会调用旧版模型。

在 S3 中存储其他目标模型后，客户端应用程序即可从这些模型请求预测。

```
response = runtime_sagemaker_client.invoke_endpoint(
                        EndpointName='<ENDPOINT_NAME>',
                        ContentType='text/csv',
                        TargetModel='AdditionalModel.tar.gz',
                        Body=body)
```

要从多模型端点删除模型，请停止从客户端调用该模型，并将其从存储模型构件的 S3 位置中删除。

# 为 SageMaker AI 多模型端点构建自己的容器
<a name="build-multi-model-build-container"></a>

请参阅以下部分，了解如何将自己的容器和依赖项引入多模型端点。

**Topics**
+ [

## 在 CPU 支持的实例上为多模型端点引入您自己的依赖项
](#build-multi-model-container-cpu)
+ [

## 在 GPU 支持的实例上为多模型端点引入您自己的依赖项
](#build-multi-model-container-gpu)
+ [

## 使用 A SageMaker I 推理工具包
](#multi-model-inference-toolkit)
+ [

# 多模型端点的自定义容器合同
](mms-container-apis.md)

## 在 CPU 支持的实例上为多模型端点引入您自己的依赖项
<a name="build-multi-model-container-cpu"></a>

如果预先构建的容器映像都无法满足您的需求，可以构建您自己的容器以便与 CPU 支持的多模型端点一起使用。

部署在亚马逊 AI 中的自定义 Amazon Elastic Container Registry (A SageMaker mazon ECR) 镜像应遵守[自定义托管服务的推理代码](your-algorithms-inference-code.md)中描述的基本协议，该合同规定了人工智能与运行你自己的推理代码的 Docker 容器的交互 SageMaker 方式。为了使容器能够同时加载和提供多个模型，还必须遵循其他行为 APIs 和行为。此附加合同包括新增 APIs 的加载、列出、获取和卸载模型，以及用于调用模型的不同API。对于错误场景，也有不同的行为 APIs 需要遵守。为了表明您的容器符合额外要求，您可以在 Docker 文件中添加以下命令：

```
LABEL com.amazonaws.sagemaker.capabilities.multi-models=true
```

SageMaker AI 还会在容器中注入一个环境变量

```
SAGEMAKER_MULTI_MODEL=true
```

如果要为串行推理管道创建多模型端点，Docker 文件必须同时具有多模型和串行推理管道所需的标签。有关串行信息管道的更多信息，请参阅[使用推理管道运行实时预测](inference-pipeline-real-time.md)。

为了帮助您实施自定义容器的这些要求，我们提供了两个库：
+ [Multi Model Server](https://github.com/awslabs/multi-model-server) 是一个开源框架，用于提供机器学习模型，可以将其安装在容器中，以提供满足新多模型端点容器要求的前端。 APIs它提供了多模型端点所需的 HTTP 前端和模型管理功能，可以在单个容器中托管多个模型，在容器中动态加载和卸载模型，以及对指定加载模型执行推理。它还提供了一个支持可插入自定义后端处理程序的可插入后端，您可以在该后端实施自己的算法。
+ [SageMaker AI Inference Toolkit](https://github.com/aws/sagemaker-inference-toolkit) 是一个启动多模型服务器的库，其配置和设置使其与 SageMaker AI 多模型端点兼容。它还允许您根据场景需求调整重要的性能参数，例如，每个模型的工作人员数。

## 在 GPU 支持的实例上为多模型端点引入您自己的依赖项
<a name="build-multi-model-container-gpu"></a>

多模型服务器和 SageMaker AI 推理工具包库目前不支持在具有 GPU 支持的实例的多模型终端节点上使用自带容器 (BYOC) 功能。

要使用支持 GPU 的实例创建多模型终端节点，你可以使用 SageMaker AI 支持的 [NVIDIA Triton 推理服务器。和 NV [IDIA Tr](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only) iton 推理容器](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)。要引入自己的依赖关系，你可以使用 SageMaker AI 支持的 [NVIDIA Triton 推理服务器](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)作为 Docker 文件的基础映像来构建自己的容器：

```
FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
```

**重要**  
带有 Triton 推理服务器的容器是唯一支持用于 GPU 支持的多模型端点的容器。

## 使用 A SageMaker I 推理工具包
<a name="multi-model-inference-toolkit"></a>

**注意**  
A SageMaker I 推理工具包仅支持 CPU 支持的多模型端点。GPU 支持的多模型端点目前不支持 SageMaker AI 推理工具包。

[支持多模型终端节点的算法、框架和实例](multi-model-support.md)中列出了支持多模型端点的预构建容器。如果要使用任何其他框架或算法，您需要构建一个容器。最简单的方法是使用 [SageMaker AI 推理工具包](https://github.com/aws/sagemaker-inference-toolkit)来扩展现有的预构建容器。 SageMaker AI 推理工具包是多模型服务器 (MMS) 的实现，用于创建可在 AI 中部署的端点。 SageMaker 有关演示如何设置和部署支持 SageMaker AI 中多模型端点的自定义容器的示例笔记本，请参阅多模型端点 [BYOC](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/advanced_functionality/multi_model_bring_your_own) 示例笔记本。

**注意**  
 SageMaker AI 推理工具包仅支持 Python 模型处理程序。如果要用任何其他语言实现处理程序，则必须构建自己的容器来实现额外的多模型端点 APIs。有关信息，请参阅[多模型端点的自定义容器合同](mms-container-apis.md)。

**使用 SageMaker AI 推理工具包扩展容器**

1. 创建一个模型处理程序。MMS 需要使用一个模型处理程序，这是一个 Python 文件，它实施一些函数以进行预处理，从模型中获得结果以及在模型处理程序中处理输出。有关模型处理程序的示例，请参阅示例笔记本中的 [model\$1handler.py](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/multi_model_bring_your_own/container/model_handler.py)。

1. 导入推理工具包并使用其 `model_server.start_model_server` 函数以启动 MMS。以下示例来自于示例笔记本中的 `dockerd-entrypoint.py` 文件。请注意，`model_server.start_model_server` 调用传递上一步中描述的模型处理程序：

   ```
   import subprocess
   import sys
   import shlex
   import os
   from retrying import retry
   from subprocess import CalledProcessError
   from sagemaker_inference import model_server
   
   def _retry_if_error(exception):
       return isinstance(exception, CalledProcessError or OSError)
   
   @retry(stop_max_delay=1000 * 50,
          retry_on_exception=_retry_if_error)
   def _start_mms():
       # by default the number of workers per model is 1, but we can configure it through the
       # environment variable below if desired.
       # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2'
       model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle')
   
   def main():
       if sys.argv[1] == 'serve':
           _start_mms()
       else:
           subprocess.check_call(shlex.split(' '.join(sys.argv[1:])))
   
       # prevent docker exit
       subprocess.call(['tail', '-f', '/dev/null'])
       
   main()
   ```

1. 在 `Dockerfile` 中，从第一步中复制模型处理程序，并在 `Dockerfile` 中将上一步中的 Python 文件指定为入口点。以下几行来自于示例笔记本中使用的 [Dockerfile](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/multi_model_bring_your_own/container/Dockerfile)：

   ```
   # Copy the default custom service file to handle incoming data and inference requests
   COPY model_handler.py /home/model-server/model_handler.py
   
   # Define an entrypoint script for the docker image
   ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
   ```

1. 构建并注册您的容器。示例笔记本中的以下 Shell 脚本构建容器，并将其上传到您的 AWS 账户中的 Amazon Elastic Container Registry 存储库：

   ```
   %%sh
   
   # The name of our algorithm
   algorithm_name=demo-sagemaker-multimodel
   
   cd container
   
   account=$(aws sts get-caller-identity --query Account --output text)
   
   # Get the region defined in the current configuration (default to us-west-2 if none defined)
   region=$(aws configure get region)
   region=${region:-us-west-2}
   
   fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest"
   
   # If the repository doesn't exist in ECR, create it.
   aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1
   
   if [ $? -ne 0 ]
   then
       aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null
   fi
   
   # Get the login command from ECR and execute it directly
   $(aws ecr get-login --region ${region} --no-include-email)
   
   # Build the docker image locally with the image name and then push it to ECR
   # with the full name.
   
   docker build -q -t ${algorithm_name} .
   docker tag ${algorithm_name} ${fullname}
   
   docker push ${fullname}
   ```

现在，您可以使用此容器在 SageMaker AI 中部署多模型终端节点。

**Topics**
+ [

## 在 CPU 支持的实例上为多模型端点引入您自己的依赖项
](#build-multi-model-container-cpu)
+ [

## 在 GPU 支持的实例上为多模型端点引入您自己的依赖项
](#build-multi-model-container-gpu)
+ [

## 使用 A SageMaker I 推理工具包
](#multi-model-inference-toolkit)
+ [

# 多模型端点的自定义容器合同
](mms-container-apis.md)

# 多模型端点的自定义容器合同
<a name="mms-container-apis"></a>

要处理多个模型，您的容器必须支持一组模型 APIs ，使得 Amazon SageMaker AI 能够与容器通信，以便根据需要装载、列出、获取和卸载模型。在新集合中使用 APIs 作为键输入参数。`model_name`客户容器需要使用 `model_name` 作为映射键来跟踪已加载的模型。此外，`model_name` 是一个不透明的标识符，不一定是传递给 `InvokeEndpoint` API 的 `TargetModel` 参数的值。`InvokeEndpoint`请求中的原始`TargetModel`值 APIs 作为标头传递到容器中，该`X-Amzn-SageMaker-Target-Model`标头可用于记录目的。

**注意**  
目前，只有 SageMaker AI 的 [NVIDIA Triton Inference Server 容器支持支持 GPU 的实例的多模型端点。](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)该容器已实施了下文定义的合同。客户可以直接将此容器与其多模型 GPU 端点一起使用，无需任何额外工作。

您可以在容器 APIs 上为支持 CPU 的多模型端点配置以下内容。

**Topics**
+ [

## 加载模型 API
](#multi-model-api-load-model)
+ [

## 列出模型 API
](#multi-model-api-list-model)
+ [

## 获取模型 API
](#multi-model-api-get-model)
+ [

## 卸载模型 API
](#multi-model-api-unload-model)
+ [

## 调用模型 API
](#multi-model-api-invoke-model)

## 加载模型 API
<a name="multi-model-api-load-model"></a>

指示容器将主体的 `url` 字段中的特定模型加载到客户容器的内存中，并使用分配的 `model_name` 来跟踪该模型。加载模型后，容器应准备好使用此 `model_name` 提供推理请求。

```
POST /models HTTP/1.1
Content-Type: application/json
Accept: application/json

{
     "model_name" : "{model_name}",
     "url" : "/opt/ml/models/{model_name}/model",
}
```

**注意**  
如果已加载 `model_name`，此 API 应返回 409。每当由于内存不足或任何其他资源而无法加载模型时，此 API 都应向 AI 返回 507 HTTP 状态码，然后 SageMaker 人工智能会启动卸载未使用的模型进行回收。

## 列出模型 API
<a name="multi-model-api-list-model"></a>

返回已加载到客户容器内存中的模型列表。

```
GET /models HTTP/1.1
Accept: application/json

Response = 
{
    "models": [
        {
             "modelName" : "{model_name}",
             "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        {
            "modelName" : "{model_name}",
            "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        ....
    ]
}
```

此 API 还支持分页。

```
GET /models HTTP/1.1
Accept: application/json

Response = 
{
    "models": [
        {
             "modelName" : "{model_name}",
             "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        {
            "modelName" : "{model_name}",
            "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        ....
    ]
}
```

SageMaker AI 最初可以调用列表模型 API，而无需为提供值`next_page_token`。如果 `nextPageToken` 字段作为响应的一部分返回，它将在后续的列出模型调用中作为 `next_page_token` 的值提供。如果未返回 `nextPageToken`，则意味着没有其他模型可供返回。

## 获取模型 API
<a name="multi-model-api-get-model"></a>

这是 `model_name` 实体上的简单读取 API。

```
GET /models/{model_name} HTTP/1.1
Accept: application/json

{
     "modelName" : "{model_name}",
     "modelUrl" : "/opt/ml/models/{model_name}/model",
}
```

**注意**  
如果未加载 `model_name`，此 API 应返回 404。

## 卸载模型 API
<a name="multi-model-api-unload-model"></a>

指示 A SageMaker I 平台指示客户容器从内存中卸载模型。这将在开始新模型加载过程时开始移出由平台确定的候选模型。当此 API 返回响应时，容器应回收预配置到 `model_name` 的资源。

```
DELETE /models/{model_name}
```

**注意**  
如果未加载 `model_name`，此 API 应返回 404。

## 调用模型 API
<a name="multi-model-api-invoke-model"></a>

从提供的特定 `model_name` 生成预测请求。 SageMaker AI Runtime `InvokeEndpoint` 请求支持`X-Amzn-SageMaker-Target-Model`作为新的标头，该标头采用为调用指定的模型的相对路径。 SageMaker AI 系统通过将 `CreateModel` API 调用中提供的前缀与模型的相对路径相结合来构造模型的绝对路径。

```
POST /models/{model_name}/invoke HTTP/1.1
Content-Type: ContentType
Accept: Accept
X-Amzn-SageMaker-Custom-Attributes: CustomAttributes
X-Amzn-SageMaker-Target-Model: [relativePath]/{artifactName}.tar.gz
```

**注意**  
如果未加载 `model_name`，此 API 应返回 404。

此外，在 GPU 实例上，如果由于内存或其他资源不足而`InvokeEndpoint`失败，此 API 应向 AI 返回 507 HTTP 状态码，然后 SageMaker 人工智能会启动卸载未使用的模型进行回收。

# 多模型端点安全性
<a name="multi-model-endpoint-security"></a>

多模型端点中的模型和数据位于实例存储卷和容器内存的同一位置中。Amazon A SageMaker I 终端节点的所有实例都在您拥有的单个租户容器上运行。只有您的模型才能在您的多模型端点上运行。您有责任管理请求与模型的映射，并为用户提供对正确目标模型的访问权限。 SageMaker AI 使用 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)提供基于 IAM 身份的策略，您可以使用这些策略来指定允许或拒绝的操作和资源，以及允许或拒绝操作的条件。

默认情况下，对多模型端点具有 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) 权限的 IAM 主体可以调用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) 操作中 S3 前缀地址处的任何模型，前提是操作中定义的 IAM 执行角色有权下载该模型。如果需要将 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) 访问限制为 S3 中的一组有限模型，可以执行以下操作之一：
+ 使用 `sagemaker:TargetModel` IAM 条件键将 `InvokeEndpont` 调用限制在端点中托管的特定模型。例如，仅当 `TargetModel` 字段的值与指定的正则表达式之一匹配时，以下策略才允许 `InvokeEndpont` 请求：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "sagemaker:InvokeEndpoint"
              ],
              "Effect": "Allow",
              "Resource":
              "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
              "Condition": {
                  "StringLike": {
                      "sagemaker:TargetModel": ["company_a/*", "common/*"]
                  }
              }
          }
      ]
  }
  ```

------

  有关 SageMaker AI 条件密钥的信息，请参阅*AWS Identity and Access Management 用户指南*中的 [Amazon SageMaker AI 条件密](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsagemaker.html#amazonsagemaker-policy-keys)钥。
+ 创建具有更严格的 S3 前缀的多模型端点。

有关 SageMaker AI 如何使用角色管理终端节点访问权限和代表您执行操作的更多信息，请参阅[如何使用 SageMaker AI 执行角色](sagemaker-roles.md)。您的客户可能还有由他们自己的合规性要求决定的某些特定数据隔离要求，可以使用 IAM 身份来满足这些要求。

# CloudWatch 多模型端点部署指标
<a name="multi-model-endpoint-cloudwatch-metrics"></a>

Amazon SageMaker AI 提供终端节点指标，因此您可以监控缓存命中率、加载的模型数量以及模型在多模型终端节点上加载、下载和上传的等待时间。CPU 和 GPU 支持的多模型终端节点的某些指标有所不同，因此以下各节描述了您可以用于每种类型的多模型终端节点的 Amazon CloudWatch 指标。

有关指标的更多信息，请参阅[亚马逊中的亚马逊 A SageMaker I 指标 CloudWatch](monitoring-cloudwatch.md) 中的**多模型端点模型加载指标**和**多模型端点模型实例指标**。不支持基于模型的指标。

## CloudWatch CPU 支持的多模型端点的指标
<a name="multi-model-endpoint-cloudwatch-metrics-cpu"></a>

您可以在 CPU 支持的多模型端点上监控以下指标。

`AWS/SageMaker`命名空间包括以下模型从对的调用加载指标[ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html)。

指标按 1 分钟一次的频率提供。

有关 CloudWatch 指标保留多长时间的信息，请参阅 *Amazon CloudWatch API 参考[GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*中的。

**多模型端点模型加载指标**


| 指标 | 说明 | 
| --- | --- | 
| ModelLoadingWaitTime  |  调用请求等待下载和/或加载目标模型以执行推理的间隔时间。 单位：微秒  有效统计数据：Average、Sum、Min、Max、Sample Count   | 
| ModelUnloadingTime  |  通过容器的 `UnloadModel` API 调用卸载模型所用的间隔时间。 单位：微秒  有效统计数据：Average、Sum、Min、Max、Sample Count   | 
| ModelDownloadingTime |  从 Amazon Simple Storage Service (Amazon S3) 下载模型所花费的时间间隔。 单位：微秒 有效统计数据：Average、Sum、Min、Max、Sample Count   | 
| ModelLoadingTime  |  通过容器的 `LoadModel` API 调用加载模型所用的间隔时间。 单位：微秒  有效统计数据：Average、Sum、Min、Max、Sample Count   | 
| ModelCacheHit  |  发送到已加载模型的多模型端点的 `InvokeEndpoint` 请求数。 “Average”统计数据显示已加载模型的请求的比率。 单位：无 有效统计数据：Average、Sum、Sample Count  | 

**多模型端点模型加载指标的维度**


| 维度 | 说明 | 
| --- | --- | 
| EndpointName, VariantName |  针对指定端点和变体的 `ProductionVariant` 筛选端点调用指标。  | 

`/aws/sagemaker/Endpoints` 命名空间包含通过调用 [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) 获得的以下实例指标。

指标按 1 分钟一次的频率提供。

有关 CloudWatch 指标保留多长时间的信息，请参阅 *Amazon CloudWatch API 参考[GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*中的。

**多模型端点模型实例指标**


| 指标 | 说明 | 
| --- | --- | 
| LoadedModelCount  |  多模型端点的容器中加载的模型数。此指标是按实例发射的。 周期为 1 分钟的“Average”统计数据指示每个实例加载的平均模型数。 “Sum”统计数据指示在端点中的所有实例上加载的模型总数。 此指标跟踪的模型不一定是唯一的，因为可能在端点的多个容器中加载模型。 单位：无 有效统计数据：Average、Sum、Min、Max、Sample Count  | 
| CPUUtilization  |  每个 CPU 核心利用率的总和。每个核心的 CPU 利用率范围均为 0 – 100。例如，如果有四个 CPUs，则`CPUUtilization`范围为 0% — 400%。 对于端点变体，该值是实例上的主容器和辅助容器的 CPU 利用率的总和。 单位：百分比  | 
| MemoryUtilization |  实例上的容器所使用的内存的百分比。此值范围为 0% – 100%。 对于端点变体，该值是实例上的主容器和辅助容器的内存利用率的总和。 单位：百分比  | 
| DiskUtilization |  实例上容器所使用的磁盘空间的百分比。此值范围为 0%–100%。 对于端点变体，该值是实例上的主容器和辅助容器的磁盘空间利用率的总和。 单位：百分比  | 

## CloudWatch GPU 多模型端点部署的指标
<a name="multi-model-endpoint-cloudwatch-metrics-gpu"></a>

您可以在 GPU 支持的多模型端点上监控以下指标。

`AWS/SageMaker`命名空间包括以下模型从对的调用加载指标[ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html)。

指标按 1 分钟一次的频率提供。

有关 CloudWatch 指标保留多长时间的信息，请参阅 *Amazon CloudWatch API 参考[GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*中的。

**多模型端点模型加载指标**


| 指标 | 说明 | 
| --- | --- | 
| ModelLoadingWaitTime  |  调用请求等待下载和/或加载目标模型以执行推理的间隔时间。 单位：微秒  有效统计数据：Average、Sum、Min、Max、Sample Count   | 
| ModelUnloadingTime  |  通过容器的 `UnloadModel` API 调用卸载模型所用的间隔时间。 单位：微秒  有效统计数据：Average、Sum、Min、Max、Sample Count   | 
| ModelDownloadingTime |  从 Amazon Simple Storage Service (Amazon S3) 下载模型所花费的时间间隔。 单位：微秒 有效统计数据：Average、Sum、Min、Max、Sample Count   | 
| ModelLoadingTime  |  通过容器的 `LoadModel` API 调用加载模型所用的间隔时间。 单位：微秒  有效统计数据：Average、Sum、Min、Max、Sample Count   | 
| ModelCacheHit  |  发送到已加载模型的多模型端点的 `InvokeEndpoint` 请求数。 “Average”统计数据显示已加载模型的请求的比率。 单位：无 有效统计数据：Average、Sum、Sample Count  | 

**多模型端点模型加载指标的维度**


| 维度 | 说明 | 
| --- | --- | 
| EndpointName, VariantName |  针对指定端点和变体的 `ProductionVariant` 筛选端点调用指标。  | 

`/aws/sagemaker/Endpoints` 命名空间包含通过调用 [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) 获得的以下实例指标。

指标按 1 分钟一次的频率提供。

有关 CloudWatch 指标保留多长时间的信息，请参阅 *Amazon CloudWatch API 参考[GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*中的。

**多模型端点模型实例指标**


| 指标 | 说明 | 
| --- | --- | 
| LoadedModelCount  |  多模型端点的容器中加载的模型数。此指标是按实例发射的。 周期为 1 分钟的“Average”统计数据指示每个实例加载的平均模型数。 “Sum”统计数据指示在端点中的所有实例上加载的模型总数。 此指标跟踪的模型不一定是唯一的，因为可能在端点的多个容器中加载模型。 单位：无 有效统计数据：Average、Sum、Min、Max、Sample Count  | 
| CPUUtilization  |  每个单独的 CPU 核心利用率的总和。每个核心的 CPU 利用率范围均为 0 – 100。例如，如果有四个 CPUs，则`CPUUtilization`范围为 0% — 400%。 对于端点变体，该值是实例上的主容器和辅助容器的 CPU 利用率的总和。 单位：百分比  | 
| MemoryUtilization |  实例上的容器所使用的内存的百分比。此值范围为 0% – 100%。 对于端点变体，该值是实例上的主容器和辅助容器的内存利用率的总和。 单位：百分比  | 
| GPUUtilization |  实例上的容器所使用的 GPU 单位的百分比。该值的范围介于 0-100 之间，然后乘以数字。 GPUs例如，如果有四个 GPUs，则`GPUUtilization`范围为 0% — 400%。 对于端点变体，该值是实例上的主容器和辅助容器的 GPU 利用率的总和。 单位：百分比  | 
| GPUMemoryUtilization |  实例上的容器所使用的 GPU 内存的百分比。值范围为 0-100，并乘以的数字。 GPUs例如，如果有四个 GPUs，则`GPUMemoryUtilization`范围为 0%-400%。 对于端点变体，该值是实例上的主容器和辅助容器的 GPU 内存利用率的总和。 单位：百分比  | 
| DiskUtilization |  实例上容器所使用的磁盘空间的百分比。此值范围为 0%–100%。 对于端点变体，该值是实例上的主容器和辅助容器的磁盘空间利用率的总和。 单位：百分比  | 

# 设置 SageMaker AI 多模型端点模型缓存行为
<a name="multi-model-caching"></a>

默认情况下，多模型端点会将常用模型缓存在内存（CPU 或 GPU，取决于您拥有 CPU 还是 GPU 支持的实例）和磁盘上，以便在推理时降低延迟。只有当容器的内存或磁盘空间不足以容纳新的目标模型时，才会从磁盘上卸载 and/or 缓存的模型。

您可以更改多模型端点的缓存行为，并通过在调用 [create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model) 时设置参数 `ModelCacheSetting` 来明确启用或禁用模型缓存。

对于不会通过模型缓存受益的使用案例，我们建议将 `ModelCacheSetting` 参数的值设置为 `Disabled`。例如，当需要从端点提供大量模型，但每个模型只被调用一次（或很少被调用）时。对于此类使用案例，请将 `ModelCacheSetting` 参数的值设置为 `Disabled`，允许为 `invoke_endpoint` 请求使用更高的每秒交易量 (TPS)（与默认缓存模式相比）。在这些用例中，更高的 TPS 是因为 SageMaker AI 在`invoke_endpoint`请求后会执行以下操作：
+ 从内存中异步卸载模型，并在调用模型后立即将其从磁盘中删除。
+ 为在推理容器中下载和加载模型提供更高的并发度。对于 CPU 和 GPU 支持的端点，并发度是容器实例 v CPUs 数的一个系数。

有关为多模型终端节点选择 A SageMaker I ML 实例类型的指南，请参阅[多模型端点部署的实例建议](multi-model-endpoint-instance.md)。

# 为多模型端点部署设置自动扩缩策略
<a name="multi-model-endpoints-autoscaling"></a>

SageMaker AI 多模型端点完全支持自动缩放，它可以管理模型的副本，以确保模型根据流量模式进行扩展。我们建议您基于 [多模型端点部署的实例建议](multi-model-endpoint-instance.md) 配置多模型端点和实例大小时，并为端点设置基于实例的自动扩缩。用于触发自动扩展事件的调用率基于端点所提供的完整模型集中的聚合预测集。有关设置终端节点自动扩展的更多详细信息，请参阅[自动缩放 Amazon SageMaker AI 模型](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html)。

您可以在 CPU 和 GPU 支持的多模型端点上使用预定义和自定义指标设置自动扩缩策略。

**注意**  
SageMaker AI 多模型端点指标以一分钟为粒度提供。

## 定义扩展策略
<a name="multi-model-endpoints-autoscaling-define"></a>

要为扩展策略指定指标和目标值，可以配置目标跟踪扩展策略。您可以使用预定义指标或自定义指标。

扩展策略配置由 JSON 块表示。您可以在文本文件中将扩展策略配置保存为 JSON 块。您可以在调用 AWS CLI 或 Application Auto Scaling API 时使用该文本文件。有关策略配置语法的更多信息，请参阅 *Application Auto Scaling API 参考* 中的 `[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)`。

可以使用以下选项定义目标跟踪扩展策略配置。

### 使用预定义的指标
<a name="multi-model-endpoints-autoscaling-predefined"></a>

要快速为变体定义目标跟踪扩展策略，请使用 `SageMakerVariantInvocationsPerInstance` 预定义指标。`SageMakerVariantInvocationsPerInstance` 是每分钟调用变体各个实例的平均次数。我们强烈建议您使用此指标。

要在扩展策略中使用预定义的指标，请为策略创建一个目标跟踪配置。在目标扩展配置中，包含 `PredefinedMetricSpecification` 以表示预定义的指标，并包含 `TargetValue` 以表示该指标的目标值。

以下示例是变体的典型目标跟踪扩展策略配置。在此配置中，我们使用 `SageMakerVariantInvocationsPerInstance` 预定义指标来调整变体实例数，以便每个实例的 `InvocationsPerInstance` 指标都为 `70`。

```
{"TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "InvocationsPerInstance"
    }
}
```

**注意**  
建议您在使用多模型端点时使用 `InvocationsPerInstance`。该指标的 `TargetValue` 取决于您的应用程序的延迟要求。我们还建议您对端点进行负载测试，以设置合适的扩展参数值。要详细了解负载测试和为终端节点设置自动扩展，请参阅博客[在 Amazon AI 中配置自动缩放推理](https://aws.amazon.com/blogs/machine-learning/configuring-autoscaling-inference-endpoints-in-amazon-sagemaker/)终端节点。 SageMaker 

### 使用自定义指标
<a name="multi-model-endpoints-autoscaling-custom"></a>

如果您需要定义满足您的自定义要求的目标跟踪扩展策略，请定义自定义指标。您可以根据随扩展成比例变化的任何生产变体指标定义一个自定义指标。

并非所有 SageMaker AI 指标都适用于目标跟踪。指标必须是有效的使用率指标，它必须描述实例的繁忙程度。指标的值必须随变体实例数按反比例增大或减小。也就是说，当实例数增加时，指标的值应减小。

**重要**  
在生产中部署自动扩展之前，您必须使用自定义指标来测试自动扩展。

#### CPU 支持的多模型端点的自定义指标示例
<a name="multi-model-endpoints-autoscaling-custom-cpu"></a>

以下示例是扩展策略的目标跟踪配置。在此配置中，对于名为 `my-model` 的模型，`CPUUtilization` 的自定义指标会根据所有实例的、50% 的平均 CPU 利用率调整端点上的实例数量。

```
{"TargetValue": 50,
    "CustomizedMetricSpecification":
    {"MetricName": "CPUUtilization",
        "Namespace": "/aws/sagemaker/Endpoints",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "ModelName","Value": "my-model"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

#### GPU 支持的多模型端点的自定义指标示例
<a name="multi-model-endpoints-autoscaling-custom-gpu"></a>

以下示例是扩展策略的目标跟踪配置。在此配置中，对于名为 `my-model` 的模型，`GPUUtilization` 的自定义指标会根据所有实例的、50% 的平均 GPU 利用率调整端点上的实例数量。

```
{"TargetValue": 50,
    "CustomizedMetricSpecification":
    {"MetricName": "GPUUtilization",
        "Namespace": "/aws/sagemaker/Endpoints",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "ModelName","Value": "my-model"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

## 添加冷却时间
<a name="multi-model-endpoints-autoscaling-cooldown"></a>

要添加用于横向扩展端点的冷却时间，请为 `ScaleOutCooldown` 指定一个值（以秒为单位）。类似地，要添加用于横向缩减模型的冷却时间，请为 `ScaleInCooldown` 添加一个值（以秒为单位）。有关 `ScaleInCooldown` 和 `ScaleOutCooldown` 的更多信息，请参阅 *Application Auto Scaling API 参考* 中的 `[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)`。

以下示例是扩展策略的目标跟踪配置示例。在该配置中，`SageMakerVariantInvocationsPerInstance` 预定义指标用于根据该变体的所有实例中平均值 `70` 来调整扩展。该配置将横向缩减冷却时间指定为 10 分钟，并将横向扩展冷却时间指定为 5 分钟。

```
{"TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```

# 多容器端点
<a name="multi-container-endpoints"></a>

SageMaker AI 多容器端点使客户能够在单个 A SageMaker I 端点上部署使用不同模型或框架的多个容器。可以将容器作为推理管线按顺序运行它们，也可以使用直接调用来单独访问每个容器，以提高端点利用率并优化成本。

有关按顺序调用多容器端点中容器的信息，请参阅[亚马逊 A SageMaker I 中的推理管道](inference-pipelines.md)。

有关调用多容器端点中的特定容器的信息，请参阅[通过直接调用来调用多容器端点](multi-container-direct.md)

**Topics**
+ [

# 创建多容器端点 (Boto 3)
](multi-container-create.md)
+ [

# 更新多容器端点
](multi-container-update.md)
+ [

# 通过直接调用来调用多容器端点
](multi-container-direct.md)
+ [

# 进行直接调用的多容器端点的安全性
](multi-container-security.md)
+ [

# 进行直接调用的多容器端点的指标
](multi-container-metrics.md)
+ [

# 自动扩展多容器端点
](multi-container-auto-scaling.md)
+ [

# 多容器端点问题排查
](multi-container-troubleshooting.md)

# 创建多容器端点 (Boto 3)
<a name="multi-container-create"></a>

通过调用[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)、和来创建多容器终端节点 [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)，[CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) APIs 就像创建任何其他端点一样。您可以将这些容器作为推理管线按顺序运行它们，也可以使用直接调用来运行各个单独的容器。当您调用 `create_model` 时，多容器端点需要满足以下要求：
+ 使用 `Containers` 参数代替 `PrimaryContainer`，并在 `Containers` 参数中包含多个容器。
+ 直接调用的多容器端点中的每个容器都需要 `ContainerHostname` 参数。
+ 将 `InferenceExecutionConfig` 字段的 `Mode` 参数设置为 `Direct` 以直接调用每个容器，或者设置为 `Serial` 以将容器用作推理管线。默认模式为 `Serial`。

**注意**  
目前，多容器端点最多支持 15 个容器。

以下示例创建了用于直接调用的多容器模型。

1. 创建容器元素，且 `InferenceExecutionConfig` 为直接调用。

   ```
   container1 = {
                    'Image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage1:mytag',
                    'ContainerHostname': 'firstContainer'
                }
   
   container2 = {
                    'Image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage2:mytag',
                    'ContainerHostname': 'secondContainer'
                }
   inferenceExecutionConfig = {'Mode': 'Direct'}
   ```

1. 使用容器元素创建模型并设置 `InferenceExecutionConfig` 字段。

   ```
   import boto3
   sm_client = boto3.Session().client('sagemaker')
   
   response = sm_client.create_model(
                  ModelName = 'my-direct-mode-model-name',
                  InferenceExecutionConfig = inferenceExecutionConfig,
                  ExecutionRoleArn = role,
                  Containers = [container1, container2]
              )
   ```

要创建端点，则要调用 [create\$1endpoint\$1config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) 和 [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint)，这和创建任何其他端点一样。

# 更新多容器端点
<a name="multi-container-update"></a>

要更新 Amazon A SageMaker I 多容器终端节点，请完成以下步骤。

1.  调用 [create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model)，为 `InferenceExecutionConfig` 字段中的 `Mode` 参数使用新值以创建一个新模型。

1.  调用 [create\$1endpoint\$1config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config)，使用您在上一步中创建的新模型创建具有不同名称的新端点配置。

1.  调用 [update\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.update_endpoint)，使用您在上一步中创建的新端点配置更新端点。

# 通过直接调用来调用多容器端点
<a name="multi-container-direct"></a>

SageMaker AI 多容器端点使客户能够部署多个容器，以便在 SageMaker AI 终端节点上部署不同的模型。您最多可以在单个端点上托管 15 个不同的推理容器。通过使用直接调用，您可以向托管在多容器端点上的特定推理容器发送请求。

 要通过直接调用来调用多容器端点，请像调用任何其他端点一样调用 [invoke\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint)，并使用 `TargetContainerHostname` 参数指定要调用的容器。

 

 以下示例直接调用多容器端点的 `secondContainer` 以获得预测。

```
import boto3
runtime_sm_client = boto3.Session().client('sagemaker-runtime')

response = runtime_sm_client.invoke_endpoint(
   EndpointName ='my-endpoint',
   ContentType = 'text/csv',
   TargetContainerHostname='secondContainer', 
   Body = body)
```

 对于向多容器端点发出的每个直接调用请求，只有具有 `TargetContainerHostname` 的容器才会处理调用请求。如果执行以下任一操作，都会收到验证错误：
+ 指定端点中不存在的 `TargetContainerHostname`
+ 不要在向配置为直接调用的端点发出的请求中指定 `TargetContainerHostname` 的值
+ 在向未配置为直接调用的端点发出的请求中指定 `TargetContainerHostname` 的值。

# 进行直接调用的多容器端点的安全性
<a name="multi-container-security"></a>

 对于进行直接调用的多容器端点，是通过共享内存和存储卷在单个实例中托管多个容器。您有责任使用安全的容器，维护请求与目标容器的正确映射，并为用户提供对目标容器的正确访问权限。 SageMaker AI 使用 IAM 角色提供基于 IAM 身份的策略，您可以使用这些策略来指定该角色是允许还是拒绝该角色访问资源，以及在什么条件下访问资源。有关 IAM 角色的更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。有关基于身份的策略的信息，请参阅[基于身份的策略和基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)。

默认情况下，如果 IAM 主体对直接调用的多容器端点具有 `InvokeEndpoint` 权限，则可以使用您在调用 `invoke_endpoint` 时指定的端点名称调用端点中的任何容器。如果您需要限制对多容器端点内有限的一组容器的 `invoke_endpoint` 访问，请使用 `sagemaker:TargetContainerHostname` IAM 条件键。以下策略说明如何限制对端点内特定容器的调用。

仅在 `TargetContainerHostname` 字段的值与指定的正则表达式之一匹配时，以下策略才允许发出 `invoke_endpoint` 请求：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "customIps*",
                        "common*"
                    ]
                }
            }
        }
    ]
}
```

------

在 `TargetContainerHostname` 字段的值与 `Deny` 语句中指定的正则表达式之一匹配时，以下策略拒绝发出 `invoke_endpoint` 请求。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "model_name*"
                    ]
                }
            }
        },
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Deny",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "special-model_name*"
                    ]
                }
            }
        }
    ]
}
```

------

 有关 SageMaker AI 条件密钥的信息，请参阅《*AWS Identity and Access Management 用户指南》*中的 [ SageMaker AI 条件密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsagemaker.html#amazonsagemaker-policy-keys)。

# 进行直接调用的多容器端点的指标
<a name="multi-container-metrics"></a>

除了中列出的终端节点指标外[亚马逊中的亚马逊 A SageMaker I 指标 CloudWatch](monitoring-cloudwatch.md)， SageMaker AI 还提供每个容器的指标。

直接调用的多容器终端节点的每容器指标位于两个命名空间中， CloudWatch 并分为两个命名空间：和。`AWS/SageMaker` `aws/sagemaker/Endpoints``AWS/SageMaker` 命名空间包含与调用相关的指标，`aws/sagemaker/Endpoints` 命名空间包含内存和 CPU 利用率指标。

下表列出进行直接调用的多容器端点中每个容器的指标。所有指标都使用 [`EndpointName, VariantName, ContainerName`] 维度，它过滤特定端点、特定变体以及与特定容器对应的指标。这些指标与推理管线的指标名称相同，但处于单个容器级别 [`EndpointName, VariantName, ContainerName`]。

 


|  |  |  |  | 
| --- |--- |--- |--- |
|  指标名称  |  说明  |  维度  |  NameSpace  | 
|  Invocations  |  发送到端点内某个容器的 InvokeEndpoint 请求的数量。要获取发送到该容器的请求总数，请使用 Sum 统计数据。单位：无 有效统计数据：Sum、Sample Count |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  Invocation4XX Errors  |  位于特定容器中模型为其返回 4xx HTTP 响应代码的 InvokeEndpoint 请求的数量。对于每个4xx响应， SageMaker AI 都会发送1。单位：无 有效统计数据：Average、Sum |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  Invocation5XX Errors  |  位于特定容器中模型为其返回 5xx HTTP 响应代码的 InvokeEndpoint 请求的数量。对于每个5xx响应， SageMaker AI 都会发送1。单位：无 有效统计数据：Average、Sum |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  ContainerLatency  |  从 SageMaker AI 看来，目标容器响应所花费的时间。 ContainerLatency包括发送请求、从模型容器中获取响应以及在容器中完成推理所花费的时间。单位：微秒 有效统计数据：Average、Sum、Min、Max、Sample Count |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  OverheadLatency  |  在响应 SageMaker AI 向客户提出的开销请求所花费的时间中增加的时间。 OverheadLatency从 A SageMaker I 收到请求到向客户端返回响应的时间减去ModelLatency。除其他因素外，开销延迟还可能由于请求和响应负载大小、请求频率以及请求的身份验证或授权而变化。单位：微秒 有效统计数据：Average、Sum、Min、Max、“Sample Count”  |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  CPUUtilization  | 实例上运行的每个容器所使用的 CPU 单位的百分比。该值的范围从 0% 到 100%，并乘以的数量。 CPUs例如，如果有四个 CPUs，CPUUtilization则范围从 0% 到 400%。对于直接调用的终端节点， CPUUtilization 指标的数量等于该终端节点中的容器数量。单位：百分比  |  EndpointName, VariantName, ContainerName  | aws/sagemaker/Endpoints | 
|  MemoryUtilizaton  |  实例上运行的每个容器所使用的内存的百分比。此值范围从 0% 到 100%。与直接调用的终端节点类似， MemoryUtilization 指标的数量等于该端点中的容器数量。 CPUUtilization单位：百分比  |  EndpointName, VariantName, ContainerName  | aws/sagemaker/Endpoints | 

上表中的所有指标都特定于可直接调用的多容器端点。除这些用于每个容器的特殊指标之外，还有一些具有 `[EndpointName, VariantName]` 维度的变体级别指标，因为表中的所有指标都需要 `ContainerLatency`。

# 自动扩展多容器端点
<a name="multi-container-auto-scaling"></a>

如果要使用 `InvocationsPerInstance` 指标为多容器端点配置自动扩展，我们建议每个容器中的模型在每次推理请求中都显示相似的 CPU 利用率和延迟。建议这样做是因为如果流向多容器端点的流量从 CPU 使用率较低的模型转向 CPU 使用率较高的模型，但总调用量保持不变，则端点不会扩展，并且可能没有足够实例来处理对 CPU 使用率较高模型的所有请求。有关自动扩展端点的信息，请参阅[自动缩放 Amazon SageMaker 人工智能模型](endpoint-auto-scaling.md)。

# 多容器端点问题排查
<a name="multi-container-troubleshooting"></a>

以下部分可以帮助您排查多容器端点的错误。

## Ping 运行状况检查错误
<a name="multi-container-ping-errors"></a>

 存在多个容器时，端点内存和 CPU 在端点创建过程中会承受更大的压力。具体来说，`MemoryUtilization` 和 `CPUUtilization` 指标高于单容器端点的对应指标，因为利用率压力与容器数量成正比。因此，我们建议您选择具有足够内存和 CPU 的实例类型，以确保实例上有足够的内存来加载所有模型（同样的指导适用于部署推理管线）。否则，您的端点创建可能会失败并显示错误，例如 `XXX did not pass the ping health check`。

## 缺少 accept-bind-to-port =true 的 Docker 标签
<a name="multi-container-missing-accept"></a>

多容器端点中的容器侦听由 `SAGEMAKER_BIND_TO_PORT` 环境变量指定的端口而不是端口 8080。当容器在多容器终端节点中运行时， SageMaker AI 会自动向容器提供此环境变量。如果此环境变量不存在，则容器应默认为使用端口 8080。要指示您的容器使用此要求进行编译，请使用以下命令将标签添加到您的 Dockerfile：

```
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true
```

 否则，您将看到一条错误消息，例如 `Your Ecr Image XXX does not contain required com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true Docker label(s).`

 如果您的容器需要侦听第二个端口，请在 `SAGEMAKER_SAFE_PORT_RANGE` 环境变量指定的范围中选择端口。以 *XXXX*-格式将该值指定为包含范围*YYYY*，其中 XXXX 和 YYYY 是多位整数。 SageMaker 当您在多容器终端节点中运行容器时，AI 会自动提供此值。

# 亚马逊 A SageMaker I 中的推理管道
<a name="inference-pipelines"></a>

*推理管道*是一种 Amazon SageMaker AI 模型，由两到十五个容器组成的线性序列组成，用于处理数据推断请求。您可以使用推理管道来定义和部署预训练的 SageMaker AI 内置算法和自己打包在 Docker 容器中的自定义算法的任意组合。您可以使用推理管道合并预处理、预测和后处理数据科学任务。推理管道是完全托管的。

您可以添加 SageMaker AI Spark ML Serving 和 scikit-learn 容器，这些容器可以重复使用为训练模型开发的数据转换器。整个组装好的推理管道可以被视为一个 SageMaker AI 模型，您可以使用它来进行实时预测或直接处理批量转换，而无需任何外部预处理。

在推理管道模型中， SageMaker AI 将调用作为一系列 HTTP 请求进行处理。管道中的第一个容器处理初始请求，然后将中间响应作为请求发送到第二个容器，依此类推，针对管道中的每个容器。 SageMaker AI 将最终响应返回给客户端。

当您部署管道模型时， SageMaker AI 会在终端节点或转换任务中的每个亚马逊弹性计算云 (Amazon EC2) 实例上安装并运行所有容器。未来的处理和推理可以在低延迟下运行，因为容器与相同的 EC2 实例处于相同位置中。您可以使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) 操作或者从控制台为管道模型定义容器。您可以使用 `Containers` 参数来设置组成管道的容器，而不是设置一个 `PrimaryContainer`。您还可以指定容器的执行顺序。

管道模型是不可变的，但您可以通过使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) 操作部署一个管道模型来更新推理管道。这种模块性支持在试验期间实现更高的灵活性。

有关如何使用 SageMaker 模型注册表创建推理管道的信息，请参阅[利用模型注册中心进行模型注册部署](model-registry.md)。

使用此功能不会产生额外费用。您仅需为端点上运行的实例支付费用。

**Topics**
+ [

## 推理管道的示例笔记本
](#inference-pipeline-sample-notebooks)
+ [

# 使用 Spark ML 和 Scikit-learn 的特征处理
](inference-pipeline-mleap-scikit-learn-containers.md)
+ [

# 创建管道模型
](inference-pipeline-create-console.md)
+ [

# 使用推理管道运行实时预测
](inference-pipeline-real-time.md)
+ [

# 利用推理管道进行批量转换
](inference-pipeline-batch.md)
+ [

# 推理管道日志和指标
](inference-pipeline-logs-metrics.md)
+ [

# 推理管道问题排查
](inference-pipeline-troubleshoot.md)

## 推理管道的示例笔记本
<a name="inference-pipeline-sample-notebooks"></a>

有关展示如何创建和部署推理管道的示例，请参阅使用 [Scikit-Learn 和线性学习器的推理管道](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-python-sdk/scikit_learn_inference_pipeline)示例笔记本。有关创建和访问可用于在 SageMaker AI 中运行示例的 Jupyter 笔记本实例的说明，请参阅。[Amazon SageMaker 笔记本实例](nbi.md)

要查看所有 SageMaker AI 示例的列表，请在创建并打开笔记本实例后，选择 **SageMaker AI 示例**选项卡。有三个推理管道笔记本。刚刚介绍的前两个推理管道笔记本位于 `advanced_functionality` 文件夹中，第三个笔记本位于 `sagemaker-python-sdk` 文件夹中。要打开笔记本，请选择其 **Use (使用)** 选项卡，然后选择 **Create copy (创建副本)**。

# 使用 Spark ML 和 Scikit-learn 的特征处理
<a name="inference-pipeline-mleap-scikit-learn-containers"></a>

在使用 Amazon A SageMaker I 内置算法或自定义算法训练模型之前，您可以使用 Spark 和 scikit-learn 预处理器来转换数据和设计功能。

## 使用 Spark ML 的特征处理
<a name="feature-processing-spark"></a>

[你可以使用 SageMaker AI 笔记本中的无服务器 ETL（提取、转换、加载）服务 Glue 运行 Spark ML 作业。AWS](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)您还可以连接到现有 EMR 集群以使用 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) 运行 Spark ML 作业。为此，你需要一个 AWS Identity and Access Management (IAM) 角色来授予从你的 A SageMaker I 笔记本向进行呼叫的权限 AWS Glue。

**注意**  
要了解 AWS Glue 支持哪些 Python 和 Spark 版本，请参阅 [AWS Glue 发行说明](/glue/latest/dg/release-notes.html)。

设计功能后，您可以将 Spark ML 作业打包并序列化 MLeap到 MLeap 容器中，然后将其添加到推理管道中。您不需要使用外部管理的 Spark 集群。使用此方法，您可以从几个示例行无缝扩展到数 TB 的数据。相同的转换器可同时在训练和推理期间使用，因此您不需要重复预处理和特征设计逻辑，或者开发一次性解决方案来保存这些模型。借助推导管道，您不需要维护外部基础设施，可以直接利用数据输入进行预测。

当你在上运行 Spark ML 作业时 AWS Glue，Spark ML 管道会被序列化为[MLeap](https://github.com/combust/mleap)格式。然后，您可以将该作业与 SageMaker AI 推理管[道中的 SparkML 模型服务容器](https://github.com/aws/sagemaker-sparkml-serving-container)一起使用。 *MLeap*是机器学习管道的序列化格式和执行引擎。它支持 Spark、Scikit-Learn 以及 TensorFlow 用于训练管道并将其导出到名为 Bundle 的序列化管道。 MLeap 您可以将捆绑包反序列化回 Spark 以进行批处理模式评分，也可以反序列化到 MLeap运行时以支持实时 API 服务。

有关展示如何使用 Spark ML 进行功能处理的示例，请参阅[在 Amazon EMR 中使用 Apache Spark 训练机器学习模型并在人工智能示例笔记本 SageMaker 中部署](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-python-sdk/sparkml_serving_emr_mleap_abalone)。

## 使用 Scikit-Learn 的特征处理
<a name="feature-processing-with-scikit"></a>

你可以直接在 Amazon AI 中运行 scikit-learn 任务并将其打包到容器中。 SageMaker 在一个 Python 代码示例中，生成通过[费雪鸢尾花卉数据集](http://archive.ics.uci.edu/ml/datasets/Iris)进行训练的 scikit-learn 特征化模型并根据形态指标来预测鸢尾花。有关该示例，请参阅[使用 Sagemaker Scikit-learn 的 IRIS 训练和预测](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk/scikit_learn_iris)。

# 创建管道模型
<a name="inference-pipeline-create-console"></a>

要创建可部署到终端节点或用于批量转换任务的管道模型，请使用 Amazon SageMaker AI 控制台或`CreateModel`操作。

**创建推理管道（控制台）**

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 选择**模型**，然后从**推理**组中选择**创建模型**。

1. 在**创建模型**页面上，提供模型名称，选择 IAM 角色；如果您希望使用私有 VPC，请指定 VPC 值。  
![\[用于创建推理管道模型的页面。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/create-pipeline-model.png)

1. 要添加推理管道中容器的信息，请依次选择 **Add container (添加容器)**、**Next (下一步)**。

1. 按照容器的执行顺序填写每个容器的字段，最多为 15 个容器。填写 **Container input options (容器输入选项)**、**Location of inference code image (推理代码图像的位置)** 以及可选的 **Location of model artifacts (模型构件的位置)**、**Container host name (容器主机名)** 和 **Environmental variables (环境变量)** 字段。  
![\[使用容器创建管道模型。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/create-pipeline-model-containers.png)

   该**MyInferencePipelineModel**页面汇总了为模型提供输入的容器的设置。如果您在相应的容器定义中提供了环境变量， SageMaker AI 会在**环境变量字段中显示这些变量**。  
![\[管道模型的容器设置的摘要。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/pipeline-MyInferencePipelinesModel-recap.png)

# 使用推理管道运行实时预测
<a name="inference-pipeline-real-time"></a>

您可以在推理管道中使用经训练的模型直接进行实时预测，无需执行外部预处理。配置管道时，您可以选择使用 Amazon A SageMaker I 中已有的内置功能转换器。或者，您可以使用几行 scikit-learn 或 Spark 代码来实施自己的转换逻辑。

[MLeap](https://combust.github.io/mleap-docs/)，一种用于机器学习管道的序列化格式和执行引擎，支持 Spark、scikit-learn 以及训练管道并将其导出到名 TensorFlow 为 Bundle 的序列化管道。 MLeap 您可以将捆绑包反序列化回 Spark 以进行批处理模式评分，也可以反序列化到 MLeap 运行时以支持实时 API 服务。

管道中的容器侦听由 `SAGEMAKER_BIND_TO_PORT` 环境变量指定的端口（而不是 8080）。在推理管道中运行时， SageMaker AI 会自动向容器提供此环境变量。如果此环境变量不存在，则容器应默认为使用端口 8080。要指示您的容器使用此要求进行编译，请使用以下命令将标签添加到您的 Dockerfile：

```
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true
```

如果您的容器需要侦听第二个端口，请在 `SAGEMAKER_SAFE_PORT_RANGE` 环境变量指定的范围中选择端口。将该值指定为包含范围**"XXXX-YYYY"**，格式为，其中`XXXX`和`YYYY`为多位数整数。 SageMaker 当您在多容器管道中运行容器时，AI 会自动提供此值。

**注意**  
要在包含 [SageMaker AI 内置算法](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)的管道中使用自定义 Docker 镜像，您需要[亚马逊弹性容器注册表 (Amazon ECR) Container Reg](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) istry 政策。您的 Amazon ECR 存储库必须向 SageMaker AI 授予提取映像的权限。有关更多信息，请参阅 [推理管道的 Amazon ECR 权限故障排除](inference-pipeline-troubleshoot.md#inference-pipeline-troubleshoot-permissions)。

## 创建和部署推理管道端点
<a name="inference-pipeline-real-time-sdk"></a>

以下代码使用 SparkML 创建和部署实时推理管道模型，并使用 AI SDK 按系列创建和部署 XGBoost 模型。 SageMaker 

```
from sagemaker.model import Model
from sagemaker.pipeline_model import PipelineModel
from sagemaker.sparkml.model import SparkMLModel

sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz')
sparkml_model = SparkMLModel(model_data=sparkml_data)
xgb_model = Model(model_data=xgb_model.model_data, image=training_image)

model_name = 'serial-inference-' + timestamp_prefix
endpoint_name = 'serial-inference-ep-' + timestamp_prefix
sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model])
sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)
```

## 请求从推理管道端点进行实时推理
<a name="inference-pipeline-endpoint-request"></a>

以下示例演示如何通过调用推理端点进行实时预测，并传递 JSON 格式的请求负载：

```
import sagemaker
from sagemaker.predictor import json_serializer, json_deserializer, Predictor

payload = {
        "input": [
            {
                "name": "Pclass",
                "type": "float",
                "val": "1.0"
            },
            {
                "name": "Embarked",
                "type": "string",
                "val": "Q"
            },
            {
                "name": "Age",
                "type": "double",
                "val": "48.0"
            },
            {
                "name": "Fare",
                "type": "double",
                "val": "100.67"
            },
            {
                "name": "SibSp",
                "type": "double",
                "val": "1.0"
            },
            {
                "name": "Sex",
                "type": "string",
                "val": "male"
            }
        ],
        "output": {
            "name": "features",
            "type": "double",
            "struct": "vector"
        }
    }

predictor = Predictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer,
                                content_type='text/csv', accept='application/json')

print(predictor.predict(payload))
```

您从 `predictor.predict(payload)` 中得到的响应是模型的推理结果。

## 实时推理管道示例
<a name="inference-pipeline-example"></a>

您可以使用显示如何部署端点、运行推理请求然后反序列化响应的[ SKLearn 预测变量来运行此示例 noteboo](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/scikit_learn_randomforest/Sklearn_on_SageMaker_end2end.ipynb) k。在 [Amazon 示例 GitHub 存储库中查找此笔记本和更多 SageMaker 示例](https://github.com/awslabs/amazon-sagemaker-examples)。

# 利用推理管道进行批量转换
<a name="inference-pipeline-batch"></a>

要获取对整个数据集的推理，请在训练好的模型上运行批处理转换。要在完整数据集上运行推理，您可以在批量转换作业中使用创建并部署到端点上用于实时处理的同一个推理管道模型。要在管道中运行批量转换作业，您可以从 Amazon S3 下载输入数据，并在一个或多个 HTTP 请求中将这些数据发送到推理管道模型。有关演示如何为批量转换准备数据的示例，请参阅使用 Linea [r Learner 示例笔记本的 Amazon SageMaker 多模型终端节点中的 “第 2 节——使用 Scikit Lear](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/advanced_functionality/multi_model_linear_learner_home_value) n 预处理原始住房数据”。有关 Amazon A SageMaker I 批量转换的信息，请参阅[使用 Amazon A SageMaker I 进行批量转换以进行推理](batch-transform.md)。

**注意**  
要在包含 [Amazon A SageMaker I 内置算法](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)的管道中使用自定义 Docker 镜像，您需要[亚马逊弹性容器注册表 (ECR) 策略](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)。您的 Amazon ECR 存储库必须向 SageMaker AI 授予提取映像的权限。有关更多信息，请参阅 [推理管道的 Amazon ECR 权限故障排除](inference-pipeline-troubleshoot.md#inference-pipeline-troubleshoot-permissions)。

以下示例展示了如何使用 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)运行转换作业。在此示例中，`model_name`是结合了 SparkML XGBoost 和模型（在前面的示例中创建）的推理管道。`input_data_path` 指定的 Amazon S3 位置包含 CSV 格式的输入数据，这些数据要下载并发送到 Spark ML 模型。转换任务完成后，由指定的 Amazon S3 位置`output_data_path`包含 XGBoost 模型以 CSV 格式返回的输出数据。

```
import sagemaker
input_data_path = 's3://{}/{}/{}'.format(default_bucket, 'key', 'file_name')
output_data_path = 's3://{}/{}'.format(default_bucket, 'key')
transform_job = sagemaker.transformer.Transformer(
    model_name = model_name,
    instance_count = 1,
    instance_type = 'ml.m4.xlarge',
    strategy = 'SingleRecord',
    assemble_with = 'Line',
    output_path = output_data_path,
    base_transform_job_name='inference-pipelines-batch',
    sagemaker_session=sagemaker.Session(),
    accept = CONTENT_TYPE_CSV)
transform_job.transform(data = input_data_path, 
                        content_type = CONTENT_TYPE_CSV, 
                        split_type = 'Line')
```

# 推理管道日志和指标
<a name="inference-pipeline-logs-metrics"></a>

监控对于维护 Amazon A SageMaker I 资源的可靠性、可用性和性能非常重要。要监控推理管道性能并对其进行故障排除，请使用 Amazon CloudWatch 日志和错误消息。有关 SageMaker AI 提供的监控工具的信息，请参阅[监控 Amazon A SageMaker I 中的 AWS 资源](monitoring-overview.md)。

## 使用指标监控多容器模型
<a name="inference-pipeline-metrics"></a>

要监控推理管道中的多容器模型，请使用 Amazon。 CloudWatch CloudWatch收集原始数据并将其处理成可读的、近乎实时的指标。 SageMaker AI 训练作业和终端节点在`AWS/SageMaker`命名空间中写入 CloudWatch 指标和日志。

以下各表列出以下内容的指标和维度。
+ 端点调用
+ 训练作业、批量转换作业和端点实例

*维度*是唯一标识指标的 name/value 配对。您可以为一个指标分配最多 10 个维度。有关使用进行监控的更多信息 CloudWatch，请参阅[亚马逊中的亚马逊 A SageMaker I 指标 CloudWatch](monitoring-cloudwatch.md)。

**端点调用指标**

`AWS/SageMaker` 命名空间包含通过调用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) 获得的以下请求指标。

指标每 1 分钟报告一次。


| 指标 | 说明 | 
| --- | --- | 
| Invocation4XXErrors |  模型为其返回 `4xx` HTTP 响应代码的 `InvokeEndpoint` 请求的数量。对于每个`4xx`响应， SageMaker AI 都会发送`1`。 单位：无 有效统计数据：`Average`、`Sum`  | 
| Invocation5XXErrors |  模型为其返回 `5xx` HTTP 响应代码的 `InvokeEndpoint` 请求的数量。对于每个`5xx`响应， SageMaker AI 都会发送`1`。 单位：无 有效统计数据：`Average`、`Sum`  | 
| Invocations |  发送到模型端点的 `number of InvokeEndpoint` 请求。 要获取发送到模型端点的请求总数，请使用 `Sum` 统计数据。 单位：无 有效统计数据：`Sum`、`Sample Count`  | 
| InvocationsPerInstance |  发送到模型的端点调用次数，按每次调用进行归一化`InstanceCount`。`ProductionVariant` SageMaker AI 发送 1/ `numberOfInstances` 作为每个请求的值，其中`numberOfInstances`是请求时终端节点的活动实例数。 ProductionVariant  单位：无 有效统计数据：`Sum`  | 
| ModelLatency | 模型进行响应所需的时间。这包括以下操作所花的时间：发送请求，从模型容器中提取响应，以及完成容器中的推理。ModelLatency 是一个推理管道中所有容器所花的总时间。单位：微秒有效统计数据：`Average`、`Sum`、`Min`、`Max`、Sample Count | 
| OverheadLatency |  在响应 SageMaker AI 向客户提出的开销请求所花费的时间中增加的时间。 `OverheadLatency`从 A SageMaker I 收到请求到向客户端返回响应的时间减去`ModelLatency`。除其他因素外，开销延迟还可能由于请求和响应负载大小、请求频率以及请求的身份验证或授权而变化。 单位：微秒 有效统计数据：`Average`、`Sum`、`Min`、`Max`、`Sample Count`  | 
| ContainerLatency | 从 SageMaker AI 看来，推理管道容器响应所花费的时间。 ContainerLatency包括发送请求、从模型容器中获取响应以及在容器中完成推理所花费的时间。单位：微秒有效统计数据：`Average`、`Sum`、`Min`、`Max`、`Sample Count` | 

**端点调用指标的维度**


| 维度 | 说明 | 
| --- | --- | 
| EndpointName, VariantName, ContainerName |  针对指定的端点和指定的变体的 `ProductionVariant`，筛选端点调用指标。  | 

对于推理管道终端节点，将您账户中的每个容器的延迟指标 CloudWatch 列为 **SageMaker AI** 命名空间中的**端点**容器指标**和端点变体指标**，如下所示。该 `ContainerLatency` 指标仅适用于推理管道。

![\[推理管道的 CloudWatch 仪表板。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/pipeline-endpoint-metrics.png)


对于每个端点和每个容器，延迟指标显示容器、端点、变体和指标的名称。

![\[端点的延迟指标。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/pipeline-endpoint-metrics-details.png)


**训练作业、批量转换作业和端点实例指标**

命名空间 `/aws/sagemaker/TrainingJobs`、`/aws/sagemaker/TransformJobs` 和 `/aws/sagemaker/Endpoints` 包括以下用于训练作业和端点实例的指标。

指标每 1 分钟报告一次。


| 指标 | 说明 | 
| --- | --- | 
| CPUUtilization |  实例上运行的容器所使用的 CPU 单位的百分比。该值的范围从 0% 到 100%，并乘以的数量。 CPUs例如，如果有四个 CPUs，`CPUUtilization`则范围从 0% 到 400%。 对于训练作业，`CPUUtilization` 是实例上运行的算法容器的 CPU 利用率。 对于批量转换作业，`CPUUtilization` 是实例上运行的转换容器的 CPU 利用率。 对于多容器模型，`CPUUtilization` 是实例上运行的所有容器的 CPU 利用率总和。 对于端点变体，`CPUUtilization` 是实例上运行的所有容器的 CPU 利用率总和。 单位：百分比  | 
| MemoryUtilization | 实例上运行的容器所使用的内存的百分比。此值范围从 0% 到 100%。对于训练作业，`MemoryUtilization` 是实例上运行的算法容器所使用的内存。对于批量转换作业，`MemoryUtilization` 是实例上运行的转换容器所使用的内存。对于多容器模型，MemoryUtilization 是实例上运行的所有容器的所使用的内存总和。对于端点变体，`MemoryUtilization` 是实例上运行的所有容器所使用的内存总和。单位：百分比 | 
| GPUUtilization |  实例上运行的容器使用的 GPU 单位的百分比。 `GPUUtilization`范围介于 0% 到 100% 之间，并乘以数字。 GPUs例如，如果有四个 GPUs，`GPUUtilization`则范围从 0% 到 400%。 对于训练作业，`GPUUtilization` 是实例上运行的算法容器所使用的 GPU。 对于批量转换作业，`GPUUtilization` 是实例上运行的转换容器所使用的 GPU。 对于多容器模型，`GPUUtilization` 是实例上运行的所有容器的所使用的 GPU 总和。 对于端点变体，`GPUUtilization` 是实例上运行的所有容器所使用的 GPU 总和。 单位：百分比  | 
| GPUMemoryUtilization |  实例上运行的容器使用的 GPU 内存百分比。 GPUMemory利用率范围从 0% 到 100%，乘以数量。 GPUs例如，如果有四个 GPUs，`GPUMemoryUtilization`则范围从 0% 到 400%。 对于训练作业，`GPUMemoryUtilization` 是实例上运行的算法容器所使用的 GPU 内存。 对于批量转换作业，`GPUMemoryUtilization` 是实例上运行的转换容器所使用的 GPU 内存。 对于多容器模型，`GPUMemoryUtilization` 是实例上运行的所有容器的所用的 GPU 总和。 对于端点变体，`GPUMemoryUtilization` 是实例上运行的所有容器所使用的 GPU 内存总和。 单位：百分比  | 
| DiskUtilization |  实例上运行的容器使用的磁盘空间百分比。 DiskUtilization 范围从 0% 到 100%。批量转换作业不支持此指标。 对于训练作业，`DiskUtilization` 是实例上运行的算法容器所使用的磁盘空间。 对于端点变体，`DiskUtilization` 是实例上运行的所有提供容器所使用的磁盘空间总和。 单位：百分比  | 

**训练作业、批量转换作业和端点实例指标的维度**


| 维度 | 说明 | 
| --- | --- | 
| Host |  对于训练作业，`Host` 格式为 `[training-job-name]/algo-[instance-number-in-cluster]`。使用此维度可筛选指定训练作业和实例的实例指标。此维度格式仅存在于 `/aws/sagemaker/TrainingJobs` 命名空间中。 对于批量转换作业，`Host` 格式为 `[transform-job-name]/[instance-id]`。使用此维度可筛选指定批量转换作业和实例的实例指标。此维度格式仅存在于 `/aws/sagemaker/TransformJobs` 命名空间中。 对于端点，`Host` 格式为 `[endpoint-name]/[ production-variant-name ]/[instance-id]`。使用此维度可筛选指定端点、变体和实例的实例指标。此维度格式仅存在于 `/aws/sagemaker/Endpoints` 命名空间中。  | 

为了帮助您调试训练作业、终端节点和笔记本实例生命周期配置， SageMaker AI 还会将算法容器、模型容器或笔记本实例生命周期配置发送到 Amazon Logs 或发送`stderr`到 `stdout` Amazon CloudWatch Logs 的任何内容。您可以使用此信息用于调试并分析进度。

## 使用日志监控推理管道
<a name="inference-pipeline-logs"></a>

下表列出了 SageMaker AI. 发送到 Amazon 的日志组和日志流 CloudWatch 

*日志流*是共享同一来源的一系列日志事件。每个单独的日志源 CloudWatch 构成一个单独的日志流。*日志组*是一组具有相同保留期、监控和访问控制设置的日志流。

**日志**

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/inference-pipeline-logs-metrics.html)

**注意**  
SageMaker 当您使用生命周期配置创建笔记本实例时，AI 会创建`/aws/sagemaker/NotebookInstances`日志组。有关更多信息，请参阅 [使用 LCC 脚本自定义 SageMaker 笔记本实例](notebook-lifecycle-config.md)。

有关 SageMaker AI 日志记录的更多信息，请参阅[CloudWatch 亚马逊 A SageMaker I 的日志](logging-cloudwatch.md)。

# 推理管道问题排查
<a name="inference-pipeline-troubleshoot"></a>

要对推理管道问题进行故障排除，请使用 CloudWatch 日志和错误消息。如果您在包含 Amazon A SageMaker I 内置算法的管道中使用自定义 Docker 镜像，则可能还会遇到权限问题。要授予所需的权限，请创建 Amazon Elastic Container Registry (Amazon ECR) 策略。

**Topics**
+ [

## 推理管道的 Amazon ECR 权限故障排除
](#inference-pipeline-troubleshoot-permissions)
+ [

## 使用 CloudWatch 日志对 SageMaker AI 推理管道进行故障排除
](#inference-pipeline-troubleshoot-logs)
+ [

## 使用错误消息对推理管道进行问题排查
](#inference-pipeline-troubleshoot-errors)

## 推理管道的 Amazon ECR 权限故障排除
<a name="inference-pipeline-troubleshoot-permissions"></a>

当您在包含 [SageMaker AI 内置算法](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)的管道中使用自定义 Docker 镜像时，您需要一项 A [mazon ECR 策略](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)。该策略允许您的 Amazon ECR 存储库授予 SageMaker 人工智能提取映像的权限。该策略必须添加以下权限：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "allowSageMakerToPull",
            "Effect": "Allow",
            "Principal": {
                "Service": "sagemaker.amazonaws.com"
            },
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 使用 CloudWatch 日志对 SageMaker AI 推理管道进行故障排除
<a name="inference-pipeline-troubleshoot-logs"></a>

SageMaker AI 通过以下路径为每个容器发布将推理管道部署到 Amazon CloudWatch 的终端节点的容器日志。

```
/aws/sagemaker/Endpoints/{EndpointName}/{Variant}/{InstanceId}/{ContainerHostname}
```

例如，此端点的日志会发布到以下日志组和流：

```
EndpointName: MyInferencePipelinesEndpoint
Variant: MyInferencePipelinesVariant
InstanceId: i-0179208609ff7e488
ContainerHostname: MyContainerName1 and MyContainerName2
```

```
logGroup: /aws/sagemaker/Endpoints/MyInferencePipelinesEndpoint
logStream: MyInferencePipelinesVariant/i-0179208609ff7e488/MyContainerName1
logStream: MyInferencePipelinesVariant/i-0179208609ff7e488/MyContainerName2
```

*日志流*是共享同一来源的一系列日志事件。每个单独的日志源 CloudWatch 构成一个单独的日志流。*日志组*是一组具有相同保留期、监控和访问控制设置的日志流。

**查看日志组和流**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，选择 **Logs (日志)**。

1. 在 **Log Groups (日志组)** 中，筛选 **MyInferencePipelinesEndpoint**：  
![\[针对推理管道端点筛选的 CloudWatch 日志组。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/pipeline-log-group-filter.png)

1. 要查看日志流，请在 “ CloudWatch **日志组**” 页面上选择**MyInferencePipelinesEndpoint**，然后选择 “**搜索日志组**”。  
![\[推理管道的 CloudWatch 日志流。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/pipeline-log-streams-2.png)

有关 A SageMaker I 发布的日志的列表，请参阅[推理管道日志和指标](inference-pipeline-logs-metrics.md)。

## 使用错误消息对推理管道进行问题排查
<a name="inference-pipeline-troubleshoot-errors"></a>

推理管道错误消息指示哪些容器失败。

如果 A SageMaker I 在调用终端节点时发生错误，则该服务将返回`ModelError`（错误代码 424），表示哪个容器出现故障。如果请求负载（来自前一个容器的响应）超过 5 MB 的限制， SageMaker AI 会提供详细的错误消息，例如：

已收到来自 MyContainerName 1 的响应，状态码为 200。但是，从 MyContainerName 1 到 MyContainerName 2 的请求有效载荷为 6000000 字节，已超过 5 MB 的最大限制。

``

如果在 SageMaker AI 创建终端节点时，容器未通过 ping 运行状况检查，则它会返回 a `ClientError` 并指示所有在上次运行状况检查中未通过 ping 检查的容器。

# 删除端点和资源
<a name="realtime-endpoints-delete-resources"></a>

删除端点以停止产生费用。

## 删除端点
<a name="realtime-endpoints-delete-endpoint"></a>

使用、通过 AI 控制台以编程方式删除您的终端节点 适用于 Python (Boto3) 的 AWS SDK AWS CLI，或者使用 SageMaker AI 控制台以交互方式删除您的终端节点。

SageMaker AI 可以释放创建终端节点时部署的所有资源。删除终端节点不会删除终端节点配置或 SageMaker AI 模型。有关如何删除终端节点配置和 SageMaker AI 模型的信息，请参阅[删除端点配置](#realtime-endpoints-delete-endpoint-config)和。[删除模型](#realtime-endpoints-delete-model)

------
#### [ 适用于 Python (Boto3) 的 AWS SDK ]

使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) API 删除端点。为 `EndpointName` 字段指定端点的名称。

```
import boto3

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

# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

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

# Delete endpoint
sagemaker_client.delete_endpoint(EndpointName=endpoint_name)
```

------
#### [ AWS CLI ]

使用 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint.html) 命令删除端点。为 `endpoint-name` 标志指定端点的名称。

```
aws sagemaker delete-endpoint --endpoint-name <endpoint-name>
```

------
#### [ SageMaker AI Console ]

使用 SageMaker AI 控制台以交互方式删除您的终端节点。

1. 在 SageMaker AI 控制台的[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)导航菜单中，选择**推理**。

1. 从下拉菜单中选择**端点**。在您的 AWS 账户中创建的终端节点列表将按名称、Amazon 资源名称 (ARN)、创建时间、状态和上次更新终端节点的时间戳显示。

1. 选择要删除的端点。

1. 选择右上角的**操作**下拉按钮。

1. 选择**删除**。

------

## 删除端点配置
<a name="realtime-endpoints-delete-endpoint-config"></a>

使用 AI 控制台、通过编程方式删除您的终端节点配置 适用于 Python (Boto3) 的 AWS SDK，或者使用 AI 控制台以 AWS CLI交互方式删除您的终端节点配置。 SageMaker 删除端点配置不会删除使用此配置创建的端点。有关如何删除端点的信息，请参阅[删除端点](#realtime-endpoints-delete-endpoint)。

请不要删除处于活动状态的端点所使用的端点配置，也不要删除正在更新或创建的端点所用的端点配置。如果您删除处于活动状态或者正在创建或更新的端点的端点配置，那么可能会失去对端点正在使用的实例类型的可见性。

------
#### [ 适用于 Python (Boto3) 的 AWS SDK ]

使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpointConfig.html) API 删除端点。为 `EndpointConfigName` 字段指定端点配置的名称。

```
import boto3

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

# Specify the name of your endpoint configuration
endpoint_config_name='<endpoint_name>'

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

# Delete endpoint configuration
sagemaker_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
```

您可以选择使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) API 返回有关已部署模型（生产变体）名称的信息，例如，模型的名称以及与该已部署模型关联的端点配置的名称。为 `EndpointConfigName` 字段提供端点的名称。

```
# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

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

# Store DescribeEndpointConfig response into a variable that we can index in the next step.
response = sagemaker_client.describe_endpoint_config(EndpointConfigName=endpoint_name)

# Delete endpoint
endpoint_config_name = response['ProductionVariants'][0]['EndpointConfigName']
                        
# Delete endpoint configuration
sagemaker_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
```

有关返回的其他响应元素的更多信息`DescribeEndpointConfig`，请参阅 [SageMaker API 参考指南[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html)中的。

------
#### [ AWS CLI ]

使用 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint-config.html) 命令删除端点配置。为 `endpoint-config-name` 标志指定端点配置的名称。

```
aws sagemaker delete-endpoint-config \
                        --endpoint-config-name <endpoint-config-name>
```

您可以选择使用 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html) 命令返回有关已部署模型（生产变体）名称的信息，例如，模型的名称以及与该已部署模型关联的端点配置的名称。为 `endpoint-config-name` 标志提供端点的名称。

```
aws sagemaker describe-endpoint-config --endpoint-config-name <endpoint-config-name>
```

此命令将返回 JSON 响应。您可以通过复制和粘贴、使用 JSON 解析器或者针对 JSON 解析构建的工具，获取与该端点关联的端点配置名称。

------
#### [ SageMaker AI Console ]

使用 SageMaker AI 控制台以交互方式删除您的终端节点配置。

1. 在 SageMaker AI 控制台的[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)导航菜单中，选择**推理**。

1. 从下拉菜单中选择**端点配置**。在 AWS 账户中创建的端点配置列表将按名称、Amazon 资源名称 (ARN) 和创建时间显示。

1. 选择要删除的端点配置。

1. 选择右上角的**操作**下拉按钮。

1. 选择**删除**。

------

## 删除模型
<a name="realtime-endpoints-delete-model"></a>

使用 SageMaker AI 控制台以编程方式删除 AI 模型 适用于 Python (Boto3) 的 AWS SDK，或者使用 AI 控制台以 AWS CLI交互方式删除 AI 模型。 SageMaker 删除 A SageMaker I 模型只会删除在 A SageMaker I 中创建的模型条目。删除模型不会删除模型构件、推理代码或在创建模型时指定的 IAM 角色。

------
#### [ 适用于 Python (Boto3) 的 AWS SDK ]

使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html)API 删除您的 SageMaker AI 模型。为 `ModelName` 字段指定模型的名称。

```
import boto3

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

# Specify the name of your endpoint configuration
model_name='<model_name>'

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

# Delete model
sagemaker_client.delete_model(ModelName=model_name)
```

您可以选择使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) API 返回有关已部署模型（生产变体）名称的信息，例如，模型的名称以及与该已部署模型关联的端点配置的名称。为 `EndpointConfigName` 字段提供端点的名称。

```
# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

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

# Store DescribeEndpointConfig response into a variable that we can index in the next step.
response = sagemaker_client.describe_endpoint_config(EndpointConfigName=endpoint_name)

# Delete endpoint
model_name = response['ProductionVariants'][0]['ModelName']
sagemaker_client.delete_model(ModelName=model_name)
```

有关返回的其他响应元素的更多信息`DescribeEndpointConfig`，请参阅 [SageMaker API 参考指南[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html)中的。

------
#### [ AWS CLI ]

使用[https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-model.html)命令删除您的 SageMaker AI 模型。为 `model-name` 标志指定模型的名称。

```
aws sagemaker delete-model \
                        --model-name <model-name>
```

您可以选择使用 [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html) 命令返回有关已部署模型（生产变体）名称的信息，例如，模型的名称以及与该已部署模型关联的端点配置的名称。为 `endpoint-config-name` 标志提供端点的名称。

```
aws sagemaker describe-endpoint-config --endpoint-config-name <endpoint-config-name>
```

此命令将返回 JSON 响应。您可以通过复制和粘贴、使用 JSON 解析器或者针对 JSON 解析构建的工具，获取与该端点关联的模型名称。

------
#### [ SageMaker AI Console ]

使用 SageMaker AI 控制台以交互方式删除您的 A SageMaker I 模型。

1. 在 SageMaker AI 控制台的[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)导航菜单中，选择**推理**。

1. 从下拉菜单中选择**模型**。在您的 AWS 账户中创建的模型列表将按名称、Amazon 资源名称 (ARN) 和创建时间显示。

1. 选择要删除的模型。

1. 选择右上角的**操作**下拉按钮。

1. 选择**删除**。

------