推理管道问题排查 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

推理管道问题排查

要对推理管道问题进行故障排除,请使用 CloudWatch 日志和错误消息。如果您在包含 Amazon SageMaker 内置算法的管道中使用自定义 Docker 镜像,则可能还会遇到权限问题。要授予所需权限,请创建亚马逊弹性容器注册表 (AmazonECR) 策略。

对 Amazon 推理ECR管道权限进行故障排除

当您在包含SageMaker 内置算法的管道中使用自定义 Docker 镜像时,您需要ECR制定亚马逊政策。该政策允许您的 Amazon ECR 存储库授 SageMaker 予提取图片的权限。该策略必须添加以下权限:

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

使用 CloudWatch 日志对 SageMaker 推理管道进行故障排除

SageMaker 通过每个容器的以下路径将部署推理管道的终端节点的容器日志发布到 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/

  2. 在导航窗格中,选择 Logs (日志)

  3. Log Groups (日志组) 中,筛选 MyInferencePipelinesEndpoint

    针对推理管道端点筛选的 CloudWatch 日志组。
  4. 要查看日志流,请在 “ CloudWatch 日志组” 页面上选择MyInferencePipelinesEndpoint,然后选择 “搜索日志组”。

    推理管道的 CloudWatch 日志流。

有关 SageMaker 发布的日志的列表,请参阅推理管道日志和指标

使用错误消息对推理管道进行问题排查

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

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

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

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