Verwenden Sie einen Endpunkt mit mehreren Containern und direktem Aufruf - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie einen Endpunkt mit mehreren Containern und direktem Aufruf

SageMaker Endpunkte mit mehreren Containern ermöglichen es Kunden, mehrere Container bereitzustellen, um verschiedene Modelle auf einem SageMaker Endpunkt bereitzustellen. Sie können bis zu 15 verschiedene Inferenzcontainer auf einem einzigen Endpunkt hosten. Mithilfe des direkten Aufrufs können Sie eine Anfrage an einen bestimmten Inferenzcontainer senden, der auf einem Endpunkt mit mehreren Containern gehostet wird.

Rufen Sie einen Endpunkt mit mehreren Containern mit direktem Aufruf auf

Um einen Multicontainer-Endpunkt mit direktem Aufruf aufzurufen, rufen Sie invoke_endpoint wie jeden anderen Endpunkt auf und geben Sie mithilfe des TargetContainerHostname-Parameters an, welchen Container Sie aufrufen möchten.

Das folgende Beispiel ruft direkt die secondContainer eines Multi-Container-Endpunkts auf, um eine Vorhersage zu erhalten.

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)

Bei jeder direkten Aufrufanforderung an einen Multi-Container-Endpunkt verarbeitet nur der Container mit den TargetContainerHostname die Aufrufanforderung. Sie erhalten Validierungsfehler, wenn Sie einen der folgenden Schritte ausführen:

  • Geben Sie eine TargetContainerHostname an, die im Endpunkt nicht vorhanden ist

  • Geben Sie keinen Wert für TargetContainerHostname in einer Anfrage an einen Endpunkt an, der für den direkten Aufruf konfiguriert ist

  • Geben Sie einen Wert für TargetContainerHostname in einer Anfrage an einen Endpunkt an, der nicht für den direkten Aufruf konfiguriert ist.

Sicherheit bei Endpunkten mit mehreren Containern und direktem Aufruf

Bei Endpunkten mit mehreren Containern und direktem Aufruf werden mehrere Container in einer einzigen Instanz gehostet, wobei Speicher und Speichervolume gemeinsam genutzt werden. Es liegt in Ihrer Verantwortung, sichere Container zu verwenden, die richtige Zuordnung von Anfragen zu Zielcontainern aufrechtzuerhalten und Benutzern den richtigen Zugriff auf Zielcontainer zu gewähren. SageMaker verwendet IAM-Rollen, um IAM-identitätsbasierte Richtlinien bereitzustellen, mit denen Sie angeben, ob der Zugriff auf eine Ressource dieser Rolle erlaubt oder verweigert wird und unter welchen Bedingungen. Weitere Informationen zu IAM-Rollen finden Sie unter IAM-Rollen im AWS Identity and Access Management Benutzerhandbuch. Informationen über identitätsbasierte Richtlinien finden Sie unter Identitätsbasierte Richtlinien und ressourcenbasierte Richtlinien.

Standardmäßig kann ein IAM-Prinzipal mit InvokeEndpoint Berechtigungen auf einem Multi-Container-Endpunkt mit direktem Aufruf jeden Container innerhalb des Endpunktes mit dem Endpunktnamen aufrufen, den Sie beim Aufruf von invoke_endpoint angeben. Wenn Sie den invoke_endpoint Zugriff auf eine begrenzte Anzahl von Containern innerhalb eines Endpunkts mit mehreren Containern einschränken müssen, verwenden Sie den sagemaker:TargetContainerHostname IAM-Bedingungsschlüssel. Die folgenden Richtlinien zeigen, wie Aufrufe auf bestimmte Container innerhalb eines Endpunkts beschränkt werden können.

Die folgende Richtlinie lässt invoke_endpoint-Anfragen nur zu, wenn der Wert des Feldes TargetContainerHostname mit einem der angegebenen regulären Ausdrücke übereinstimmt.

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

Die folgende Richtlinie lehnt invoke_endpoint Anfragen ab, wenn der Wert des TargetContainerHostname Felds mit einem der angegebenen regulären Ausdrücke in der Deny Anweisung übereinstimmt.

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

Informationen zu SageMaker Bedingungsschlüsseln finden Sie unter Bedingungsschlüssel für SageMaker im AWS Identity and Access Management -Benutzerhandbuch.

Metriken für Endpunkte mit mehreren Containern und direktem Aufruf

Zusätzlich zu den Endpunktmetriken, die in aufgeführt sindÜberwachen Sie Amazon SageMaker mit Amazon CloudWatch, stellt SageMaker auch Metriken pro Container bereit.

Metriken pro Container für Endpunkte mit mehreren Containern mit direktem Aufruf befinden sich in CloudWatch und sind in zwei Namespaces unterteilt: AWS/SageMaker und aws/sagemaker/Endpoints. Der AWS/SageMaker Namespace umfasst aufrufbezogene Metriken, und der aws/sagemaker/Endpoints Namespace umfasst Kennzahlen zur Speicher- und CPU-Auslastung.

In der folgenden Tabelle sind die containerspezifischen Metriken für Endpunkte mit mehreren Containern und direktem Aufruf aufgeführt. Alle Metriken verwenden die Dimension [EndpointName, VariantName, ContainerName], die Metriken an einem bestimmten Endpunkt für eine bestimmte Variante filtert und einem bestimmten Container entspricht. Diese Metriken haben dieselben Metriknamen wie die Metriken für Inferenz-Pipelines, jedoch auf Container-Ebene [EndpointName, VariantName, ContainerName].

Metrikname Beschreibung Dimension NameSpace
Invocations Die Anzahl der InvokeEndpoint Anfragen, die an einen Container innerhalb eines Endpunkts gesendet wurden. Um die Gesamtzahl der an diesen Container gesendeten Anfragen zu ermitteln, verwenden Sie die Sum Statistik. Einheiten: Keine Gültige Statistik: Sum, Sample Count EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation4XX Errors Die Anzahl der InvokeEndpoint-Anfragen, für die das Modell einen 4xx HTTP-Antwortcode für einen bestimmten Container zurückgegeben hat. Für jede 4xx Antwort SageMaker sendet eine 1. Einheiten: Keine Gültige Statistik: Average, Sum EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation5XX Errors Die Anzahl der InvokeEndpoint-Anfragen, für die das Modell einen 5xx HTTP-Antwortcode für einen bestimmten Container zurückgegeben hat. Für jede 5xx Antwort SageMaker sendet eine 1. Einheiten: Keine Gültige Statistik: Average, Sum EndpointName, VariantName, ContainerName AWS/SageMaker
ContainerLatency Die Zeit, die der Zielcontainer benötigt hat, um wie von angesehen zu antworten SageMaker. ContainerLatency enthält die Zeit, die zum Senden der Anforderung, zum Abrufen der Antwort aus dem Container des Modells und zum Abschließen der Inferenz im Container benötigt wurde. Einheiten: Mikrosekunden Gültige Statistiken: Average, Sum, Min, Max, Sample Count EndpointName, VariantName, ContainerName AWS/SageMaker
OverheadLatency Die Zeit, die der Zeit hinzugefügt wird, die benötigt wird, um auf eine Client-Anforderung zu antworten, wird SageMaker anhand von Overhead gemessen. OverheadLatency wird ab dem Zeitpunkt gemessen, an dem die Anforderung SageMaker empfängt, bis es eine Antwort an den Client zurückgibt, abzüglich der ModelLatency. Die Overhead-Latenz kann in Abhängigkeit von mehreren Faktoren variieren. Diese Faktoren sind beispielsweise die Größe der Nutzlast für Anfragen und Antworten, die Häufigkeit von Anfragen und die Authentifizierung oder Autorisierung der Anfrage. Einheiten: Mikrosekunden Gültige Statistiken: Average, Sum, Min, Max, `Anzahl der Stichproben ` EndpointName, VariantName, ContainerName AWS/SageMaker
CPUUtilization Der Prozentsatz der CPU-Einheiten, die von jedem auf einer Instanz laufenden Container verwendet werden. Der Wert reicht von 0 % bis 100 % und wird mit der Anzahl der CPUs multipliziert. Wenn beispielsweise vier CPUs genutzt werden, CPUUtilization kann zwischen 0 % und 400 % liegen. Bei Endpunkten mit direktem Aufruf entspricht die Anzahl der CPU-Nutzungsmetriken der Anzahl der Container in diesem Endpunkt. Einheiten: Prozent EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints
MemoryUtilizaton Der Prozentsatz des Arbeitsspeichers, der von jedem auf einer Instanz laufenden Container verwendet wird. Dieser Wert reicht von 0 bis 100 %. Ähnlich wie CPUUtilization entspricht die Anzahl der MemoryUtilization Metriken in Endpunkten mit direktem Aufruf der Anzahl der Container in diesem Endpunkt. Einheiten: Prozent EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints

Alle Metriken in der vorherigen Tabelle sind spezifisch für Endpunkte mit mehreren Containern und direktem Aufruf. Neben diesen speziellen Metriken pro Container gibt es auch Metriken auf Variantenebene mit einer Dimension [EndpointName, VariantName] für alle Metriken in der Tabelle, die ContainerLatency erwartet wird.

Automatische Skalierung von Endpunkten mit mehreren Containern

Wenn Sie die automatische Skalierung für einen Endpunkt mit mehreren Containern mithilfe der InvocationsPerInstance Metrik konfigurieren möchten, empfehlen wir, dass das Modell in jedem Container bei jeder Inferenzanforderung eine ähnliche CPU-Auslastung und Latenz aufweist. Dies wird empfohlen, da, wenn der Datenverkehr zum Multi-Container-Endpunkt von einem Modell mit niedriger CPU-Auslastung zu einem Modell mit hoher CPU-Auslastung wechselt, das Gesamtaufrufvolumen jedoch gleich bleibt, der Endpunkt nicht skaliert wird und es möglicherweise nicht genügend Instances gibt, um alle Anfragen an das Modell mit hoher CPU-Auslastung zu verarbeiten. Informationen zur automatischen Skalierung von Endpunkten finden Sie unterAutomatisches Skalieren Amazon SageMaker Amazon-Modellen.

Problembehandlung bei Endpunkten mit mehreren Containern

Die folgenden Abschnitte können zum Beheben von Fehlern bei Endpunkten mit mehreren Containern helfen.

Fehler bei der Ping-Integritätsprüfung

Bei mehreren Containern stehen der Speicher und die CPU des Endpunkts bei der Endpunkterstellung unter höherem Druck. Insbesondere die Metriken MemoryUtilization und CPUUtilization sind höher als bei Einzelcontainer-Endpunkten, da der Nutzungsdruck proportional zur Anzahl der Container ist. Aus diesem Grund empfehlen wir, Instance-Typen mit ausreichend Arbeitsspeicher und CPU zu wählen, um sicherzustellen, dass auf der Instance genügend Arbeitsspeicher vorhanden ist, damit alle Modelle geladen werden können (die gleichen Richtlinien gelten für die Bereitstellung einer Inferenzpipeline). Andernfalls schlägt Ihre Endpunkterstellung möglicherweise fehl und es wird ein Fehler wie XXX did not pass the ping health check angezeigt.

Fehlende accept-bind-to-port=true Docker-Bezeichnung

Die Container in einem Multi-Container-Endpunkt lauschen auf dem in der SAGEMAKER_BIND_TO_PORT Umgebungsvariablen angegebenen Port anstelle von Port 8080. Wenn ein Container in einem Endpunkt mit mehreren Containern ausgeführt wird, stellt diese Umgebungsvariable SageMaker automatisch für den Container bereit. Wenn diese Umgebungsvariable nicht vorhanden ist, verwenden Container standardmäßig Port 8080. Verwenden Sie den folgenden Befehl zum Hinzufügen einer Kennzeichnung zu Ihrem Dockerfile, um anzuzeigen, dass Ihr Container diese Anforderung erfüllt.

LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true

Andernfalls erhalten Sie eine Fehlermeldung wie Your Ecr Image XXX does not contain required com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true Docker label(s).

Wenn Ihr Container einen zweiten Port überwachen muss, wählen Sie einen Port im von der Umgebungsvariable SAGEMAKER_SAFE_PORT_RANGE angegebenen Bereich. Geben Sie den Wert als inklusiven Bereich im Format XXXX -YYYY an, wobei XXXX und YYYY mehrstellige Ganzzahlen sind. SageMaker stellt diesen Wert automatisch bereit, wenn Sie den Container in einem Endpunkt mit mehreren Containern ausführen.