Benutzerdefinierter Inferenzcode mit Stapeltransformation - Amazon SageMaker AI

Benutzerdefinierter Inferenzcode mit Stapeltransformation

Dieser Abschnitt erklärt, wie Amazon SageMaker AI mit einem Docker-Container 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.

So führt SageMaker AI Ihr Inferenz-Image aus

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:

  • Bei Batch-Transformationen ruft SageMaker AI das Modell in Ihrem Namen auf. SageMaker AI führt den Container wie folgt aus:

    docker run image serve

    Die 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ören CSV, JSON, JSON Lines, TFRecord und RecordIO.

    SageMaker AI überschreibt die standardmäßigen CMD-Anweisungen in einem Container, indem er das Argument serve hinter dem Image-Namen angibt. Das serve-Argument überschreibt Argumente, die Sie mit dem CMD-Befehl in der Dockerfile bereitstellen.

     

  • Es wird empfohlen, das exec-Formular der ENTRYPOINT-Anleitung zu verwenden:

    ENTRYPOINT ["executable", "param1", "param2"]

    Zum Beispiel:

    ENTRYPOINT ["python", "k_means_inference.py"]

     

  • SageMaker AI setzt die in CreateModel und CreateTransformJob angegebenen Umgebungsvariablen in Ihrem Container fest. Zusätzlich werden die folgenden Umgebungsvariablen ausgefüllt:

    • SAGEMAKER_BATCH wird auf true gesetzt, wenn der Container Batch-Transformationen durchführt.

    • SAGEMAKER_MAX_PAYLOAD_IN_MB wird auf die größte Nutzlast gesetzt, die über HTTP an den Container gesendet wird.

    • SAGEMAKER_BATCH_STRATEGY wird auf SINGLE_RECORD gesetzt, wenn der Container einen einzigen Datensatz pro Aufruf erhält, und auf MULTI_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 planen, GPU-Geräte für Modellinferenzen zu verwenden (durch Angabe GPU-basierter ML-Datenverarbeitungs-Instances in Ihrer CreateTransformJob-Anforderung), stellen Sie sicher, dass Ihre Container nvidia-docker-kompatibel sind. Bündeln Sie NVIDIA-Treiber nicht mit dem Abbild. Mehr Informationen über nvidia-docker finden Sie unter NVIDIA/nvidia-docker.

     

  • Sie können den init-Initialisierer nicht als Eintrittspunkt in SageMaker-AI-Containern verwenden, da er durch die Argumente train und serve verwirrt wird.

So lädt SageMaker AI Ihre Modellartefakte

In einer CreateModel-Anforderung enthalten Containerdefinitionen den ModelDataUrl-Parameter, der den Speicherort in Amazon S3 angibt, an dem die Modellartefakte gespeichert werden. Wenn Sie SageMaker AI zum Ausführen von Inferenzen verwenden, verwendet es diese Informationen, um zu bestimmen, von wo aus 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. Andernfalls kann SageMaker AI die Datei nicht herunterladen. Wenn Sie ein Modell in SageMaker AI trainieren, speichert es die Artefakte als eine einzige komprimierte TAR-Datei in Amazon S3. Wenn Sie ein Modell in einem anderen Framework trainieren, müssen Sie die Modellartefakte in Amazon S3 als komprimierte TAR-Datei speichern. SageMaker AI dekomprimiert diese TAR-Datei und speichert sie im Verzeichnis /opt/ml/model im Container, bevor der Stapelumwandlungsauftrag gestartet wird.

So bearbeiten Container Anforderungen

Für Container muss ein Webserver implementiert werden, der auf Aufrufe und Ping-Anfragen auf Port 8080 reagiert. Für Batch-Transformationen haben Sie die Möglichkeit, Algorithmen zur Implementierung von Ausführungsparameteranfragen einzustellen, um SageMaker AI eine dynamische Laufzeitkonfiguration zur Verfügung zu stellen. SageMaker AI verwendet die folgenden Endpunkte:

  • ping – Wird verwendet, um den Zustand des Containers regelmäßig zu überprüfen. SageMaker AI wartet auf einen HTTP-200-Statuscode und einen leeren Body für eine erfolgreiche Ping-Anfrage, bevor er eine Aufrufanfrage sendet. 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. Basierend auf dem für einen Container verfügbaren Speicher und den CPUs wählt der Algorithmus die entsprechenden MaxConcurrentTransforms-, – BatchStrategyund MaxPayloadInMB-Werte für den Auftrag aus.

Vor dem Aufruf der Aufforderungsanfrage versucht SageMaker AI, die Ausführungsparameteranfrage aufzurufen. Wenn Sie einen Stapelumwandlungsauftrag erstellen, können Sie Werte für die Parameter MaxConcurrentTransforms, BatchStrategy und MaxPayloadInMB angeben. SageMaker AI bestimmt die Werte für diese Parameter anhand dieser Rangfolge:

  1. Die Parameterwerte, die Sie beim Erstellen der CreateTransformJob-Anforderung angeben.

  2. Die Werte, die der Modell-Container zurückgibt, wenn SageMaker AI den Endpunkt Ausführungsparameter aufruft>

  3. Die Standardparameterwerte sind in der folgenden Tabelle aufgeführt.

    Parameter Standardwerte
    MaxConcurrentTransforms

    1

    BatchStrategy

    MULTI_RECORD

    MaxPayloadInMB

    6

Die Antwort auf eine GET-Ausführungsparameter-Anforderung ist ein JSON-Objekt mit Schlüsseln für die MaxConcurrentTransforms-, – BatchStrategyund MaxPayloadInMB-Parameter. 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 Inferenzen zu erhalten, sendet Amazon SageMaker AI eine POST-Anforderung an den Inferenz-Container. Der POST-Anforderungstext enthält Daten aus Amazon S3. Amazon SageMaker AI übergibt die Anfrage an den Container und gibt das Ableitungsergebnis aus dem Container zurück, wobei die Daten der Antwort in Amazon S3 gespeichert werden.

Zum Empfangen von Inferenzanforderungen muss der Container über einen Webserver verfügen, der den Port 8080 überwacht, und muss POST-Anforderungen an den /invocations-Endpunkt akzeptieren. 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 für den Container besteht darin, mit einem HTTP 200-Statuscode ohne Text zu antworten. Dies zeigt SageMaker AI an, 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.