使用具有直接叫用的多容器端點 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用具有直接叫用的多容器端點

SageMaker 多容器端點可讓客戶部署多個容器,在 SageMaker 端點上部署不同的模型。您最多可以在單一端點上託管 15 個不同的推論容器。透過使用直接叫用,您可以將請求傳送至託管在多容器端點上的特定推論容器。

透過直接叫用調用多容器端點

要使用直接叫用調用多容器端點,請如同調用任何其他端點一樣呼叫 invoke_endpoint,並使用 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 角色的資訊,請參閱AWS Identity and Access Management 使用者指南中的 IAM 角色。如需有關身分型政策的資訊,請參閱身分型政策和資源型政策

預設情況下,具有直接叫用之多容器端點 InvokeEndpoint許可的 IAM 主體,可以調用您在呼叫 invoke_endpoint時指定的端點名稱中端點內的任何容器。如需限制 invoke_endpoint對多容器端點內的一組有限容器的存取,請使用 sagemaker:TargetContainerHostnameIAM 條件索引鍵。下列政策顯示如何限制端點內特定容器的呼叫。

下列政策只有在 TargetContainerHostname欄位的值符合其中一個指定規則表達式時,才能允許 invoke_endpoint請求。

{ "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*"] } } } ] }

TargetContainerHostname欄位的值符合 Deny陳述式中指定的規則表達式之一時,下列政策會拒絕 invoke_endpoint請求。

{ "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 條件索引鍵的資訊,請參閱《AWS Identity and Access Management 使用指南》 SageMaker中的條件鍵

具有直接叫用的多容器端點指標

除了中列出的端點指標外監控 Amazon SageMaker 與 Amazon CloudWatch, SageMaker 還提供每個容器指標。

具有直接調用的多容器端點的每個容器指標位於兩個命名空間中 CloudWatch 並分為兩個命名空間:和。AWS/SageMaker aws/sagemaker/EndpointsAWS/SageMaker 命名空間包含叫用相關的指標,aws/sagemaker/Endpoints 命名空間則包含記憶體和 CPU 使用率指標。

下表列出具有直接叫用之多容器端點的每個容器指標。所有指標都使用 [EndpointName, VariantName, ContainerName] 維度,該維度會針對特定變體篩選特定端點的指標,並對應於特定容器。這些指標與推論管道共用相同的指標名稱,但僅限每個容器層級 [EndpointName, VariantName, ContainerName]。

指標名稱 描述 維度 NameSpace
Invocations 傳送至端點內容器的 InvokeEndpoint請求數量。若要取得傳送至容器的請求總數,請使用 Sum統計資料。單位:無有效統計資料:SumSample Count EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation4XX Errors 模型傳回某特定容器 4xxHTTP 回應代碼以回應的 InvokeEndpoint請求數量。對於每個4xx響應, SageMaker 發送一個1. 單位:無有效統計資料:AverageSum EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation5XX Errors 模型傳回某特定容器 5xxHTTP 回應代碼以回應的 InvokeEndpoint請求數量。對於每個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%。對於具有直接叫用的端點,CPUUtilization 指標的數量等於該端點中的容器數量。單位:百分比 EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints
MemoryUtilizaton 執行個體上執行的各個容器所使用的記憶體百分比。這個值的範圍從 0% 到 100%。與 CPURisure 類似,在具有直接叫用的端點中,度 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

缺少 accept-bind-to-port = 真正的碼頭標籤

多容器端點中的容器會接聽 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 當您在多容器端點中執行容器時,會自動提供此值。