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.
Benutzerdefinierter Inferenzcode mit Hosting-Diensten
In diesem Abschnitt wird erklärt, wie Amazon SageMaker AI mit einem Docker-Container interagiert, der Ihren eigenen Inferenzcode für Hosting-Dienste ausführt. Verwenden Sie diese Informationen zum Schreiben von Inferenzcode und zum Erstellen eines Docker-Images.
Themen
- Wie SageMaker KI Ihr Inferenz-Image ausführt
- Wie SageMaker KI Ihre Modellartefakte lädt
- So sollte Ihr Container auf Inferenzanforderungen reagieren
- So sollte Ihr Container auf Zustandsprüfungsanforderungen (Ping-Anforderungen) reagieren
- Verwenden Sie eine private Docker-Registry für Echtzeit-Inferenzcontainer
Wie SageMaker KI Ihr Inferenz-Image ausführt
Um einen Container so zu konfigurieren, dass er als ausführbare Datei ausgeführt wird, verwenden Sie eine ENTRYPOINT
-Anweisung in einer Dockerfile. Beachten Sie Folgendes:
-
Für die Modellinferenz führt SageMaker KI den Container wie folgt aus:
docker run
image
serveSageMaker AI überschreibt
CMD
Standardanweisungen in einem Container, indem dasserve
Argument hinter dem Bildnamen angegeben wird. Dasserve
-Argument überschreibt Argumente, die Sie mit demCMD
-Befehl in der Dockerfile bereitstellen. -
SageMaker AI erwartet, dass alle Container mit Root-Benutzern ausgeführt werden. Erstellen Sie Ihren Container so, dass er nur Root-Benutzer verwendet. Wenn SageMaker KI Ihren Container ausführt, können Benutzer, die keinen Zugriff auf Root-Ebene haben, zu Berechtigungsproblemen führen.
-
Es wird empfohlen, das
exec
-Formular derENTRYPOINT
-Anleitung zu verwenden:ENTRYPOINT ["executable", "param1", "param2"]
Beispielsweise:
ENTRYPOINT ["python", "k_means_inference.py"]
Das
exec
-Formular derENTRYPOINT
-Anweisung startet die ausführbare Datei direkt, nicht als untergeordnetes Element von/bin/sh
. Dadurch kann es Signale wieSIGTERM
undSIGKILL
von den SageMaker API Vorgängen empfangen, was eine Voraussetzung ist.Wenn Sie beispielsweise den verwenden, um einen Endpunkt
CreateEndpoint
APIzu erstellen, stellt SageMaker KI die Anzahl der ML-Compute-Instanzen bereit, die für die Endpunktkonfiguration erforderlich sind, die Sie in der Anfrage angeben. SageMaker AI führt den Docker-Container auf diesen Instanzen aus.Wenn Sie die Anzahl der Instanzen reduzieren, die den Endpunkt unterstützen (indem Sie den aufrufen
UpdateEndpointWeightsAndCapacities
API), führt SageMaker AI einen Befehl aus, um den Docker-Container auf den Instanzen zu stoppen, die beendet werden. Der Befehl sendet dasSIGTERM
-Signal und dann dreißig Sekunden später dasSIGKILL
-Signal.Wenn Sie den Endpunkt aktualisieren (indem Sie den aufrufen
UpdateEndpoint
API), startet SageMaker KI einen weiteren Satz von ML-Compute-Instances und führt die Docker-Container, die Ihren Inferenzcode enthalten, auf ihnen aus. Anschließend wird ein Befehl zum Beenden der vorherigen Docker-Container ausgeführt. Um einen Docker-Container anzuhalten, sendet der Befehl das SignalSIGTERM
und 30 Sekunden später das SignalSIGKILL
. -
SageMaker AI verwendet die Containerdefinition, die Sie in Ihrer
CreateModel
Anfrage angegeben haben, um Umgebungsvariablen und den DNS Hostnamen für den Container wie folgt festzulegen:-
Es legt Umgebungsvariablen mithilfe der
ContainerDefinition.Environment
string-to-string Map fest. -
Es legt den DNS Hostnamen mit dem
ContainerDefinition.ContainerHostname
fest.
-
-
Wenn Sie GPU Geräte für Modellinferenzen verwenden möchten (indem Sie in Ihrer
CreateEndpointConfig
Anfrage GPU basierte ML-Compute-Instanzen angeben), stellen Sie sicher, dass Ihre Container kompatibel sindnvidia-docker
. Bündeln Sie keine NVIDIA Treiber mit dem Image. Weitere Informationen zu finden Sie unternvidia-docker
NVIDIA/nvidia-docker. -
Sie können den
tini
Initialisierer nicht als Einstiegspunkt in SageMaker AI-Containern verwenden, da er durch die Argumente und verwirrt wird.train
serve
Wie SageMaker KI Ihre Modellartefakte lädt
In Ihrer CreateModel
APIAnfrage können Sie entweder den S3DataSource
Parameter ModelDataUrl
oder verwenden, um den S3-Speicherort zu identifizieren, an dem Modellartefakte gespeichert sind. SageMaker AI kopiert Ihre Modellartefakte vom S3-Speicherort in das /opt/ml/model
Verzeichnis, sodass sie von Ihrem Inferenzcode verwendet werden können. Ihr Container hat schreibgeschützten Zugriff auf /opt/ml/model
. Schreiben Sie nicht in dieses Verzeichnis.
Die ModelDataUrl
muss auf eine TAR.GZ-Datei zeigen. Andernfalls wird SageMaker AI die Datei nicht herunterladen.
Wenn Sie Ihr Modell in SageMaker KI trainiert haben, werden die Modellartefakte als eine einzige komprimierte TAR-Datei in Amazon S3 gespeichert. Wenn Sie Ihr Modell außerhalb von SageMaker KI trainiert haben, müssen Sie diese einzelne komprimierte TAR-Datei erstellen und an einem S3-Speicherort speichern. SageMaker AI dekomprimiert dieses into /opt/ml/model Tar-Dateiverzeichnis, bevor Ihr Container gestartet wird.
Wir empfehlen, für die Bereitstellung großer Modelle Bereitstellung unkomprimierter Modelle zu befolgen.
So sollte Ihr Container auf Inferenzanforderungen reagieren
Um Rückschlüsse zu ziehen, sendet die Client-Anwendung eine POST Anfrage an den SageMaker AI-Endpunkt. SageMaker AI leitet die Anfrage an den Container weiter und gibt das Inferenzergebnis vom Container an den Client zurück.
Weitere Informationen zu den Inferenzanfragen, die Ihr Container erhält, finden Sie in den folgenden Aktionen in der Amazon SageMaker API AI-Referenz:
Anforderungen für Inferenzcontainer
Um auf Inferenzanfragen zu antworten, muss Ihr Container die folgenden Anforderungen erfüllen:
-
SageMaker AI entfernt alle
POST
Header außer denen, die von unterstützt werden.InvokeEndpoint
SageMaker KI fügt möglicherweise zusätzliche Header hinzu. Inferenzcontainer müssen diese zusätzlichen Header einfach ignorieren können. -
Um Inferenzanfragen zu erhalten, muss der Container über einen Webserver verfügen, der auf Port 8080 lauscht, und er muss
POST
-Anfragen an die Endpunkte/invocations
und/ping
akzeptieren. -
Ein Containermodell des Kunden muss Socket-Verbindungsanfragen innerhalb von 250 ms akzeptieren.
-
Die Modellcontainer eines Kunden müssen innerhalb von 60 Sekunden auf Anforderungen reagieren. Das Modell selbst kann eine maximale Bearbeitungszeit von 60 Sekunden haben, bevor es auf die
/invocations
antwortet. Wenn Ihr Modell eine Verarbeitungszeit von 50 bis 60 Sekunden benötigt, sollte das SDK Socket-Timeout auf 70 Sekunden eingestellt werden.
Beispiel Aufruf-Funktionen
Die folgenden Beispiele zeigen, wie der Code in Ihrem Container Inferenzanfragen verarbeiten kann. Diese Beispiele behandeln Anfragen, die Client-Anwendungen mithilfe der InvokeEndpoint Aktion senden.
Beispiel Aufruffunktionen für Streaming-Anfragen
Die folgenden Beispiele zeigen, wie der Code in Ihrem Inferenzcontainer Streaming-Inferenzanfragen verarbeiten kann. Diese Beispiele behandeln Anfragen, die Client-Anwendungen mithilfe der InvokeEndpointWithResponseStream Aktion senden.
Wenn ein Container eine Streaming-Inferenzanforderung verarbeitet, gibt er die Inferenz des Modells inkrementell als eine Reihe von Teilen zurück, während das Modell sie generiert. Client-Anwendungen erhalten sofort Antworten, wenn sie verfügbar sind. Sie müssen nicht warten, bis das Modell die gesamte Antwort generiert hat. Sie können Streaming implementieren, um schnelle interaktive Erlebnisse wie Chatbots, virtuelle Assistenten und Musikgeneratoren zu unterstützen.
So sollte Ihr Container auf Zustandsprüfungsanforderungen (Ping-Anforderungen) reagieren
SageMaker KI startet in den folgenden Situationen neue Inferenzcontainer:
-
Beantworten von
CreateEndpoint
UpdateEndpoint
, und AnrufenUpdateEndpointWeightsAndCapacities
API -
Ausführen von Sicherheits-Patching
-
Ersetzen fehlerhafter Instances
Kurz nach dem Start des Containers beginnt SageMaker KI, regelmäßig GET Anfragen an den /ping
Endpunkt zu senden.
Die einfachste Anforderung an den Container besteht darin, mit einem Statuscode HTTP 200 und einem leeren Text zu antworten. Dies zeigt SageMaker AI an, dass der Container bereit ist, Inferenzanfragen am /invocations
Endpunkt anzunehmen.
Wenn der Container die Integritätsprüfungen nicht zu bestehen beginnt, indem er in den 8 Minuten nach dem Start durchweg mit 200 Sekunden antwortet, schlägt der Start der neuen Instance fehl. Dies führt CreateEndpoint
zu einem Fehlschlag und der Endpunkt befindet sich in einem ausgefallenen Zustand. Das von angeforderte Update UpdateEndpoint
ist nicht abgeschlossen, Sicherheitspatches wurden nicht angewendet und fehlerhafte Instanzen wurden nicht ersetzt.
Die Mindestgrenze besteht darin, dass der Container statische 200 zurückgibt, ein Containerentwickler kann diese Funktionalität jedoch nutzen, um umfassendere Prüfungen durchzuführen. Das Anforderungstimeout bei /ping
-Versuchen beträgt 2 Sekunden.