

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

# 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 檢查的所有容器。