

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 託管選項
<a name="realtime-endpoints-options"></a>

下列主題說明可用的 SageMaker AI 即時託管選項，以及如何設定、調用和刪除每個託管選項。

**Topics**
+ [

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

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

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

# Amazon SageMaker AI 中的推論管道
](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_tw/sagemaker/latest/dg/images/multi-model-endpoints-diagram.png)


多模型端點非常適合託管大量模型，這些模型在共用服務容器採用相同機器學習 (ML) 架構。如您混合經常存取及不常存取的模型，則多模型端點可利用有效率的方式為此流量提供服務，運用更少資源並節省更多成本。您的應用程式應能容忍偶爾發生的冷啟動相關延遲處罰，這會在調用不常使用的模型時發生。

多模型端點支援託管 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 測試

您可以使用 適用於 Python (Boto) 的 AWS SDK 或 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 會管理託管於容器記憶體中的多模型端點上的模型生命週期。在建立端點時，不是從 Amazon S3 儲存貯體將所有模型下載到容器，而是於調用模型時，由 SageMaker AI 動態載入及快取。當 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) - 此筆記本說明如何設定及部署客戶容器來支援 SageMaker AI 的多模型端點。
+ 採用 GPU 支援執行個體的多模型端點範例：
  + [運用 Amazon SageMaker AI 多模型端點 (MME) 在 GPU 執行多個深度學習模型](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 模型至多模型端點。

如需說明了解如何建立及存取 Jupyter 筆記本執行個體，並用以執行先前 SageMaker AI 的範例，請參閱[Amazon SageMaker 筆記本執行個體](nbi.md)。在建立並開啟筆記本執行個體之後，請選擇 **SageMaker AI 範例**索引標籤，查看所有 SageMaker AI 範例的清單。多模型端點筆記本位於 **ADVANCED FUNCTIONALITY** (進階功能) 區段。若要開啟筆記本，請選擇其 **Use** (使用) 標籤，然後選擇 **Create copy** (建立複本)。

如需有關多模型端點使用案例的詳細資訊，請參閱下列部落格與資源：
+ 影片：[在 SageMaker AI 託管數千個模型](https://www.youtube.com/watch?v=XqCNTWmHsLc&t=751s)
+ 影片：[適用 SaaS 的 SageMaker AI ML](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 SageMaker AI](xgboost.md)
+ [K 近鄰 (k-NN) 演算法](k-nearest-neighbors.md)
+ [線性學習程式演算法](linear-learner.md)
+ [隨機分割森林 (RCF) 演算法](randomcutforest.md)
+ [使用 TensorFlow 搭配 Amazon SageMaker AI 的資源](tf.md)
+ [使用 Scikit-learn 搭配 Amazon SageMaker AI 的資源](sklearn.md)
+ [使用 Apache MXNet 搭配 Amazon SageMaker AI 的資源](mxnet.md)
+ [使用 PyTorch 搭配 Amazon SageMaker AI 的資源](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™、PyTorch、MXNet、Python、ONNX、XGBoost、scikit-learn、RandomForest、 OpenVINO、自訂 C\$1\$1 等等。

若要採用任何其他架構或演算法，您可利用 Python 或 C \$1\$1 的 Triton 後端編寫模型邏輯並為任何自訂模型提供服務。在伺服器準備就緒之後，您即可開始在單一端點後方部署數百個深度學習模型。

多模型端點支援下列 GPU 執行個體類型：


| 執行個體系列 | 執行個體類型 | vCPUs | 每個 vCPU 的記憶體 GiB | 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>

在選取多模型端點的 SageMaker AI 機器學習 (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` 模式，這可在執行個體儲存磁碟區快取更多模型。

當選擇 SageMaker AI 機器學習 (ML) 執行個體類型時，請考慮下列事項：
+ 目前所有 CPU 執行個體類型與單一 GPU 執行個體類型均支援多模型端點。
+ 對於您要託管於多模型端點後方模型的流量分佈 (存取模式)，以及模型大小 (可在執行個體的記憶體載入幾個模型)，請留意下列資訊：
  + 將執行個體的記憶體容量視為模型要載入的快取空間，並將 vCPU 數量視為對於已載入模型執行推論的並行限制 (假設調用模型已繫結 CPU)。
  + 對於 CPU 支援的執行個體，vCPU 數量會影響每個執行個體的最大並行調用 (假設調用模型已繫結 CPU)。更高數量的 vCPU 可讓您同時調用更多唯一模型。
  + 對於 GPU 支援的執行個體，較高執行個體與 GPU 記憶體容量可讓您載入更多模型並準備就緒可提供推斷請求服務。
  + 對於 CPU 與 GPU 支援的執行個體，擁有部分可用 “閒置” 記憶體，以便卸載未使用模型，這尤其適用具多個執行個體的多模型端點。如果執行個體或可用區域故障，這些執行個體上的模型會重新路由到端點後方的其他執行個體。
+ 決定載入/下載時間公差：
  + d 執行個體類型系列 (例如 m5d、c5d 或 r5d) 以及 g5 隨附 NVMe (非揮發性記憶體儲存裝置) SSD，可提供高 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` 統計資料，監控在某個期間內傳送到容器的取消載入請求數量。如模型太常卸載 (代表出現*輾轉現象* (Thrashing)；由於模型工作集的快取空間不足，因此再次取消載入及載入模型)，請考慮使用具有更多記憶體的較大執行個體類型，或增加多模型端點後方的執行個體數量。對於具有多個執行個體的多模型端點，請注意模型可能會在 1 個以上的執行個體上載入。

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

您可以使用 SageMaker AI 主控台或 適用於 Python (Boto) 的 AWS SDK 來建立多模型端點。若要透過主控台建立 CPU 或 GPU 支援的端點，請參閱以下各節的主控台程序。如果您想要使用 建立多模型端點 適用於 Python (Boto) 的 AWS SDK，請使用下列各節中的 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 SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 選擇 **Model** (模型)，然後從 **Inference** (推斷) 群組中選擇 **Create model** (建立模型)。

1. 在 **Model name** (模型名稱) 中，輸入名稱。

1. 針對 **IAM role**，選擇或建立已連接 `AmazonSageMakerFullAccess` IAM 政策的 IAM 角色。

1.  針對 **Container definition** (容器定義) 區段的 **Provide model artifacts and inference image options** (提供模型成品與推論映像選項)，選擇 **Use multiple models** (使用多個模型)。  
![\[[建立模型] 頁面區段，在此您可選擇使用多個模型。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/mme-create-model-ux-2.PNG)

1. 針對 **Inference container image** (推論容器映像)，輸入所需容器映像的 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 推論伺服器的詳細資訊，請參閱[搭配 SageMaker AI 使用 Triton 推論伺服器](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)。

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 SageMaker AI [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_config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) 與 [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) API 來建立多模型端點，就像建立單一模型端點一樣，但有兩個變更。當定模型義容器時，您必須傳遞新的 `Mode` 參數值 `MultiModel`。您也需要傳遞指定模型成品所在之 Amazon S3 的字首 `ModelDataUrl` 欄位，而不是單一模型成品的路徑，就像部署單一模型時的做法一樣。

如需使用 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 SDK for Python (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 近鄰內建演算法映像位址。

   ```
   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. 取得 an 適用於 Python (Boto3) 的 AWS SDK SageMaker AI 用戶端並建立使用此容器的模型。

   ```
   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]
               )
   ```
**注意**  
您只能在序列推論管道中使用一個啟用多模型的端點。

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'
                         }
                   ]
              )
   ```
**注意**  
您只能在序列推論管道中使用一個啟用多模型的端點。

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 SageMaker AI [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_config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) 與 [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) API 來建立多模型端點 ，這類似建立單一模型端點，但有幾項變更。當定模型義容器時，您必須傳遞新的 `Mode` 參數值 `MultiModel`。您也需要傳遞指定模型成品所在之 Amazon S3 的字首 `ModelDataUrl` 欄位，而不是單一模型成品的路徑，就像部署單一模型時的做法一樣。對於 GPU 支援的多模型端點，您也必須使用搭配 NVIDIA Triton 推論伺服器的容器，該伺服器已針對 GPU 執行個體進行最佳化。如需可搭配 GPU 支援端點使用的容器映像清單，請參閱 [NVIDIA Triton 推論容器 (僅限 SM 支援)](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only)。

如需範例筆記本示範如何建立由 GPU 支援的多模型端點，請參閱[運用 Amazon SageMaker AI 多模型端點 (MME) 在 GPU 執行多個深度學習模型](https://github.com/aws/amazon-sagemaker-examples/blob/main/multi-model-endpoints/mme-on-gpu/cv/resnet50_mme_with_gpu.ipynb)。

下列程序針對建立由 GPU 支援的多模型端點概述重要步驟。

**部署模型 (AWS SDK for Python (Boto 3))**

1. 定義容器映像。若要建立具有 GPU 支援 ResNet 模型的多模型端點，請定義要使用 [NVIDIA Triton 伺服器映像](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)的容器。此容器支援多模型端點，並已最佳化以便用於 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. 取得 an 適用於 Python (Boto3) 的 AWS SDK SageMaker AI 用戶端並建立使用此容器的模型。

   ```
   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]
               )
   ```
**注意**  
您只能在序列推論管道中使用一個啟用多模型的端點。

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>

若要調用多模型端點，請使用 SageMaker AI 執行時期的 [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)，這類似調用單一模型端點，只有一項變更。傳遞新的 `TargetModel` 參數，指定要將目標鎖定於端點的哪些模型。SageMaker AI 執行時期 `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 提出兩行 CSV 請求 (AWS CLI)：

```
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` 錯誤碼，請重試請求。根據預設，Python (Boto 3) AWS SDKs （使用[舊版重試模式](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#legacy-retry-mode)) 和導致`ModelNotReadyException`錯誤的 Java 重試`invoke_endpoint`請求。您可設定重試策略，以便繼續重試請求長達 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)
+ [

## 運用 SageMaker AI 推論工具組
](#multi-model-inference-toolkit)
+ [

# 多模型端點的自訂容器合約
](mms-container-apis.md)

## 在 CPU 支援的執行個體為多模型端點提供自有相依性
<a name="build-multi-model-container-cpu"></a>

如預先建置的容器映像都無法滿足您的需求，您可建置自有容器來搭配 CPU 支援的多模型端點使用。

Amazon SageMaker AI 部署的自訂 Amazon Elastic Container Registry (Amazon ECR) 映像應遵守[具託管服務的自訂推論程式碼](your-algorithms-inference-code.md)所述的基本合約，該合約會規範 SageMaker AI 如何與執行您自有推斷程式碼的 Docker 容器進行互動。若是能夠並行載入並為多個模型提供服務的容器，則會有必須遵從的額外 API 和行為。這份額外的合約包含了載入、列出、取得和取消載入模型的 API，以及另一個調用模型的 API。也有 API 必須遵守的不同錯誤情境行為。若要表示容器符合額外的要求，您可以將下列命令新增到 Docker 檔案：

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

SageMaker AI 也會將環境變數插入到容器中

```
SAGEMAKER_MULTI_MODEL=true
```

如果您要為序列推論管道建立多模型端點，則 Docker 檔案必須具有多模型和序列推論管道所需的標籤。如需序列資訊管道的詳細資訊，請參閱[使用推論管道執行即時預測](inference-pipeline-real-time.md)。

為協助您實作自訂容器的這些要求，提供下列兩個程式庫：
+ [多模型伺服器](https://github.com/awslabs/multi-model-server)是一種可為機器學習模型提供服務的開放原始碼架構，可安裝於容器中以提供符合新多模型端點容器 API 要求的前端。它可提供多模型端點所需的 HTTP 前端和模型管理功能，以將多個模型託管於單一容器內、動態地將模型載入到容器中及從中取消載入模型，以及在指定的載入模型上執行推斷。它還提供了隨插即用的後端，支援隨插即用的自訂後端處理常式，可讓您實作自己的演算法。
+ [SageMaker AI 推論工具組](https://github.com/aws/sagemaker-inference-toolkit)是使用組態和設定來引導多模型伺服器的程式庫，以使其與 SageMaker AI 多模型端點相容。也可讓您根據不同的情境需求調校重要效能參數，例如每個模型的工作者數量。

## 在 GPU 支援的執行個體為多模型端點提供自有相依性
<a name="build-multi-model-container-gpu"></a>

針對採用由 GPU 支援執行個體的多模型端點，多模型伺服器與 SageMaker AI 推論工具組程式庫目前不支援其運用自有容器 (BYOC) 功能。

若要使用由 GPU 支援的執行個體建立多模型端點，您可利用 SageMaker AI 支援的 [NVIDIA Triton 推論伺服器](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)，並搭配 [NVIDIA Triton 推論容器](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only)。若要採用自有相依性，您可採用 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
```

**重要**  
若要用於 GPU 支援的多模型端點，具 Triton 推論伺服器的容器是唯一支援的容器。

## 運用 SageMaker AI 推論工具組
<a name="multi-model-inference-toolkit"></a>

**注意**  
SageMaker AI 推論工具組僅支援 CPU 支援的多模型端點。SageMaker AI 推論工具組目前不支援 GPU 支援的多模型端點。

[支援的多模型端點適用演算法、架構與執行個體](multi-model-support.md) 列出支援多模型端點的預先建置容器。如果你想要使用其他任何架構或演算法，則需要建置容器。最簡單的做法是運用 [SageMaker AI 推論工具組](https://github.com/aws/sagemaker-inference-toolkit)來擴展現有預先建置的容器。SageMaker AI 推論工具組是多模型伺服器 (MMS) 的實作，可讓您建立可在 SageMaker AI 部署的端點。如需示範如何設定及部署可在 SageMaker AI 支援多模型端點之自訂容器的範例筆記本，請參閱[多模型端點 BYOC 範例筆記本](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/advanced_functionality/multi_model_bring_your_own)。

**注意**  
SageMaker AI 推論工具組僅支援 Python 模型處理常式。如果您想要以其他任何語言來實作處理常式，則必須建置您自己的容器，以實作其他多模型端點 API。如需相關資訊，請參閱[多模型端點的自訂容器合約](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` 中，複製第一個步驟中的模型處理常式，並將上一個步驟中的 Python 檔案指定為 `Dockerfile` 中的進入點。下列幾行來自範例筆記本中使用的 [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. 建置並註冊容器。範例筆記本中有下列殼層指令碼，可建置容器，並上傳到您 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)
+ [

## 運用 SageMaker AI 推論工具組
](#multi-model-inference-toolkit)
+ [

# 多模型端點的自訂容器合約
](mms-container-apis.md)

# 多模型端點的自訂容器合約
<a name="mms-container-apis"></a>

若要處理多個模型，容器必須支援一組可讓 Amazon SageMaker AI 與容器進行溝通的 API，以視需要載入、列出、取得和取消載入模型。`model_name` 會用於新的 API 集，做為金鑰輸入參數。客戶容器應使用 `model_name` 做為對應金鑰來追蹤已載入的模型。此外，`model_name` 是不透明的識別符，且未必是傳遞到 `InvokeEndpoint` API 的 `TargetModel` 參數的值。`InvokeEndpoint` 請求中的原始 `TargetModel` 值會傳遞到 API 中的容器，做為可用於記錄用途的 `X-Amzn-SageMaker-Target-Model` 標題。

**注意**  
GPU 支援執行個體的多模型端點目前僅支援 SageMaker AI 的 [NVIDIA Triton 推論伺服器容器](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html)。此容器已經實作如下定義的合同。客戶可直接搭配使用此容器與多模型 GPU 端點，無需進行任何額外工作。

您可於容器為 CPU 支援的多模型端點設定下列 API。

**Topics**
+ [

## Load Model API
](#multi-model-api-load-model)
+ [

## List Model API
](#multi-model-api-list-model)
+ [

## Get Model API
](#multi-model-api-get-model)
+ [

## Unload Model API
](#multi-model-api-unload-model)
+ [

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

## Load 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 皆應傳回 507 HTTP 狀態碼給 SageMaker AI，接著它會發起取消載入未使用的模型以重新取得。

## List Model 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 不需要提供值給 `next_page_token` 即可在一開始呼叫列出模型 API。如果回應中傳回了 `nextPageToken` 欄位，則會提供該欄位做為後續 List Models 呼叫中 `next_page_token` 的值。若未傳回 `nextPageToken`，則表示沒有其他要傳回的模型。

## Get Model 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。

## Unload Model API
<a name="multi-model-api-unload-model"></a>

指示 SageMaker AI 平台引導客戶容器從記憶體中取消載入模型。這會根據平台在開始載入新模型程序時的判斷，發起移出候選模型。當此 API 傳回回應時，佈建到 `model_name` 的資源應由容器重新取得。

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

**注意**  
若未載入 `model_name`，此 API 應傳回 404。

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

從提供的特定 `model_name` 提出預測請求。SageMaker AI 執行時期 `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 應將 507 HTTP 狀態碼傳回給 SageMaker AI，然後啟動卸載未使用模型以便進行回收。

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

多模型端點中的模型和資料共同位於執行個體儲存磁碟區和容器記憶體中。Amazon SageMaker AI 端點的所有執行個體都會在您擁有的單一租用戶容器上執行。只有您的模型才能在您的多模型端點上執行。您有責任管理請求與模型的對應，並向使用者提供正確目標模型的存取權。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 主體可在 S3 字首位址 (定義於 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) 操作) 調用任何模型，前提是操作所定義的 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 指標。

如需有關指標的詳細資訊，請參閱[Amazon CloudWatch 中的 Amazon SageMaker AI 指標](monitoring-cloudwatch.md)的**多模型端點模型載入指標**與**多模型端點模型執行個體指標**。不支援依據模型的指標功能。

## 適用 CPU 支援多模型端點的 CloudWatch 指標
<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)。

**多模型端點的模型載入指標**


| 指標 | Description | 
| --- | --- | 
| ModelLoadingWaitTime  |  調用請求為了執行推斷而等候目標模型下載或載入 (或這兩項作業) 的時間間隔。 單位：微秒  有效的統計資訊：平均、總和、下限、上限與範例計數   | 
| ModelUnloadingTime  |  透過容器 `UnloadModel` API 呼叫取消載入模型所花費的時間間隔。 單位：微秒  有效的統計資訊：平均、總和、下限、上限與範例計數   | 
| ModelDownloadingTime |  從 Amazon Simple Storage Service (Amazon S3) 下載模型所花費的時間間隔。 單位：微秒 有效的統計資訊：平均、總和、下限、上限與範例計數   | 
| ModelLoadingTime  |  透過容器 `LoadModel` API 呼叫載入模型所花費的時間間隔。 單位：微秒  有效的統計資訊：平均、總和、下限、上限與範例計數   | 
| ModelCacheHit  |  傳送到已載入模型之多模型端點的 `InvokeEndpoint` 請求數目。 平均統計資料會顯示已載入模型的請求比率。 單位：無 有效的統計資料：平均、總和、範例計數  | 

**多模型端點的模型載入指標維度**


| 維度 | Description | 
| --- | --- | 
| 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)。

**多模型端點的模型執行個體指標**


| 指標 | Description | 
| --- | --- | 
| LoadedModelCount  |  多模型端點的容器中所載入的模型數目。此指標會按每個執行個體發出。 週期為 1 分鐘的平均統計資料會說明每個執行個體載入的模型平均數目。 總和統計資料會說明端點的所有執行個體中所載入的模型總數目。 此指標追蹤的模型不一定是唯一的，因為模型可能會在端點的多個容器中載入。 單位：無 有效的統計資訊：平均、總和、下限、上限與範例計數  | 
| CPUUtilization  |  每個個別 CPU 核心使用率的總和。每個核心範圍的 CPU 利用率為 0 到 100。例如，如果有四個 CPU，則 `CPUUtilization` 的範圍為 0% 到 400%。 對於端點變體，值為執行個體上主要容器與輔助容器的 CPU 利用率總和。 單位：百分比  | 
| MemoryUtilization |  執行個體上的容器使用的記憶體的百分比。此值範圍為 0%–100%。 對於端點變體，值為執行個體上主要容器與輔助容器的記憶體利用率總和。 單位：百分比  | 
| DiskUtilization |  執行個體容器運用的磁碟空間百分比。此值範圍為 0%–100%。 針對端點變體，值為執行個體上主要容器與輔助容器的磁碟空間利用率總和。 單位：百分比  | 

## GPU 多模型端點部署的 CloudWatch 指標
<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)。

**多模型端點的模型載入指標**


| 指標 | Description | 
| --- | --- | 
| ModelLoadingWaitTime  |  調用請求為了執行推斷而等候目標模型下載或載入 (或這兩項作業) 的時間間隔。 單位：微秒  有效的統計資訊：平均、總和、下限、上限與範例計數   | 
| ModelUnloadingTime  |  透過容器 `UnloadModel` API 呼叫取消載入模型所花費的時間間隔。 單位：微秒  有效的統計資訊：平均、總和、下限、上限與範例計數   | 
| ModelDownloadingTime |  從 Amazon Simple Storage Service (Amazon S3) 下載模型所花費的時間間隔。 單位：微秒 有效的統計資訊：平均、總和、下限、上限與範例計數   | 
| ModelLoadingTime  |  透過容器 `LoadModel` API 呼叫載入模型所花費的時間間隔。 單位：微秒  有效的統計資訊：平均、總和、下限、上限與範例計數   | 
| ModelCacheHit  |  傳送到已載入模型之多模型端點的 `InvokeEndpoint` 請求數目。 平均統計資料會顯示已載入模型的請求比率。 單位：無 有效的統計資料：平均、總和、範例計數  | 

**多模型端點的模型載入指標維度**


| 維度 | Description | 
| --- | --- | 
| 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)。

**多模型端點的模型執行個體指標**


| 指標 | Description | 
| --- | --- | 
| LoadedModelCount  |  多模型端點的容器中所載入的模型數目。此指標會按每個執行個體發出。 週期為 1 分鐘的平均統計資料會說明每個執行個體載入的模型平均數目。 總和統計資料會說明端點的所有執行個體中所載入的模型總數目。 此指標追蹤的模型不一定是唯一的，因為模型可能會在端點的多個容器中載入。 單位：無 有效的統計資訊：平均、總和、下限、上限與範例計數  | 
| CPUUtilization  |  每個個別 CPU 核心使用率的總和。每個核心的 CPU 使用率範圍為 0‐100。例如，如有四個 CPU，`CPUUtilization` 的範圍為 0%–400%。 對於端點變體，值為執行個體上主要容器與輔助容器的 CPU 利用率總和。 單位：百分比  | 
| MemoryUtilization |  執行個體上的容器使用的記憶體的百分比。此值範圍為 0%-100%。 對於端點變體，值為執行個體上主要容器與輔助容器的記憶體利用率總和。 單位：百分比  | 
| GPUUtilization |  執行個體上的容器使用的 GPU 單位的百分比。此值範圍可介於 0‐100，乘以 GPU 數量。例如，如有四個 GPU，`GPUUtilization` 的範圍為 0%–400%。 對於端點變體，值為執行個體上主要容器與輔助容器的 GPU 利用率總和。 單位：百分比  | 
| GPUMemoryUtilization |  執行個體上的容器使用的 GPU 記憶體的百分比。此值範圍為 0‐100，乘以 GPU 數量。例如，如有四個 GPU，`GPUMemoryUtilization` 的範圍為 0%–400%。 對於端點變體，值為執行個體上主要容器與輔助容器的 GPU 記憶體利用率總和。 單位：百分比  | 
| DiskUtilization |  執行個體容器運用的磁碟空間百分比。此值範圍為 0%–100%。 針對端點變體，值為執行個體上主要容器與輔助容器的磁碟空間利用率總和。 單位：百分比  | 

# 設定 SageMaker AI 多模型端點模型快取行為
<a name="multi-model-caching"></a>

根據預設，多模型端點會在記憶體 (CPU 或 GPU，視您擁有 CPU 或 GPU 支援的執行個體而定) 與磁碟快取常用模型，以便提供低延遲推論。僅當容器用完記憶體或磁碟空間無法容納新目標模型時，才會從磁碟卸載和/或刪除已快取模型。

您可變更多模型端點的快取行為，並在呼叫 [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 支援的端點而言，並行是容器執行個體 vCPU 數目的因素之一。

如需指導方針了解如何針對多模型端點選擇 SageMaker AI 機器學習 (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 多模型端點指標可用於 1 分鐘的精細程度。

## 定義擴展政策
<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 SageMaker AI 設定自動擴展推論端點](https://aws.amazon.com/blogs/machine-learning/configuring-autoscaling-inference-endpoints-in-amazon-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 多容器端點方便客戶在單一 SageMaker AI 端點上部署使用不同模型或架構的多個容器。容器可按順序作為推論管道執行，或者透過直接調用個別存取每個容器，以提高端點使用率並最佳化成本。

如需有關如何依序調用多容器端點中容器的資訊，請參閱[Amazon SageMaker AI 中的推論管道](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) API，來建立多容器端點，方法就如同建立任何其他端點一樣。您可以循序執行這些容器作為推論管道，或使用直接調用來執行每個個別的容器。多容器端點在您呼叫 `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 SageMaker AI 多容器端點，請完成下列步驟。

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

預設情況下，具有直接調用之多容器端點 `InvokeEndpoint` 許可的 IAM 主體，可以調用您在呼叫 `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>

除了 [Amazon CloudWatch 中的 Amazon SageMaker AI 指標](monitoring-cloudwatch.md) 中列出的端點指標之外，SageMaker AI 另根據每個容器提供指標。

具有直接調用的多容器端點的每個容器指標位於 CloudWatch 中，並分為兩個命名空間：`AWS/SageMaker` 和 `aws/sagemaker/Endpoints`。`AWS/SageMaker` 命名空間包含調用相關的指標，`aws/sagemaker/Endpoints` 命名空間則包含記憶體和 CPU 使用率指標。

下表列出具有直接調用之多容器端點的每個容器指標。所有指標都使用 [`EndpointName, VariantName, ContainerName`] 維度，該維度會針對特定變體篩選特定端點的指標，並對應於特定容器。這些指標與推論管道共用相同的指標名稱，但僅限每個容器層級 [`EndpointName, VariantName, ContainerName`]。

 


|  |  |  |  | 
| --- |--- |--- |--- |
|  指標名稱  |  Description  |  維度  |  NameSpace  | 
|  Invocations  |  傳送至端點內容器的 InvokeEndpoint請求數量。若要取得傳送至容器的請求總數，請使用 Sum統計資料。單位：無有效統計資料：Sum、Sample Count |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  Invocation4XX Errors  |  模型傳回某特定容器 4xxHTTP 回應代碼以回應的 InvokeEndpoint請求數量。對於每個 4xx 回應，SageMaker AI 會傳送 1。單位：無有效統計資料：Average、Sum |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  Invocation5XX Errors  |  模型傳回某特定容器 5xxHTTP 回應代碼以回應的 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 的計算是從 SageMaker AI 收到請求，直到回應傳回給用戶端的時間再減去 ModelLatency。額外負荷延遲可能隨著請求和回應承載大小、請求頻率，以及請求的身分驗證或授權等因素而不同。單位：微秒有效統計資料：Average、Sum、Min、Max、'樣本計數' |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  CPUUtilization  | 執行個體上執行的各個容器所使用的 CPU 單位百分比。值的範圍從 0% 到 100%，並乘以 CPU 的數量。例如，如果有四個 CPU，CPUUtilization 的範圍可能從 0% 到 400%。對於具有直接調用的端點，CPUUtilization 指標的數量等於該端點中的容器數量。單位：百分比  |  EndpointName, VariantName, ContainerName  | aws/sagemaker/Endpoints | 
|  MemoryUtilizaton  |  執行個體上執行的各個容器所使用的記憶體百分比。這個值的範圍從 0% 到 100%。與 CPUUtilization 類似，在具有直接調用的端點中，MemoryUtilization 指標的數量等於該端點中的容器數量。單位：百分比  |  EndpointName, VariantName, ContainerName  | aws/sagemaker/Endpoints | 

上表中的所有指標都特定於具有直接調用的多容器端點。除了這些特殊的每個容器指標之外，在變體層級也有指標 `[EndpointName, VariantName]`，其中包含表格中所有預期 `ContainerLatency`指標的維度。

# 自動擴展多容器端點
<a name="multi-container-auto-scaling"></a>

如果您想要使用 `InvocationsPerInstance`指標為多容器端點設定自動擴展，建議您每個容器中的模型在每個推論請求上顯示類似的 CPU 利用率和延遲。會建議這麼做，是因為如果到多容器端點的流量從低 CPU 利用率模型轉換為高 CPU 利用率模型，但整體呼叫量維持不變，則端點將不會向外擴展，並且可能沒有足夠的執行個體來處理對高 CPU 利用率模型的所有請求。如需設定自動擴展端點的資訊，請參閱[Amazon SageMaker AI 模型的自動擴展](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 會自動提供此值。

# Amazon SageMaker AI 中的推論管道
<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 Elastic Compute Cloud (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)
+ [

# 使用 SparkML 和 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` 資料夾。若要開啟筆記本，請選擇其**使用**標籤，然後選擇**建立複本**。

# 使用 SparkML 和 Scikit-learn 進行特徵處理
<a name="inference-pipeline-mleap-scikit-learn-containers"></a>

使用 Amazon SageMaker AI 內建演算法或自訂演算法訓練模型之前，您可以使用 Spark 和 scikit-learn 前置處理器轉換資料及設計特徵。

## 使用 Spark ML 進行特徵處理
<a name="feature-processing-spark"></a>

您可以透過 [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) 這個無伺服器 ETL (擷取、轉換、載入) 服務，從您的 SageMaker AI 筆記本執行 Spark ML 任務。您也可以連接到現有的 EMR 叢集，以透過 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) 執行 Spark ML 任務。若要這樣做，您需要一個 AWS Identity and Access Management (IAM) 角色，授予從 SageMaker AI 筆記本進行呼叫的許可 AWS Glue。

**注意**  
若要查看 AWS Glue 支援哪些 Python 和 Spark 版本，請參閱 [AWS Glue 版本備註](/glue/latest/dg/release-notes.html)。

完成特徵工程後，您需要利用 MLeap 將 Spark ML 任務封裝並串列化到 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 以訓練管道，並將管道匯出至稱為 MLeap 套件的序列化管道。您可以將這些套件還原序列化到 Spark，以進行批次模式評分，或還原序列化到 MLeap 執行期，以強化即時 API 服務。

如需示範如何使用 Spark ML 進行特徵處理的範例，請參閱[使用 Amazon EMR 中的 Apache Spark 訓練機器學習模型，並在 SageMaker AI ](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 SageMaker AI 執行 scikit-learn 工作並封裝成容器。如需建置 scikit-learn 特徵提取模型的 Python 程式碼範例 (此模型接受 [Fisher's Iris flower data set](http://archive.ics.uci.edu/ml/datasets/Iris) 訓練並根據型態測量來預測鳶尾花品種)，請參閱 [IRIS Training and Prediction with Sagemaker Scikit-learn](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 SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 選擇**模型**，然後從**推論** 群組中選擇 **建立模型**。

1. 在**建立模型**頁面，提供模型名稱、選擇 IAM 角色，然後如果您想使用私有 VPC，請指定 VPC 值。  
![\[為推論管道建立模型的頁面。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/create-pipeline-model.png)

1. 若要新增關於推論管道中的容器的資訊，請選擇 **Add container (新增容器)**，然後選擇 **Next (下一步)**。

1. 針對每個容器，以您想要的執行容器的順序填寫欄位，最多十五個。填寫 **Container input options (容器輸入選項)**、**Location of inference code image (推論程式碼影像的位置)**，以及 (選擇性) **Location of model artifacts (模型成品的位置)**、**Container host name (容器主機名稱)** 和 **Environmental variables (環境變數)** 欄位。  
![\[建立具有容器的管道模型。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/create-pipeline-model-containers.png)

   **MyInferencePipelineModel** 頁面摘要說明可為模型提供輸入的容器的設定。如果您在對應的容器定義中提供環境變數，SageMaker AI 會在 **Environment variables (環境變數)** 欄位中顯示這些環境變數。  
![\[管道模型的容器設定摘要。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/pipeline-MyInferencePipelinesModel-recap.png)

# 使用推論管道執行即時預測
<a name="inference-pipeline-real-time"></a>

您可以使用推論管道中已訓練的模型，直接進行即時預測，而不需要執行外部預先處理。您設定管道時，您可以選擇使用 Amazon SageMaker AI 中已有的內建特徵轉換器。或者，您可以只使用幾行 scikit-learn 或 Spark 程式碼，以實作您自己的轉換邏輯。

[MLeap](https://combust.github.io/mleap-docs/) (機器學習管道的序列化格式和執行引擎) 支援 Spark、scikit-learn 和 TensorFlow，以訓練管道並匯出至稱為 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 Elastic Container Registry (Amazon 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)。

## 建立和部署推論管道端點
<a name="inference-pipeline-real-time-sdk"></a>

以下程式碼使用 SageMaker AI SDK，依序使用 SparkML 和 XGBoost 模型建立及部署即時推論管道模型。

```
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 預測器來執行此範例筆記本](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/scikit_learn_randomforest/Sklearn_on_SageMaker_end2end.ipynb)，其中會顯示如何部署端點、執行推論請求，然後還原序列化回應。在 [Amazon SageMaker 範例 GitHub 儲存庫中](https://github.com/awslabs/amazon-sagemaker-examples)，找到此筆記本和更多範例。

# 使用推論管道執行批次轉換
<a name="inference-pipeline-batch"></a>

若要取得整個資料集的推論，您可以在已訓練的模型上執行批次轉換。若要對整個資料集執行推論，您可以將為了即時處理而建立並部署到端點的相同推論管道模型，用於批次轉換任務。若要在管道中執行批次轉換工作，您可以從 Amazon S3 下載輸入資料，然後透過一或多個 HTTP 請求將資料傳送到推論管道模型。如需示範如何準備批次轉換資料的範例，請參閱[使用線性學習程式範例筆記本的 Amazon SageMaker 多模型端點](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/advanced_functionality/multi_model_linear_learner_home_value)的 “第 2 節 - 使用 Scikit Learn 預先處理原始存放資料”。如需 Amazon SageMaker AI 批次轉換的相關資訊，請參閱[使用 Amazon SageMaker AI 進行批次轉換以進行推論](batch-transform.md)。

**注意**  
若要在包含 [Amazon SageMaker AI 內建演算法](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)的管道中使用自訂 Docker 映像檔，您需要 [Amazon Elastic Container Registry (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)。

以下範例示範如何使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 執行轉換工作。在此範例中，`model_name` 是結合 SparkML 與 XGBoost 模型 (在先前範例中建立) 的推論管道。`input_data_path` 指定的 Amazon S3 位置包含要下載和傳送至 Spark ML 模型的輸入資料 (CSV 格式)。轉換工作完成之後，`output_data_path` 指定的 Amazon S3 位置會包含 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 SageMaker AI 資源的可靠性、可用性和效能，監控很重要。若要監控推論管道效能並排除故障，請使用 Amazon CloudWatch 日誌和錯誤訊息。如需 SageMaker AI 提供之監控工具的相關資訊，請參閱[監控 Amazon SageMaker AI 中的 AWS 資源](monitoring-overview.md)。

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

若要監控推論管道中的多容器模型，請使用 Amazon CloudWatch。CloudWatch 可收集原始資料，將這些資料轉換為可讀取且幾近即時的指標。SageMaker AI 訓練任務和端點會在 `AWS/SageMaker` 命名空間中寫入 CloudWatch 指標和日誌。

下表列出以下各項的指標和維度：
+ 端點調用
+ 訓練任務、批次轉換任務和端點執行個體

*維度*是可唯一識別指標的名稱/值組。您可以對指標指派最多 10 個維度。如需有關使用 CloudWatch 進行監控的詳細資訊，請參閱[Amazon CloudWatch 中的 Amazon SageMaker AI 指標](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 分鐘回報一次。


| 指標 | Description | 
| --- | --- | 
| 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`、樣本計數 | 
| OverheadLatency |  在回應用戶端請求而花費的時間中，SageMaker AI 為了處理額外負荷而另外花費的時間。`OverheadLatency` 的計算是從 SageMaker AI 收到請求，直到回應傳回給用戶端的時間再減去 `ModelLatency`。額外負荷延遲可能隨著請求和回應承載大小、請求頻率，以及請求的身分驗證或授權等因素而不同。 單位：微秒 有效的統計資訊：`Average`、`Sum`、`Min`、`Max`、`Sample Count`  | 
| ContainerLatency | 從 SageMaker AI 的觀點來看，推論管道容器做出回應所花的時間。ContainerLatency 包含傳送請求、從模型的容器擷取回應，以及在容器中完成推論所花的時間。單位：微秒有效的統計資訊：`Average`、`Sum`、`Min`、`Max`、`Sample Count` | 

**端點調用指標的維度**


| 維度 | Description | 
| --- | --- | 
| EndpointName, VariantName, ContainerName |  針對指定端點上的 `ProductionVariant`，以及指定的變體，篩選端點調用指標。  | 

對於推論管道端點，CloudWatch 會將您帳戶中每個容器延遲指標列為 **SageMaker AI** 命名空間中的**端點容器指標**和**端點變體指標**，如下所示。只有推論管道才會顯示 `ContainerLatency` 指標。

![\[適用於推論管道的 CloudWatch 儀表板。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/pipeline-endpoint-metrics.png)


對於每個端點和每個容器，延遲指標會顯示容器、端點，變體及指標的名稱。

![\[端點的延遲指標。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/pipeline-endpoint-metrics-details.png)


**訓練任務、批次轉換任務及端點執行個體指標**

命名空間 `/aws/sagemaker/TrainingJobs`、`/aws/sagemaker/TransformJobs` 和 `/aws/sagemaker/Endpoints` 包含以下關於訓練任務和端點執行個體的指標。

指標每隔 1 分鐘回報一次。


| 指標 | Description | 
| --- | --- | 
| CPUUtilization |  執行個體上執行的容器所使用的 CPU 單位百分比。值的範圍從 0% 到 100%，並乘以 CPU 的數量。例如，如果有四個 CPU，`CPUUtilization` 的範圍可能從 0% 到 400%。 若為訓練任務，`CPUUtilization` 是執行個體上執行的演算法容器的 CPU 使用率。 若為批次轉換任務，`CPUUtilization` 是執行個體上執行的轉換容器的 CPU 使用率。 若為多容器模型，`CPUUtilization` 是執行個體上執行的所有容器的 CPU 使用率總和。 若為端點變體，`CPUUtilization` 是執行個體上執行的所有容器的 CPU 使用率總和。 單位：百分比  | 
| MemoryUtilization | 執行個體上執行的容器所使用的記憶體百分比。這個值的範圍從 0% 到 100%。若為訓練任務，`MemoryUtilization` 是執行個體上執行的演算法容器所使用的記憶體。若為批次轉換任務，`MemoryUtilization` 是執行個體上執行的轉換容器所使用的記憶體。若為多容器模型，MemoryUtilization 是執行個體上執行的所有容器所使用的記憶體總和。若為端點變體，`MemoryUtilization` 是執行個體上執行的所有容器所使用的記憶體總和。單位：百分比 | 
| GPUUtilization |  執行個體上執行的容器所使用的 GPU 單位百分比。`GPUUtilization` 的範圍從 0% 到 100%，並乘以 GPU 的數量。例如，如果有四個 GPU，`GPUUtilization` 的範圍可能從 0% 到 400%。 若為訓練任務，`GPUUtilization` 是執行個體上執行的演算法容器所使用的 GPU。 若為批次轉換任務，`GPUUtilization` 是執行個體上執行的轉換容器所使用的 GPU。 若為多容器模型，`GPUUtilization` 是執行個體上執行的所有容器所使用的 GPU 總和。 若為端點變體，`GPUUtilization` 是執行個體上執行的所有容器所使用的 GPU 總和。 單位：百分比  | 
| GPUMemoryUtilization |  執行個體上執行的容器所使用的 GPU 記憶體百分比。GPUMemoryUtilization 範圍從 0% 到 100%，並乘以 GPU 的數量。例如，如果有四個 GPU，`GPUMemoryUtilization` 的範圍可能從 0% 到 400%。 若為訓練任務，`GPUMemoryUtilization` 是執行個體上執行的演算法容器所使用的 GPU 記憶體。 若為批次轉換任務，`GPUMemoryUtilization` 是執行個體上執行的轉換容器所使用的 GPU 記憶體。 若為多容器模型，`GPUMemoryUtilization` 是執行個體上執行的所有容器所使用的 GPU 總和。 若為端點變體，`GPUMemoryUtilization` 是執行個體上執行的所有容器所使用的 GPU 記憶體總和。 單位：百分比  | 
| DiskUtilization |  執行個體上執行的容器所使用的磁碟空間百分比。DiskUtilization 的範圍從 0% 到 100%。批次轉換任務不支援這個指標。 若為訓練任務，`DiskUtilization` 是執行個體上執行的演算法容器所使用的磁碟空間。 若為端點變體，`DiskUtilization` 是執行個體上執行的所有已提供容器所使用的磁碟空間總和。 單位：百分比  | 

**Dimensions for Training Job, Batch Transform Job, and Endpoint Instance Metrics (訓練任務、批次轉換任務與端點執行個體指標的維度)**


| 維度 | Description | 
| --- | --- | 
| 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` 命名空間中顯示。  | 

為了協助您對訓練任務、端點與筆記本執行個體生命週期組態除錯，只要是演算法容器、模型容器或筆記本執行個體生命週期組態傳送給 `stdout` 或 `stderr` 的任何內容，SageMaker AI 也會傳送給 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_tw/sagemaker/latest/dg/inference-pipeline-logs-metrics.html)

**注意**  
您建立具有生命週期組態的筆記本執行個體時，SageMaker AI 會建立 `/aws/sagemaker/NotebookInstances` 日誌群組。如需詳細資訊，請參閱[使用 LCC 指令碼自訂 SageMaker 筆記本執行個體](notebook-lifecycle-config.md)。

如需關於 SageMaker AI 記錄格式的詳細資訊，請參閱[Amazon SageMaker AI 的 CloudWatch Logs](logging-cloudwatch.md)。

# 推論管道的故障診斷
<a name="inference-pipeline-troubleshoot"></a>

若要進行推論管道問題的故障診斷，請使用 CloudWatch 日誌和錯誤訊息。如果您在包含 Amazon SageMaker AI 內建演算法的管道中使用自訂 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 映像檔時，您需要 [Amazon ECR 政策](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)。此政策可讓您的 Amazon ECR 儲存庫授與 SageMaker AI 提取映像的許可。此政策必須新增下列許可：

------
#### [ 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>

對於將推論管道部署到 Amazon CloudWatch 的端點，SageMaker AI 會在每個容器的以下路徑發佈端點的容器日誌。

```
/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. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽頁面中，選擇 **Logs (日誌)**。

1. 在 **Log Groups (日誌群組)** 中，依 **MyInferencePipelinesEndpoint** 篩選：  
![\[針對推論管道端點篩選的 CloudWatch 日誌群組。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/pipeline-log-group-filter.png)

1. 若要查看日誌串流，請在 CloudWatch **日誌群組** 頁面選擇 **MyInferencePipelinesEndpoint**，然後選擇**搜尋日誌群組**。  
![\[推論管道的 CloudWatch 日誌串流。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/pipeline-log-streams-2.png)

如需 SageMaker AI 發佈的日誌清單，請參閱[推論管道日誌和指標](inference-pipeline-logs-metrics.md)。

## 使用錯誤訊息進行推論管道的故障診斷
<a name="inference-pipeline-troubleshoot-errors"></a>

推論管道錯誤訊息指出哪些容器故障。

如果 SageMaker AI 調用端點時發生錯誤，服務會傳回 `ModelError` (錯誤碼 424)，指出哪個容器故障。如果請求承載 (來自前一個容器的回應) 超過 5 MB 的限制，SageMaker AI 會提供詳細的錯誤訊息，例如：

收到來自 MyContainerName1 的回應，狀態碼為 200。不過，從 MyContainerName1 到 MyContainerName2 的請求承載為 6000000 位元組，已超過最大限制 5 MB。

``

SageMaker AI 建立端點時，如果容器的 ping 運作狀態檢查失敗，則會傳回 `ClientError`，並指出上一次運作狀態檢查時未通過 ping 檢查的所有容器。

# 刪除端點和資源
<a name="realtime-endpoints-delete-resources"></a>

刪除端點，停止產生費用。

## 刪除端點
<a name="realtime-endpoints-delete-endpoint"></a>

使用 適用於 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. 在位於 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 瀏覽功能表的 SageMaker AI 主控台，選擇**推論**。

1. 從下拉式功能表選擇**端點**。在您的 AWS 帳戶中建立的端點清單會依名稱、Amazon Resource Name (ARN)、建立時間、狀態和上次更新端點時的時間戳記顯示。

1. 選取您要刪除的端點。

1. 選取右上角的**動作**下拉式按鈕。

1. 選擇**刪除**。

------

## 刪除端點組態
<a name="realtime-endpoints-delete-endpoint-config"></a>

使用 適用於 Python (Boto3) 的 AWS SDK、 搭配 以程式設計方式刪除端點組態 AWS CLI，或使用 SageMaker AI 主控台以互動方式刪除端點組態。刪除端點組態並不會刪除使用這個組態建立的端點。如需如何刪除端點的資訊，請參閱[刪除端點](#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_Operations_Amazon_SageMaker_Service.html)的 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.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) API 命令傳回已部署模型 (生產變體) 名稱的相關資訊，例如模型名稱，以及與該部署模型相關的端點組態名稱。為 `endpoint-config-name` 旗標提供端點名稱。

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

隨即會傳回 JSON 回應。您可以複製貼上、使用 JSON 剖析器，或使用專為 JSON 剖析而建置的工具，取得與該端點相關的端點組態名稱。

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

使用 SageMaker AI 主控台以互動方式刪除端點組態。

1. 在位於 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 瀏覽功能表的 SageMaker AI 主控台，選擇**推論**。

1. 從下拉式功能表選擇**端點組態**。 AWS 帳戶建立的端點組態清單會依名稱、Amazon Resource Name (ARN) 和建立時間顯示。

1. 選取您要刪除的端點組態。

1. 選取右上角的**動作**下拉式按鈕。

1. 選擇**刪除**。

------

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

使用 適用於 Python (Boto3) 的 AWS SDK、 搭配 以程式設計方式刪除 SageMaker AI 模型 AWS CLI，或使用 SageMaker AI 主控台以互動方式刪除 SageMaker AI 模型。刪除 SageMaker AI 模型只會刪除在 SageMaker AI 建立的模型項目。刪除模型不會刪除模型成品、推論程式碼，或您在建立模型時指定的 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_Operations_Amazon_SageMaker_Service.html)的 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.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) API 命令傳回已部署模型 (生產變體) 名稱的相關資訊，例如模型名稱，以及與該部署模型相關的端點組態名稱。為 `endpoint-config-name` 旗標提供端點名稱。

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

隨即會傳回 JSON 回應。您可以複製貼上、使用 JSON 剖析器，或使用專為 JSON 剖析而建置的工具，取得與該端點相關的模型名稱。

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

使用 SageMaker AI 主控台以互動方式刪除 SageMaker AI 模型。

1. 在位於 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 瀏覽功能表的 SageMaker AI 主控台，選擇**推論**。

1. 從下拉式功能表選擇**模型**。在您 AWS 帳戶中建立的模型清單會依名稱、Amazon Resource Name (ARN) 和建立時間顯示。

1. 選取您要刪除的模型。

1. 選取右上角的**動作**下拉式按鈕。

1. 選擇**刪除**。

------