使用具有直接调用功能的多容器终端节点 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用具有直接调用功能的多容器终端节点

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

使用直接调用调用多容器终端节点

要使用直接调用调用多容器终端节点,请调用发票终端节点就像您调用任何其他端点一样,并指定要通过使用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发送到未配置为直接调用的终端节点的请求中。

具有直接调用的多容器终端节点的安全性

对于具有直接调用的多容器终端节点,通过共享内存和存储卷,在单个实例中托管多个容器。您有责任使用安全容器,维护请求到目标容器的正确映射,并为用户提供对目标容器的正确访问权限。SageMaker 使用 IAM 角色提供基于身份的 IAM 策略,您可以使用这些策略指定是允许还是拒绝该角色访问资源,以及在什么条件下访问该资源。有关 IAM 角色的信息,请参阅IAM 角色中的Amazon Identity and Access Management用户指南. 有关基于身份的策略的信息,请参阅基于身份的策略和基于资源的策略.

默认情况下,具有InvokeEndpoint具有直接调用的多容器终端节点上的权限可以调用终端节点内的任何容器,该终端节点名称是您在调用invoke_endpoint. 如果您需要限制invoke_endpoint访问多容器终端节点内的有限容器集,请使用sagemaker:TargetContainerHostnameIAM 条件键。以下策略说明了如何将调用限制到终端节点中的特定容器。

以下策略允许invoke_endpoint仅当TargetContainerHostname字段匹配其中一个指定的正则表达式。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["customIps*", "common*"] } } } ] }

以下策略拒绝invoke_endpoint请求时,TargetContainerHostname字段匹配Deny网页。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["*"] } } }, { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Deny", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["special*"] } } } ] }

有关 SageMaker 条件键的信息,请参阅SageMaker 的条件键中的Amazon Identity and Access Management用户指南.

具有直接调用的多容器终端节点的衡量指标

除了使用 Amazon CloudWatch 监控 Amazon SageMaker,SageMaker 还提供了每个容器的指标。

具有直接调用的多容器终端节点的每容器指标位于 CloudWatch 中,并分为两个命名空间:AWS/SageMakeraws/sagemaker/Endpoints. 这些区域有:AWS/SageMaker命名空间包含与调用相关的指标,aws/sagemaker/Endpoints命名空间包括内存和 CPU 利用率指标。

下表列出了具有直接调用的多容器终端节点的每容器衡量指标。所有指标都使用 [EndpointName, VariantName, ContainerName] 维度,用于筛选特定终端节点、特定变体和对应于特定容器的指标。这些指标共享的指标名称与推理管道的指标名称相同,但在每个容器级别 [EndpointName, VariantName, ContainerName]。

指标名称 描述 维度 NameSpace
Invocations 的数量InvokeEndpoint发送到终端节点内容器的请求。要获取发送到该容器的请求总数,请使用Sum统计数据。单位:无有效统计数据:SumSample Count EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation4XX Errors 的数量InvokeEndpoint请求模型返回4xx针对特定容器的 HTTP 响应代码。对于每个4xx响应时,SageMaker 会发送1. 单位:无有效统计数据:AverageSum EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation5XX Errors 的数量InvokeEndpoint请求模型返回5xx针对特定容器的 HTTP 响应代码。对于每个5xx响应时,SageMaker 会发送1. 单位:无有效统计数据:AverageSum EndpointName, VariantName, ContainerName AWS/SageMaker
ContainerLatency 从的角度观察到的目标容器做出响应 SageMaker 时间。ContainerLatency包括以下操作所花的时间:发送请求,从模型容器中提取响应,以及在容器中完成推理。单位:微秒有效统计数据:AverageSumMinMaxSample Count EndpointName, VariantName, ContainerName AWS/SageMaker
OverheadLatency 对 SageMaker 提出的客户端请求做出响应的时间。OverheadLatency从 SageMaker 收到请求开始,直至它返回响应到客户端,减去ModelLatency. 除其他因素外,开销延迟还可能由于请求和响应负载大小、请求频率以及请求的身份验证或授权而变化。单位:微秒有效统计数据:AverageSumMinMax, “样本计数” EndpointName, VariantName, ContainerName AWS/SageMaker
CPUUtilization 实例上运行的每个容器所使用的 CPU 单位的百分比。值范围从 0% 到 100%,并且乘以 CPU 数目。例如,如果有四个 CPU,CPUUtilization 可以介于 0% 到 400% 之间。对于具有直接调用的终端,CPU 利用率度量的数量等于该终端节点中的容器数。单位:百分比 EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints
MemoryUtilizaton 实例上运行的每个容器所使用的内存的百分比。此值范围从 0% 到 100%。与 CPU 利用率类似,在具有直接调用的端点中,内 MemoryUtilization 度量的数量等于该端点中的容器数。单位:百分比 EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints

上表中的所有度量都特定于具有直接调用的多容器终端节点。除了这些特殊的每容器指标外,还有具有维度的变量级别的指标[EndpointName, VariantName]表中的所有指标期望ContainerLatency.

自动缩放多容器终端节点

如果要为多容器终端节点配置自动扩展,使用InvocationsPerInstance度量,我们建议每个容器中的模型在每个推断请求上显示相似的 CPU 利用率和延迟。建议这样做,因为如果流向多容器终端节点的流量从高 CPU 利用率模型转移到低 CPU 利用率模型,但总体调用量保持不变,则终端节点不会向外扩展,并且可能没有足够的实例来处理对高 CPU 利用率的所有请求模型。有关自动扩展终端节点的信息,请参阅自动扩展 Amazon SageMaker 型号.

对多容器终端进行故障排除

以下部分可帮助您解决多容器终端节点的错误。

Ping 运行状况检查错误

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

缺少接受绑定到端口 = 真正的 Docker 标签

多容器终端节点中的容器侦听SAGEMAKER_BIND_TO_PORT环境变量而不是端口 8080。当容器在多容器终端节点中运行时,SageMaker 会自动向容器提供此环境变量。如果此环境变量不存在,则容器应默认为使用端口 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 会自动提供此值。