

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

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

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

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

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

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

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

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

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

**Topics**
+ [

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

**端点调用指标**

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

指标每 1 分钟报告一次。


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

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


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

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

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


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

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


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

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

指标每 1 分钟报告一次。


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

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


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

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

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

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

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

**日志**

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

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

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

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

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

**Topics**
+ [

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

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

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

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

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

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

****  

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

------

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

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

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

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

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

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

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

**查看日志组和流**

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

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

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

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

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

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

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

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

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

``

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