本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用具有直接调用的多容器终端节点
SageMaker 多容器端点使客户能够部署多个容器,以便在 SageMaker 终端节点上部署不同的模型。您可以在单个终端节点上托管多达 15 个不同的推理容器。通过使用直接调用,您可以向托管在多容器终端节点上的特定推理容器发送请求。
直接调用调用多容器终端节点
要通过直接调用调用多容器终端节点,请调用invoke_终端点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用户指南. 有关基于身份的策略的信息,请参阅基于身份的策略和基于资源的策略.
默认情况下,IAM 委托人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/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要求模型返回4xx特定容器上的 HTTP 响应代码。对于每个4xx响应时,SageMaker 发送1. 单位:无有效统计数据:Average、Sum |
EndpointName, VariantName,
ContainerName
|
AWS/SageMaker |
Invocation5XX Errors
|
的数量InvokeEndpoint要求模型返回5xx特定容器上的 HTTP 响应代码。对于每个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% 之间。对于具有直接调用的终端节点,CPU 利用率指标的数量等于该终端节点中的容器数量。单位:百分比 |
EndpointName, VariantName,
ContainerName
|
aws/sagemaker/Endpoints |
MemoryUtilizaton
|
实例上运行的每个容器所使用的内存的百分比。此值范围从 0% 到 100%。与 CPULize 类似,在具有直接调用的终端节点中,内存利用率指标的数量等于该终端节点中的容器数量。单位:百分比 |
EndpointName, VariantName,
ContainerName
|
aws/sagemaker/Endpoints |
上表中的所有指标都特定于具有直接调用的多容器终端节点。除了这些特殊的每容器指标之外,还有一些具有维度的变体级别的指标[EndpointName, VariantName]对于表中的所有指标的预期ContainerLatency.
自动扩展多容器终端节点
如果要使用InvocationsPerInstance指标,我们建议每个容器中的模型在每个推理请求中显示相似的 CPU 利用率和延迟。建议这样做是因为如果流向多容器终端节点的流量从 CPU 使用率较高模式转变为低 CPU 使用率模式,但总呼叫量保持不变,则终端节点不会扩展,并且可能没有足够的实例来处理对高 CPU 使用率的所有请求模型。有关自动扩展终端节点的信息,请参自动扩展 Amazon SageMaker 模型.
排查多容器终端节点
以下部分可帮助您解决多容器终端节点的错误。
ping Health 检查错误
对于多个容器,端点内存和 CPU 在端点创建过程中承受更大的压力。具体来说,MemoryUtilization和CPUUtilization指标高于单容器终端节点的指标,因为利用压力与容器数量成正比。因此,我们建议您选择具有足够内存和 CPU 的实例类型,以确保实例上有足够的内存来加载所有模型(同样的指导适用于部署推理管道)。否则,您的终端节点创建可能会失败并出现错误,例如XXX did not pass the
ping health check.
缺少接受绑定到端口 = 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 会自动提供该值。