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 Batch-Transformation
In diesem Abschnitt wird erklärt, wie Amazon mit einem Docker-Container SageMaker interagiert, der Ihren eigenen Inferenzcode für die Batch-Transformation ausführt. Verwenden Sie diese Informationen zum Schreiben von Inferenzcode und zum Erstellen eines Docker-Images.
Themen
Wie SageMaker läuft Ihr Inferenz-Image
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:
-
Ruft bei Batch-Transformationen das Modell SageMaker in Ihrem Namen auf. SageMaker führt den Container aus als:
docker run
image
serveDie Eingabe für Batch-Transformationen muss ein Format haben, das in kleinere Dateien aufgeteilt werden kann, um sie parallel zu verarbeiten. Zu diesen Formaten gehörenCSV, JSON
, JSONLines TFRecord und RecordIO . SageMaker ü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. -
Es wird empfohlen, das
exec
-Formular derENTRYPOINT
-Anleitung zu verwenden:ENTRYPOINT ["executable", "param1", "param2"]
Beispielsweise:
ENTRYPOINT ["python", "k_means_inference.py"]
-
SageMaker legt Umgebungsvariablen fest, die in
CreateModel
undCreateTransformJob
auf Ihrem Container angegeben sind. Zusätzlich werden die folgenden Umgebungsvariablen ausgefüllt:-
SAGEMAKER_BATCH
wird auftrue
gesetzt, wenn der Container Batch-Transformationen durchführt. -
SAGEMAKER_MAX_PAYLOAD_IN_MB
ist auf die größte Nutzlast gesetzt, die über HTTP an den Container gesendet wird. -
SAGEMAKER_BATCH_STRATEGY
wird aufSINGLE_RECORD
gesetzt, wenn der Container einen einzigen Datensatz pro Aufruf erhält, und aufMULTI_RECORD
, wenn der Container so viele Datensätze erhält, wie in die Nutzlast passen. -
SAGEMAKER_MAX_CONCURRENT_TRANSFORMS
ist auf die maximale Anzahl von/invocations
-Anfragen festgelegt, die gleichzeitig geöffnet werden können.
Anmerkung
Die letzten drei Umgebungsvariablen stammen aus dem API Aufruf durch den Benutzer. Wenn der Benutzer hierfür keine Werte festlegt, werden sie nicht übergeben. In diesem Fall werden entweder die Standardwerte oder die vom Algorithmus (als Antwort auf
/execution-parameters
) angeforderten Werte verwendet. -
-
Wenn Sie GPU Geräte für Modellinferenzen verwenden möchten (indem Sie in Ihrer
CreateTransformJob
Anfrage GPU basierte ML-Compute-Instances angeben), stellen Sie sicher, dass Ihre Container nvidia-Docker-kompatibel sind. Bündeln Sie keine Treiber mit dem Image. NVIDIA Weitere Informationen zu nvidia-docker finden Sie unter /nvidia-docker. NVIDIA -
Sie können den
init
Initialisierer nicht als Einstiegspunkt in Containern verwenden, da er durch die Argumente train und serve verwirrt wird. SageMaker
Wie werden Ihre SageMaker Modellartefakte geladen
In einer CreateModel
-Anforderung enthalten Containerdefinitionen den ModelDataUrl
-Parameter, der den Speicherort in Amazon S3 angibt, an dem die Modellartefakte gespeichert werden. Wenn Sie Rückschlüsse SageMaker ziehen, verwendet es diese Informationen, um zu bestimmen, von wo die Modellartefakte kopiert werden sollen. Es kopiert die Artefakte für die Verwendung durch Ihren Inferenzcode in das /opt/ml/model
-Verzeichnis im Docker-Container.
Der ModelDataUrl
-Parameter muss auf eine tar.gz-Datei verweisen. Ansonsten kann SageMaker die Datei nicht herunterladen. Wenn Sie ein Modell eintrainieren SageMaker, werden die Artefakte als einzelne komprimierte TAR-Datei in Amazon S3 gespeichert. Wenn Sie ein Modell in einem anderen Framework trainieren, müssen Sie die Modellartefakte in Amazon S3 als komprimierte TAR-Datei speichern. SageMaker dekomprimiert diese TAR-Datei und speichert sie im /opt/ml/model
Verzeichnis im Container, bevor der Batch-Transformationsjob gestartet wird.
So bearbeiten Container Anforderungen
Für Container muss ein Webserver implementiert werden, der auf Aufrufe und Ping-Anfragen auf Port 8080 reagiert. Bei Batch-Transformationen haben Sie die Möglichkeit, Algorithmen zur Implementierung von Ausführungsparameteranforderungen festzulegen, um eine dynamische Laufzeitkonfiguration bereitzustellen. SageMaker SageMakerverwendet die folgenden Endpunkte:
-
ping
— Wird verwendet, um den Zustand des Containers regelmäßig zu überprüfen. SageMaker wartet auf einen HTTP200
Statuscode und einen leeren Text auf eine erfolgreiche Ping-Anfrage, bevor eine Aufrufanforderung gesendet wird. Sie können eine Ping-Anfrage senden, um ein Modell in den Speicher zu laden und Interferenzen zu erzeugen, wenn Aufrufanforderungen gesendet werden. -
(Optional)
execution-parameters
– Ermöglicht es dem Algorithmus, die optimalen Abstimmungsparameter für einen Auftrag zur Laufzeit bereitzustellen. Auf der Grundlage des für einen Container CPUs verfügbaren Speichers wählt der Algorithmus die geeignetenMaxConcurrentTransforms
BatchStrategy
, undMaxPayloadInMB
Werte für den Job aus.
SageMaker Versucht vor dem Aufrufen der Aufrufanforderung, die Ausführungsparameter-Anfrage aufzurufen. Wenn Sie einen Batch-Transformationsauftrag erstellen, können Sie Werte für die MaxConcurrentTransforms
Parameter, und angeben. BatchStrategy
MaxPayloadInMB
SageMaker bestimmt die Werte für diese Parameter anhand dieser Rangfolge:
-
Die Parameterwerte, die Sie beim Erstellen der
CreateTransformJob
-Anforderung angeben. -
Die Werte, die der Modellcontainer zurückgibt, wenn er den Endpunkt mit den Ausführungsparametern SageMaker aufruft
-
Die Standardparameterwerte sind in der folgenden Tabelle aufgeführt.
Parameter Standardwerte MaxConcurrentTransforms
1
BatchStrategy
MULTI_RECORD
MaxPayloadInMB
6
Die Antwort auf eine Anfrage nach GET
Ausführungsparametern ist ein JSON Objekt mit Schlüsseln für, und Parameter. MaxConcurrentTransforms
BatchStrategy
MaxPayloadInMB
Dies ist ein Beispiel für eine gültige Antwort:
{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }
So sollte Ihr Container auf Inferenzanforderungen reagieren
Um Rückschlüsse zu erhalten, SageMaker sendet Amazon eine POST Anfrage an den Inferenzcontainer. Der POST Anfragetext enthält Daten von Amazon S3. Amazon SageMaker leitet die Anfrage an den Container weiter und gibt das Inferenzergebnis aus dem Container zurück, wobei die Daten aus der Antwort in Amazon S3 gespeichert werden.
Um Inferenzanfragen zu empfangen, muss der Container über einen Webserver verfügen, der auf Port 8080 wartet und POST Anfragen an den Endpunkt annehmen muss. /invocations
Das Timeout für Inferenzanforderungen und die maximale Anzahl an Wiederholungen können über ModelClientConfig
konfiguriert werden.
So sollte Ihr Container auf Zustandsprüfungsanforderungen (Ping-Anforderungen) reagieren
Die einfachste Anforderung an den Container besteht darin, mit einem Statuscode HTTP 200 und einem leeren Text zu antworten. Dies bedeutet, SageMaker dass der Container bereit ist, Inferenzanfragen am /invocations
Endpunkt anzunehmen.
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.