In dieser Anleitung wird gezeigt, wie Sie mit einem benutzerdefinierten Container ein PyTorch-Modell für maschinelles Lernen (ML) für Onlinevorhersagen bereitstellen.
Sie stellen dabei einen Container bereit, in dem das TorchServe-Tool von PyTorch ausgeführt wird, um Vorhersagen aus einem von TorchServe bereitgestellten Ziffernerkennungsmodell bereitzustellen, das für das MNIST-Dataset vortrainiert wurden. Anschließend können Sie mit AI Platform Prediction Bilder von Ziffern klassifizieren.
Hinweis
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Artifact Registry API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Artifact Registry API APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Für diese Anleitung empfehlen wir die Verwendung von Cloud Shell zur Interaktion mit Google Cloud. Wenn Sie anstelle von Cloud Shell eine andere Bash-Shell nutzen möchten, führen Sie die folgende zusätzliche Konfiguration aus:
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Installieren Sie Docker gemäß der Dokumentation zu Artifact Registry.
Container-Image erstellen und per Push übertragen
Wenn Sie einen benutzerdefinierten Container verwenden möchten, müssen Sie ein Docker-Container-Image angeben, das die Anforderungen für benutzerdefinierte Container erfüllt. In diesem Abschnitt wird gezeigt, wie Sie das Container-Image erstellen und per Push nach Artifact Registry übertragen.
Modellartefakte herunterladen
Modellartefakte sind Dateien, die vom ML-Training erstellt werden und zum Bereitstellen von Vorhersagen verwendet werden können. Sie enthalten mindestens die Struktur und Gewichtungen Ihres trainierten ML-Modells. Das Format der Modellartefakte hängt vom ML-Framework ab, das Sie für das Training nutzen.
In dieser Anleitung erstellen Sie keine neuen Trainingsmodellartefakte, sondern laden Beispielmodellartefakte herunter, die von TorchServe bereitgestellt werden.
Führen Sie die folgenden Befehle in der Shell aus, um das TorchServe-Repository zu klonen und in das Verzeichnis mit den Modellartefakten zu wechseln:
git clone https://github.com/pytorch/serve.git \
--branch=v0.3.0 \
--depth=1
cd serve/examples/image_classifier/mnist
Dieses Verzeichnis enthält drei wichtige Dateien, die Sie in Ihr Container-Image einbinden müssen:
mnist.py
definiert die Struktur des trainierten neuronalen Netzwerks.mnist_cnn.pt
: enthält einenstate_dict
mit Featuregewichtungen und anderen Ausgaben aus dem Trainingmnist_handler.py
erweitert die Verarbeitung von Vorhersageanfragen von TorchServe.
Artifact Registry-Repository erstellen
Erstellen Sie ein Artifact Registry-Repository, um darin das Container-Image zu speichern, das Sie im nächsten Abschnitt erstellen. Führen Sie in Ihrem Shell-Fenster den folgenden Befehl aus:
gcloud beta artifacts repositories create getting-started-pytorch \
--repository-format=docker \
--location=REGION
Ersetzen Sie dabei REGION durch die Region, in der durch Artifact Registry das Container-Image gespeichert werden soll. Später müssen Sie eine AI Platform Prediction-Modellressource auf einem regionalen Endpunkt erstellen, der dieser Region entspricht. Wählen Sie also eine Region aus, in der AI Platform Prediction einen regionalen Endpunkt hat. Beispiel: us-central1
.
Nach Abschluss des Vorgangs gibt dieser Befehl Folgendes aus:
Created repository [getting-started-pytorch].
Container-Image erstellen
TorchServe stellt ein Dockerfile zum Erstellen eines Container-Images zur Verfügung, mit dem TorchServe ausgeführt wird. Statt mit diesem Dockerfile alle Abhängigkeiten von TorchServe zu installieren, können Sie den Build-Vorgang auch beschleunigen. Dazu leiten Sie Ihr Container-Image von einem der TorchServe-Images ab, die das TorchServe-Team per Push an Docker Hub übertragen hat.
Erstellen Sie im Verzeichnis mit den Modellartefakten ein neues Dockerfile. Führen Sie dazu den folgenden Befehl in der Shell aus:
cat > Dockerfile <<END FROM pytorch/torchserve:0.3.0-cpu COPY mnist.py mnist_cnn.pt mnist_handler.py /home/model-server/ USER root RUN printf "\nservice_envelope=json" >> /home/model-server/config.properties USER model-server RUN torch-model-archiver \ --model-name=mnist \ --version=1.0 \ --model-file=/home/model-server/mnist.py \ --serialized-file=/home/model-server/mnist_cnn.pt \ --handler=/home/model-server/mnist_handler.py \ --export-path=/home/model-server/model-store CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"] END
Diese Docker-Anweisungen führen die folgenden Aktionen aus:
Die Anweisung
FROM
leitet das aktuelle Container-Image aus einem vorhandenen TorchServe-Image ab.Mit der
COPY
-Anweisung werden die Modellartefakte und der Vorhersage-Handler aus Ihrem lokalen Verzeichnis in das Verzeichnis/home/model-server/
des Container-Images kopiert.Mit der ersten
RUN
-Anweisung wird die Konfigurationsdatei aus dem übergeordneten Image so bearbeitet, dass sie das bevorzugte Eingabeformat von AI Platform Prediction für Vorhersagen unterstützt.Insbesondere wird mit dieser Anweisung TorchServe so konfiguriert, dass für Vorhersageanfragen ein JSON-Dienstpaket erwartet wird.
Zum Bearbeiten dieser Konfigurationsdatei ist eine Berechtigung erforderlich, die der
model-server
-Nutzer (das im übergeordneten Image erstellt wurde) nicht hat. In der Anleitung wird Docker angewiesen, alsroot
-Nutzer die Konfigurationsdatei zu bearbeiten und anschließend den Nutzermodel-server
wie nachfolgend beschrieben zu verwenden.Die zweite
RUN
-Anweisung verwendet den Torch-Modellarchiv, der bereits auf dem Container-Image installiert ist, um ein Modellarchiv aus den Dateien zu kopieren, die Sie in. Dieses Modellarchiv wird im Verzeichnis/home/model-server/model-store/
mit dem Dateinamenmnist.mar
gespeichert.Wenn Sie das Container-Image ändern möchten, um beispielsweise im Anfrage-Handler eine benutzerdefinierte Vorverarbeitung oder Nachverarbeitung auszuführen, können Sie mit zusätzlichen
RUN
-Anweisungen Abhängigkeiten installieren.Mit der
CMD
-Anweisung wird der HTTP-Server von TorchServe gestartet. Sie verweist auf die Konfigurationsdatei aus dem übergeordneten Image und ermöglicht die Bereitstellung für ein Modell mit dem Namenmnist
. Dieses Modell lädt die von derRUN
-Anweisung erstellte Dateimnist.mar
.Mit dieser Anweisung wird die
CMD
-Anweisung des übergeordneten Images überschrieben. Es muss unbedingt die AnweisungCMD
und nicht die AnweisungENTRYPOINT
überschrieben werden, da dasENTRYPOINT
-Skript des übergeordneten Images den inCMD
übergebenen Befehl ausführt. Damit wird eine zusätzliche Logik hinzugefügt, um zu verhindern, dass Docker beendet wird.
Führen Sie den folgenden Befehl in der Shell aus, um das Container-Image auf Basis des neuen Dockerfile zu erstellen und mit einem Namen zu versehen, der mit Ihrem Artifact Registry-Repository kompatibel ist:
docker build \ --tag=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \ .
Dabei gilt:
- REGION ist die Region Ihres Artifact Registry-Repositorys, wie in einem vorherigen Abschnitt festgelegt.
- PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
Die Ausführung des Befehls kann mehrere Minuten dauern.
Container lokal ausführen (optional)
Bevor Sie Ihr Container-Image per Push in Artifact Registry hochladen, um es mit AI Platform Prediction zu verwenden, können Sie es als Container in Ihrer lokalen Umgebung ausführen und so prüfen, ob der Server wie erwartet funktioniert:
Geben Sie den folgenden Befehl in der Shell ein, um das Container-Image lokal als Container auszuführen:
docker run -d -p 8080:8080 --name=local_mnist \ REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist
Ersetzen Sie Folgendes wie im vorherigen Abschnitt:
- REGION ist die Region Ihres Artifact Registry-Repositorys, wie in einem vorherigen Abschnitt festgelegt.
- PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
Mit diesem Befehl wird ein Container im getrennten Modus ausgeführt, wobei Port
8080
des Containers dem Port8080
der lokalen Umgebung zugeordnet wird. (Das Basis-Image, von dem das Container-Image abgeleitet wurde, konfiguriert TorchServe zur Verwendung von Port8080
.)Führen Sie den folgenden Befehl in der Shell aus, um dem Server des Containers eine Systemdiagnose zu senden:
curl localhost:8080/ping
Bei erfolgreicher Ausführung gibt der Server die folgende Antwort zurück:
{ "status": "Healthy" }
Führen Sie die folgenden Befehle in der Shell aus, um dem Server des Containers eine Vorhersageanfrage zu senden:
cat > instances.json <<END { "instances": [ { "data": { "b64": "$(base64 --wrap=0 test_data/3.png)" } } ] } END curl -X POST \ -H "Content-Type: application/json; charset=utf-8" \ -d @instances.json \ localhost:8080/predictions/mnist
Bei dieser Anfrage wird ein Test-Image des TorchServe-Beispiels verwendet.
Bei erfolgreicher Ausführung gibt der Server die folgende Vorhersage zurück:
{"predictions": [3]}
Führen Sie den folgenden Befehl in der Shell aus, um den Container zu beenden:
docker stop local_mnist
Container-Image per Push nach Artifact Registry übertragen
Konfigurieren Sie Docker für den Zugriff auf Artifact Registry. Übertragen Sie dann das Container-Image per Push in das Artifact Registry-Repository.
Führen Sie den folgenden Befehl in der Shell aus, um Ihrer lokalen Docker-Installation die Berechtigung zum Übertragen an Artifact Registry per Push in der gewählten Region zu erteilen:
gcloud auth configure-docker REGION-docker.pkg.dev
Ersetzen Sie dabei REGION durch die Region, in der Sie Ihr Repository in einem vorherigen Abschnitt erstellt haben.
Führen Sie den folgenden Befehl in der Shell aus, um das Container-Image per Push zu übertragen, das Sie gerade in Artifact Registry erstellt haben:
docker push REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist
Ersetzen Sie Folgendes wie im vorherigen Abschnitt:
- REGION ist die Region Ihres Artifact Registry-Repositorys, wie in einem vorherigen Abschnitt festgelegt.
- PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
Container bereitstellen
In diesem Abschnitt wird gezeigt, wie Sie in AI Platform Prediction ein Modell und eine Modellversion erstellen, mit denen Vorhersagen bereitgestellt werden. Die Modellversion führt dazu das Container-Image als Container aus.
Diese Anleitung bietet spezifische Konfigurationsoptionen, die Sie beim Erstellen Ihres Modells und der Modellversion verwenden können. Weitere Informationen zu den verschiedenen Konfigurationsoptionen finden Sie unter Modelle bereitstellen.
Modell erstellen
Führen Sie den folgenden Befehl in der Shell aus, um eine Modellressource zu erstellen:
gcloud beta ai-platform models create getting_started_pytorch \
--region=REGION \
--enable-logging \
--enable-console-logging
Ersetzen Sie dabei REGION durch die Region, in der Sie das Artifact Registry-Repository in einem vorherigen Abschnitt erstellt haben.
Modellversionen erstellen
Führen Sie den folgenden Befehl in der Shell aus, um eine Modellversionsressource zu erstellen:
gcloud beta ai-platform versions create v1 \
--region=REGION \
--model=getting_started_pytorch \
--machine-type=n1-standard-4 \
--image=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \
--ports=8080 \
--health-route=/ping \
--predict-route=/predictions/mnist
Dabei gilt:
- REGION ist die Region, in der Sie das Artifact Registry-Repository und das AI Platform Prediction-Modell in vorherigen Abschnitten erstellt haben.
- PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
Dabei werden die folgenden containerbezogenen Flags verwendet:
--image
ist der URI Ihres Container-Images.--ports
ist der Port, den der HTTP-Server Ihres Containers auf Anfragen prüft. Das übergeordnete Image, von dem das Container-Image abgeleitet wurde, konfiguriert TorchServe zur Verwendung von Port8080
.--health-route
ist der Pfad, über den der HTTP-Server Ihres Containers auf Systemdiagnosen prüft. TorchServe prüft immer auf Systemdiagnosen im Pfad/ping
.--predict-route
ist der Pfad, über den der HTTP-Server Ihres Containers auf Vorhersageanfragen prüft. TorchServe prüft immer auf Vorhersageanfragen im Pfad/predictions/MODEL
.MODEL ist der Name des Modells, das Sie beim Start von TorchServe angegeben haben. In diesem Fall lautet der Name
mnist
, den Sie in dieser Docker-Anweisung von einem vorherigen Abschnitt festgelegt haben:CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"]
Vorhersage abrufen
Die Beispiel-Dateien von TorchServe enthalten Test-Images. Die TorchServe-Konfiguration des Containers erwartet Vorhersageanfragen im JSON-Format mit dem Bild als base64-codierten String im Feld data.b64
jeder Instanz.
Führen Sie beispielsweise die folgenden Befehle in der Shell aus, um test_data/3.png
zu klassifizieren:
cat > instances.json <<END
{
"instances": [
{
"data": {
"b64": "$(base64 --wrap=0 test_data/3.png)"
}
}
]
}
END
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @instances.json \
https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/getting_started_pytorch/versions/v1:predict
Dabei gilt:
- REGION ist die Region, in der Sie das AI Platform Prediction-Modell im vorherigen Abschnitt erstellt haben.
- PROJECT_ID ist die ID Ihres Google Cloud-Projekts.
Bei erfolgreicher Ausführung gibt die Modellversion die folgende Vorhersage zurück:
{"predictions": [3]}
Bereinigen
Löschen Sie die in dieser Anleitung erstellten Google Cloud-Ressourcen, damit keine weiteren Kosten für AI Platform Prediction-Gebühren und für Artifact Registry-Gebühren anfallen:
Führen Sie den folgenden Befehl in der Shell aus, um Ihre Modellversion zu löschen:
gcloud ai-platform versions delete v1 \ --region=REGION \ --model=getting_started_pytorch \ --quiet
Ersetzen Sie dabei REGION durch die Region, in der Sie das Modell in einem vorherigen Abschnitt erstellt haben.
Führen Sie den folgenden Befehl in der Shell aus, um das Modell zu löschen:
gcloud ai-platform models delete getting_started_pytorch \ --region=REGION \ --quiet
Ersetzen Sie dabei REGION durch die Region, in der Sie das Modell in einem vorherigen Abschnitt erstellt haben.
Führen Sie den folgenden Befehl in der Shell aus, um Ihr Artifact Registry-Repository und das darin enthaltene Container-Image zu löschen:
gcloud beta artifacts repositories delete getting-started-pytorch \ --location=REGION \ --quiet
Ersetzen Sie dabei REGION durch die Region, in der Sie das Artifact Registry-Repository in einem vorherigen Abschnitt erstellt haben.
Nächste Schritte
Wenn Sie ein eigenes Container-Image erstellen möchten, entweder komplett neu oder durch Ableitung von einem vorhandenen Container-Image eines Drittanbieters, finden Sie entsprechende Informationen unter Anforderungen für benutzerdefinierte Container.
Weitere Informationen erhalten Sie unter Benutzerdefinierte Container für Vorhersagen verwenden, unter anderem zur Kompatibilität mit anderen AI Platform Prediction-Features und -Konfigurationsoptionen, die Sie zur Bereitstellung für Ihren Container festlegen können.