Erstellen von Modellpaket-Images - AWS Marketplace

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.

Erstellen von Modellpaket-Images

Ein SageMaker Amazon-Modellpaket ist ein vortrainiertes Modell, das Vorhersagen trifft und keine weitere Schulung durch den Käufer erfordert. Sie können ein Modellpaket in erstellen SageMaker und Ihr Machine-Learning-Produkt dort veröffentlichen AWS Marketplace. In den folgenden Abschnitten erfahren Sie, wie Sie ein Modellpaket für erstellen AWS Marketplace. Dazu gehören das Erstellen des Container-Images sowie das lokale Erstellen und Testen des Images.

Übersicht

Ein Modellpaket umfasst die folgenden Komponenten:

Anmerkung

Modellartefakte sind Dateien, die Ihr Modell verwendet, um Vorhersagen zu treffen. Sie sind in der Regel das Ergebnis Ihrer eigenen Trainingsprozesse. Bei Artefakten kann es sich um jeden Dateityp handeln, der für Ihr Modell benötigt wird, wobei jedoch die Komprimierung von use.tar.gz erforderlich ist. Modellpakete können entweder in Ihrem Inferenzbild gebündelt oder separat bei Amazon gespeichert werden. SageMaker Die in Amazon S3 gespeicherten Modellartefakte werden zur Laufzeit in den Inferenzcontainer geladen. Bei der Veröffentlichung Ihres Modellpakets werden diese Artefakte veröffentlicht und in AWS Marketplace eigenen Amazon S3 S3-Buckets gespeichert, auf die der Käufer nicht direkt zugreifen kann.

Tipp

Wenn Ihr Inferenzmodell mit einem Deep-Learning-Framework wie Gluon, Keras,,, TensorFlow -Lite oder ONNX erstellt wurde MXNet PyTorch TensorFlow, sollten Sie Amazon Neo in Betracht ziehen. SageMaker Neo kann automatisch Inferenzmodelle optimieren, die für eine bestimmte Familie von Cloud-Instanztypen wieml.c4, und andere eingesetzt werden. ml.p2 Weitere Informationen finden Sie unter Optimieren der Modellleistung mithilfe von Neo im Amazon SageMaker Developer Guide.

Das folgende Diagramm zeigt den Arbeitsablauf für die Veröffentlichung und Verwendung von Modellpaketprodukten.

Diagramm, das zeigt, wie ein Verkäufer ein Bild eines Modellpakets erstellt und wie ein Käufer es verwendet.

Der Arbeitsablauf zum Erstellen eines SageMaker Modellpakets für AWS Marketplace umfasst die folgenden Schritte:

  1. Der Verkäufer erstellt ein Inferenz-Image (kein Netzwerkzugriff bei der Bereitstellung) und überträgt es an die ECR Amazon-Registrierung.

    Die Modellartefakte können entweder im Inferenz-Image gebündelt oder separat in S3 gespeichert werden.

  2. Der Verkäufer erstellt dann eine Modellpaketressource in Amazon SageMaker und veröffentlicht sein ML-Produkt auf AWS Marketplace.

  3. Der Käufer abonniert das ML-Produkt und stellt das Modell bereit.

    Anmerkung

    Das Modell kann als Endpunkt für Echtzeit-Inferenzen oder als Batch-Job eingesetzt werden, um Vorhersagen für einen gesamten Datensatz auf einmal zu erhalten. Weitere Informationen finden Sie unter Bereitstellen von Modellen für Inferenz.

  4. SageMaker führt das Inferenz-Image aus. Alle vom Verkäufer bereitgestellten Modellartefakte, die nicht im Inferenz-Image enthalten sind, werden zur Laufzeit dynamisch geladen.

  5. SageMaker leitet die Inferenzdaten des Käufers mithilfe der HTTP Endpunkte des Containers an den Container weiter und gibt die Prognoseergebnisse zurück.

Erstellen Sie ein Inferenzbild für Modellpakete

Dieser Abschnitt enthält eine exemplarische Vorgehensweise zum Verpacken Ihres Inferenzcodes in ein Inferenzbild für Ihr Modellpaketprodukt. Der Prozess besteht aus den folgenden Schritten:

Das Inferenz-Image ist ein Docker-Image, das Ihre Inferenzlogik enthält. Der Container stellt zur Laufzeit HTTP Endpunkte zur Verfügung, damit Daten zu und von SageMaker Ihrem Container übergeben werden können.

Anmerkung

Das Folgende ist nur ein Beispiel für einen Verpackungscode für ein Inferenzbild. Weitere Informationen finden Sie unter Docker-Container verwenden mit SageMaker und in den AWS Marketplace SageMaker Beispielen unter. GitHub

Das folgende Beispiel verwendet der Einfachheit halber einen Webdienst, Flask, und gilt nicht als produktionsbereit.

Schritt 1: Erstellen Sie das Container-Image

Damit das Inferenz-Image kompatibel ist SageMaker, muss das Docker-Image Endpunkte verfügbar machen. HTTP Leitet Käufereingaben zur Inferenz SageMaker an den Endpunkt des Containers weiter, während Ihr Container läuft. HTTP Die Inferenzergebnisse werden im Hauptteil der HTTP Antwort zurückgegeben.

In der folgenden exemplarischen Vorgehensweise wird Docker CLI in einer Entwicklungsumgebung verwendet, die eine Linux-Ubuntu-Distribution verwendet.

Erstellen Sie das Webserver-Skript

In diesem Beispiel wird ein Python-Server namens Flask verwendet, aber Sie können jeden Webserver verwenden, der für Ihr Framework funktioniert.

Anmerkung

Flask wird hier der Einfachheit halber verwendet. Er gilt nicht als produktionsreifer Webserver.

Erstellen Sie ein Flask-Webserver-Skript, das die beiden HTTP Endpunkte auf dem verwendeten TCP Port 8080 bedient. SageMaker Im Folgenden sind die beiden erwarteten Endpunkte aufgeführt:

  • /ping— sendet SageMaker HTTP GET Anfragen an diesen Endpunkt, um zu überprüfen, ob Ihr Container bereit ist. Wenn Ihr Container bereit ist, antwortet er auf HTTP GET Anfragen an diesem Endpunkt mit einem HTTP 200-Antwortcode.

  • /invocations— SageMaker stellt HTTP POST Anfragen zur Inferenz an diesen Endpunkt. Die Eingabedaten für die Inferenz werden im Hauptteil der Anfrage gesendet. Der vom Benutzer angegebene Inhaltstyp wird im Header übergeben. HTTP Der Hauptteil der Antwort ist die Inferenzausgabe. Einzelheiten zu Timeouts finden Sie unter. Anforderungen und bewährte Verfahren für die Entwicklung von Produkten für maschinelles Lernen

./web_app_serve.py

# Import modules import json import re from flask import Flask from flask import request app = Flask(__name__) # Create a path for health checks @app.route("/ping") def endpoint_ping(): return ""   # Create a path for inference @app.route("/invocations", methods=["POST"]) def endpoint_invocations():      # Read the input   input_str = request.get_data().decode("utf8")      # Add your inference code between these comments.   #   #   #   #   #   # Add your inference code above this comment.      # Return a response with a prediction   response = {"prediction":"a","text":input_str}   return json.dumps(response)

Im vorherigen Beispiel gibt es keine tatsächliche Inferenzlogik. Fügen Sie für Ihr eigentliches Inferenzbild die Inferenzlogik zur Web-App hinzu, sodass sie die Eingabe verarbeitet und die tatsächliche Vorhersage zurückgibt.

Ihr Inferenzbild muss alle erforderlichen Abhängigkeiten enthalten, da es keinen Internetzugang haben wird und auch keine davon aufrufen kann. AWS-Services

Anmerkung

Derselbe Code wird sowohl für Echtzeit- als auch für Batch-Inferenzen aufgerufen

Erstellen Sie das Skript für den Containerlauf

Erstellen Sie ein Skript mit dem Namenserve, das SageMaker ausgeführt wird, wenn es das Docker-Container-Image ausführt. Das folgende Skript startet den HTTP Webserver.

./serve

#!/bin/bash # Run flask server on port 8080 for SageMaker flask run --host 0.0.0.0 --port 8080

Erstellen der Dockerfile

Erstellen Sie Dockerfile in Ihrem Build-Kontext eine. In diesem Beispiel wird Ubuntu 18.04 verwendet, aber Sie können mit jedem Basis-Image beginnen, das für Ihr Framework funktioniert.

./Dockerfile

FROM ubuntu:18.04 # Specify encoding ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 # Install python-pip RUN apt-get update \ && apt-get install -y python3.6 python3-pip \ && ln -s /usr/bin/python3.6 /usr/bin/python \ && ln -s /usr/bin/pip3 /usr/bin/pip; # Install flask server RUN pip install -U Flask; # Add a web server script to the image # Set an environment to tell flask the script to run COPY /web_app_serve.py /web_app_serve.py ENV FLASK_APP=/web_app_serve.py # Add a script that Amazon SageMaker will run # Set run permissions # Prepend program directory to $PATH COPY /serve /opt/program/serve RUN chmod 755 /opt/program/serve ENV PATH=/opt/program:${PATH}

Das Dockerfile fügt die beiden zuvor erstellten Skripte zum Image hinzu. Das Verzeichnis des serve Skripts wird dem hinzugefügt, PATH sodass es ausgeführt werden kann, wenn der Container ausgeführt wird.

Package oder laden Sie die Modellartefakte hoch

Es gibt zwei Möglichkeiten, die Modellartefakte vom Trainieren des Modells bis zum Inferenzbild bereitzustellen:

  • Statisch zusammen mit dem Inferenzbild verpackt.

  • Wird zur Laufzeit dynamisch geladen. Da es dynamisch geladen wird, können Sie dasselbe Image für die Paketierung verschiedener Machine-Learning-Modelle verwenden.

Wenn Sie Ihre Modellartefakte zusammen mit dem Inferenzbild verpacken möchten, schließen Sie die Artefakte in das Dockerfile ein.

Wenn Sie Ihre Modellartefakte dynamisch laden möchten, speichern Sie diese Artefakte separat in einer komprimierten Datei (.tar.gz) in Amazon S3. Geben Sie bei der Erstellung des Modellpakets den Speicherort der komprimierten Datei an. /opt/ml/model/ Beim Ausführen Ihres Containers wird der Inhalt SageMaker extrahiert und in das Container-Verzeichnis kopiert. Bei der Veröffentlichung Ihres Modellpakets werden diese Artefakte veröffentlicht und in AWS Marketplace eigenen Amazon S3 S3-Buckets gespeichert, auf die der Käufer nicht direkt zugreifen kann.

Schritt 2: Erstellen und testen Sie das Image lokal

Im Build-Kontext sind jetzt die folgenden Dateien vorhanden:

  • ./Dockerfile

  • ./web_app_serve.py

  • ./serve

  • Ihre Inferenzlogik und (optionale) Abhängigkeiten

Erstellen Sie als Nächstes das Container-Image, führen Sie es aus und testen Sie es.

Erstellen Sie das Image

Führen Sie den Docker-Befehl im Build-Kontext aus, um das Image zu erstellen und zu taggen. In diesem Beispiel wird das Tag my-inference-image verwendet.

sudo docker build --tag my-inference-image ./

Nachdem Sie diesen Docker-Befehl ausgeführt haben, um das Image zu erstellen, sollten Sie die Ausgabe sehen, während Docker das Image auf der Grundlage jeder Zeile in Ihrem erstellt. Dockerfile Wenn der Vorgang abgeschlossen ist, sollten Sie etwas Ähnliches wie das Folgende sehen.

Successfully built abcdef123456 Successfully tagged my-inference-image:latest

Lokales Ausführen von

Nachdem Ihr Build abgeschlossen ist, können Sie das Image lokal testen.

sudo docker run \   --rm \   --publish 8080:8080/tcp \   --detach \   --name my-inference-container \   my-inference-image \   serve

Im Folgenden finden Sie Einzelheiten zum Befehl:

  • --rm— Entfernt den Container automatisch, nachdem er gestoppt wurde.

  • --publish 8080:8080/tcp— Machen Sie Port 8080 verfügbar, um den Port zu simulieren, SageMaker an den HTTP Anfragen gesendet werden.

  • --detach— Führt den Container im Hintergrund aus.

  • --name my-inference-container— Geben Sie diesem laufenden Container einen Namen.

  • my-inference-image— Führt das erstellte Image aus.

  • serve— Führen Sie dasselbe Skript aus, das beim Ausführen des Containers SageMaker ausgeführt wird.

Nachdem Sie diesen Befehl ausgeführt haben, erstellt Docker einen Container aus dem von Ihnen erstellten Inferenz-Image und führt ihn im Hintergrund aus. Der Container führt das serve Skript aus, das Ihren Webserver zu Testzwecken startet.

Testen Sie den HTTP Ping-Endpunkt

Wenn Ihr Container SageMaker ausgeführt wird, pingt er regelmäßig den Endpunkt. Wenn der Endpunkt eine HTTP Antwort mit dem Statuscode 200 zurückgibt, signalisiert er ihm, SageMaker dass der Container für die Inferenz bereit ist. Sie können dies testen, indem Sie den folgenden Befehl ausführen, der den Endpunkt testet und den Antwortheader enthält.

curl --include http://127.0.0.1:8080/ping

Die Beispielausgabe sieht wie folgt aus.

HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 0 Server: MyServer/0.16.0 Python/3.6.8 Date: Mon, 21 Oct 2019 06:58:54 GMT

Testen Sie den Inferenzendpunkt HTTP

Wenn der Container anzeigt, dass er bereit ist, indem er einen Statuscode 200 an Ihren Ping SageMaker zurückgibt, leitet er die Inferenzdaten über eine POST Anfrage an den /invocations HTTP Endpunkt weiter. Testen Sie den Inferenzpunkt, indem Sie den folgenden Befehl ausführen.

curl \   --request POST \   --data "hello world" \   http://127.0.0.1:8080/invocations

Die Beispielausgabe sieht wie folgt aus.

{"prediction": "a", "text": "hello world"}

Da diese beiden HTTP Endpunkte funktionieren, ist das Inferenzbild jetzt kompatibel mit. SageMaker

Anmerkung

Das Modell Ihres Modellpaketprodukts kann auf zwei Arten bereitgestellt werden: in Echtzeit und im Batch-Modus. Verwendet in beiden Bereitstellungen dieselben SageMaker HTTP Endpunkte, während der Docker-Container ausgeführt wird.

Führen Sie den folgenden Befehl aus, um den Container zu beenden.

sudo docker container stop my-inference-container

Wenn Ihr Inferenz-Image fertig und getestet ist, können Sie damit Ihre Bilder in die Amazon Elastic Container Registry hochladen fortfahren.