Erste Schritte: PyTorch-Vorhersagen mit einem benutzerdefinierten Container bereitstellen

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.

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. AI Platform Training & Prediction and Artifact Registry API APIs aktivieren.

    Aktivieren Sie die APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. AI Platform Training & Prediction and Artifact Registry API APIs aktivieren.

    Aktivieren Sie die APIs

  8. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

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:

  1. Installieren Sie die Google Cloud CLI.
  2. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  3. 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 ein state_dict mit Merkmalsgewichtungen und anderen Ausgaben des Trainings.
  • mnist_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.

  1. 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, als root-Nutzer die Konfigurationsdatei zu bearbeiten und anschließend den Nutzer model-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 Dateinamen mnist.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 Namen mnist. Dieses Modell lädt die von der RUN-Anweisung erstellte Datei mnist.mar.

      Mit dieser Anweisung wird die CMD-Anweisung des übergeordneten Images überschrieben. Es muss unbedingt die Anweisung CMD und nicht die Anweisung ENTRYPOINT überschrieben werden, da das ENTRYPOINT-Skript des übergeordneten Images den in CMD übergebenen Befehl ausführt. Damit wird eine zusätzliche Logik hinzugefügt, um zu verhindern, dass Docker beendet wird.

  2. 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 \
      .
    

    Ersetzen Sie Folgendes:

    • 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:

  1. 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 Port 8080 der lokalen Umgebung zugeordnet wird. (Das Basis-Image, von dem das Container-Image abgeleitet wurde, konfiguriert TorchServe zur Verwendung von Port 8080.)

  2. 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"
    }
    
  3. 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]}
    
  4. 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.

  1. 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.

  2. 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

Ersetzen Sie Folgendes:

  • 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 Port 8080.

  • --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

Ersetzen Sie Folgendes:

  • 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:

  1. 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.

  2. 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.

  3. 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.