本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将多容器终端节点与直接调用结合使用
SageMaker 多容器终端节点使客户能够部署多个容器以在SageMaker终端节点上部署不同的模型。您可以在单个终端节点上托管最多 5 个不同的推理容器。通过使用直接调用,您可以将请求发送到多容器终端节点上托管的特定推理容器。
使用直接调用来调用多容器终端节点
要使用直接调用来调用多容器终端节点,请像调用任何其他终端节点一样调用 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpointTargetContainerHostname
参数指定要调用的容器。
以下示例直接调用多容器终端节点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 用户指南中的 AWS Identity and Access Management 角色。有关基于身份的策略的信息,请参阅基于身份的策略和基于资源的策略。
默认情况下,在具有直接调用的多容器终端节点上具有IAM权限的 InvokeEndpoint
委托人可以使用您在调用 时指定的终端节点名称调用终端节点中的任何容器invoke_endpoint
。如果您需要限制对多容器终端节点内一组有限的容器invoke_endpoint
的访问,请使用 sagemaker:TargetContainerHostname
IAM 条件键。以下策略说明如何限制对终端节点中特定容器的调用。
以下策略仅在 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 用户指南 AWS Identity and Access Management中的 的条件键。
具有直接调用的多容器终端节点的指标
除了中列出的终端节点指标之外使用 Amazon SageMaker 监控 Amazon CloudWatch, SageMaker 还提供了每个容器的指标。
具有直接调用的多容器终端节点的每容器指标位于 中CloudWatch,并分为两个命名空间: AWS/SageMaker
和 aws/sagemaker/Endpoints
。AWS/SageMaker
命名空间包括与调用相关的指标, aws/sagemaker/Endpoints
命名空间包括内存和 CPU 利用率指标。
下表列出了具有直接调用的多容器终端节点的每容器指标。所有指标都对特定变体使用 [EndpointName, VariantName,
ContainerName
] 维度,该维度筛选特定终端节点上的指标,并与特定容器对应。这些指标与推理管道的指标名称相同,但位于每个容器级别 [EndpointName, VariantName, ContainerName
]。
指标名称 | 描述 | 维度 | NameSpace |
Invocations
|
发送到终端节点中的容器InvokeEndpoint 的请求数。要获取发送到该容器的请求总数,请使用 Sum 统计数据。单位:无 有效统计数据Sum :、 Sample Count |
EndpointName , VariantName ,
ContainerName
|
AWS/SageMaker |
Invocation4XX Errors
|
模型在特定容器上返回 的 InvokeEndpoint HTTP 响应代码4xx 的请求数。对于每个 4xx 响应,SageMaker 都会发送 1 。单位:无 有效统计数据Average :、 Sum |
EndpointName , VariantName ,
ContainerName
|
AWS/SageMaker |
Invocation5XX Errors
|
模型在特定容器上返回 的 InvokeEndpoint HTTP 响应代码5xx 的请求数。对于每个 5xx 响应,SageMaker 都会发送 1 。单位:无 有效统计数据Average :、 Sum |
EndpointName , VariantName ,
ContainerName
|
AWS/SageMaker |
ContainerLatency
|
目标容器从 查看时响应所用的时间SageMaker。ContainerLatency 包括发送请求、从模型的容器中提取响应以及在容器中完成推理所用的时间。单位:微秒 有效统计数据Average :、Sum 、Min 、Max 、 Sample Count |
EndpointName , VariantName ,
ContainerName
|
AWS/SageMaker |
OverheadLatency
|
为 响应客户端请求SageMaker开销所花费的时间增加的时间。OverheadLatency 计算从 SageMaker 收到请求到它将响应返回给客户端的时间减去 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
。
自动扩展多容器终端节点
如果要使用 InvocationsPerInstance
指标为多容器终端节点配置自动扩展,我们建议每个容器中的模型在每个推理请求上都显示相似的 CPU 利用率和延迟。建议这样做是因为,如果流向多容器终端节点的流量从高
CPU 使用率模型转移到低 CPU 使用率模型,但整体调用量保持不变,则终端节点不会向外扩展,并且可能没有足够的实例来处理对高 CPU 使用率模型的所有请求。有关自动扩展终端节点的信息,请参阅自动扩展 Amazon SageMaker 模型。
对多容器终端节点进行故障排除
以下部分可帮助您排查多容器终端节点的错误。
Ping 运行状况检查错误
对于多个容器,终端节点内存和 CPU 在终端节点创建期间压力更大。具体而言, MemoryUtilization
和 CPUUtilization
指标高于单容器终端节点,因为利用率压力与容器数成正比。因此,我们建议您选择具有足够内存和 CPU 的实例类型,以确保实例上有足够的内存来加载所有模型 (相同的指南适用于部署推理管道)。否则,您的终端节点创建可能会失败,并出现错误,例如
XXX did not pass the
ping health check
。
缺少 accept-bind-to-port=true 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提供此值。