Von Prototyp zur Produktion: Vorhersagen aus benutzerdefiniert trainierten Modellen abrufen

1. Übersicht

In diesem Lab verwenden Sie Vertex AI, um Online- und Batchvorhersagen aus einem benutzerdefinierten trainierten Modell abzurufen.

Dieses Lab ist Teil der Videoreihe Prototyping to Production. Schließen Sie das vorherige Lab ab, bevor Sie mit diesem beginnen. Weitere Informationen findest du im Video:

.

Lerninhalte

Die folgenden Themen werden behandelt:

  • Modelle in Vertex AI Model Registry hochladen
  • Modell auf einem Endpunkt bereitstellen
  • Online- und Batchvorhersagen über die Benutzeroberfläche und das SDK abrufen

Die Gesamtkosten für das Lab in Google Cloud belaufen sich auf 1$.

2. Einführung in Vertex AI

In diesem Lab wird das neueste KI-Angebot von Google Cloud verwendet. Vertex AI integriert die ML-Angebote in Google Cloud für eine nahtlose Entwicklung. Bisher waren mit AutoML trainierte und benutzerdefinierte Modelle über separate Dienste zugänglich. Das neue Angebot kombiniert beide zusammen mit anderen neuen Produkten in einer einzigen API. Sie können auch vorhandene Projekte zu Vertex AI migrieren.

Vertex AI umfasst viele verschiedene Produkte zur Unterstützung von End-to-End-ML-Workflows. In diesem Lab liegt der Schwerpunkt auf den unten aufgeführten Produkten: Vorhersagen und Workbench.

Vertex-Produktübersicht

3. Umgebung einrichten

Führen Sie die Schritte im Lab Benutzerdefinierte Modelle mit Vertex AI trainieren aus, um Ihre Umgebung einzurichten.

4. Modell in die Registry hochladen

Bevor wir mit unserem Modell Vorhersagen erhalten können, müssen wir es in die Vertex AI Model Registry hochladen. Das ist ein Repository, in dem Sie den Lebenszyklus Ihrer ML-Modelle verwalten können.

Sie können Modelle hochladen, wenn Sie einen benutzerdefinierten Trainingsjob konfigurieren, wie unten dargestellt.

training_prediction

Sie können Modelle auch nach Abschluss des Trainingsjobs importieren, sofern Sie die gespeicherten Modellartefakte in einem Cloud Storage-Bucket speichern. Diese Option verwenden wir in diesem Lab.

Rufen Sie in der Console den Bereich „Modelle“ auf.

Modellmenü

Wählen Sie IMPORTIEREN aus.

import_model

Wählen Sie Als neues Modell importieren aus und geben Sie einen Namen für Ihr Modell ein.

new_model

Importieren Sie unter Modelleinstellungen das Modell mit einem vordefinierten Container und verwenden Sie TensorFlow 2.8. Eine vollständige Liste der vordefinierten Vorhersagecontainer

Geben Sie dann den Pfad zum Cloud Storage-Bucket an, in dem Sie die Modellartefakte im benutzerdefinierten Trainingsjob gespeichert haben. Er sollte in etwa so gs://{PROJECT_ID}-bucket/model_output aussehen:

Wir überspringen den Abschnitt zur Erklärbarkeit. Wenn Sie mehr über Vertex Explainable AI erfahren möchten, sehen Sie sich die Dokumentation an.

Nach dem Import wird es in der Registry angezeigt.

flower_model

Wenn Sie dies über das SDK statt über die Benutzeroberfläche tun möchten, können Sie Folgendes aus Ihrem Workbench-Notebook ausführen, um das Modell hochzuladen.

from google.cloud import aiplatform

my_model = aiplatform.Model.upload(display_name='flower-model',
                                  artifact_uri='gs://{PROJECT_ID}-bucket/model_output',
                                  serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest')

5. Modell auf dem Endpunkt bereitstellen

In Vertex AI können zwei Arten von Vorhersagejobs ausgeführt werden: Batch- und Onlinejobs.

Batchvorhersagen sind asynchrone Anfragen. Sie eignet sich gut, wenn Sie nicht sofort eine Antwort benötigen und akkumulierte Daten in einer einzigen Anfrage verarbeiten möchten.

Wenn Sie andererseits aus den spontan an Ihr Modell übergebenen Daten Vorhersagen mit niedriger Latenz erhalten möchten, verwenden Sie die Onlinevorhersage.

Da sich das Modell jetzt in der Registry befindet, können wir es für Batchvorhersagen verwenden.

Wenn wir jedoch Onlinevorhersagen erhalten möchten, müssen wir das Modell auf einem Endpunkt bereitstellen. Dadurch werden die gespeicherten Modellartefakte mit physischen Ressourcen für Vorhersagen mit niedriger Latenz verknüpft.

Klicken Sie auf das Dreipunkt-Menü ganz rechts im Modell und dann auf Auf Endpunkt bereitstellen.

deploy_model

Geben Sie dem Endpunkt einen Namen, lassen Sie die restlichen Einstellungen unverändert und klicken Sie auf WEITER.

endpoint_name

Endpunkte unterstützen das Autoscaling. Sie können also ein Minimum und ein Maximum festlegen. Die Compute-Knoten werden dann innerhalb dieser Grenzen skaliert, um die Verkehrsnachfrage zu erfüllen.

Da dieses Lab nur zu Demonstrationszwecken dient und wir diesen Endpunkt nicht für einen hohen Traffic verwenden, können Sie die Maximale Anzahl von Compute Nodes auf 1 festlegen und n1-standard-4 als Maschinentyp auswählen.

endpoint_compute

Wir überspringen die Modellüberwachung. Weitere Informationen zu dieser Funktion finden Sie in der Dokumentation.

Klicken Sie dann auf Bereitstellen.

Die Bereitstellung dauert einige Minuten. Danach sehen Sie, dass sich der Bereitstellungsstatus des Modells in In Vertex AI bereitgestellt geändert hat.

Wenn Sie ein Modell über das SDK bereitstellen möchten, führen Sie den folgenden Befehl aus.

my_model = aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

endpoint = my_model.deploy(
     deployed_model_display_name='my-endpoint',
     traffic_split={"0": 100},
     machine_type="n1-standard-4",
     accelerator_count=0,
     min_replica_count=1,
     max_replica_count=1,
   )

6. Vorhersagen abrufen

Onlinevorhersagen

Wenn Ihr Modell auf einem Endpunkt bereitgestellt wurde, können Sie es wie jeden anderen REST-Endpunkt aufrufen. Das bedeutet, dass Sie es von einer Cloud-Funktion, einem Chatbot oder einer Webanwendung aufrufen können.

Zu Demonstrationszwecken nennen wir diesen Endpunkt aus Workbench.

Kehren Sie zum Notebook zurück, das Sie im vorherigen Lab erstellt haben. Erstellen Sie über den Launcher ein neues TensorFlow 2-Notebook.

tf_kernel

Vertex AI Python SDK, Numpy und PIL importieren

from google.cloud import aiplatform

import numpy as np
from PIL import Image

Laden Sie das Bild unten herunter und laden Sie es in Ihre Workbench-Instanz hoch. Wir testen das Modell anhand dieses Bilds eines Löwenzahns.

test_image

Definieren Sie zuerst den Endpunkt. Ersetzen Sie unten {PROJECT_NUMBER} und {ENDPOINT_ID}.

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/{PROJECT_NUMBER}/locations/us-central1/endpoints/{ENDPOINT_ID}")

Sie finden Ihre „endpoint_id“ im Bereich „Endpunkte“ der Cloud Console.

endpoint_id

Ihre Projektnummer finden Sie auf der Startseite der Console. Diese unterscheidet sich von der Projekt-ID.

Projektnummer

Im folgenden Code wird das Bild mit PIL geöffnet und die Größe geändert.

IMAGE_PATH = "test-image.jpg"
im = Image.open(IMAGE_PATH)

Konvertieren Sie die Numpy-Daten dann in den Typ „float32“ und in eine Liste. Wir konvertieren in eine Liste, da NumPy-Daten nicht in JSON serialisiert werden können und daher nicht im Textkörper unserer Anfrage gesendet werden können.

x_test = np.asarray(im).astype(np.float32).tolist()

Rufen Sie schließlich endpoint.predict auf.

endpoint.predict(instances=x_test).predictions

Das Ergebnis, das Sie erhalten, ist die Ausgabe des Modells, eine Softmax-Schicht mit fünf Einheiten. Wenn Sie benutzerdefinierte Logik schreiben möchten, um anstelle des Index das Stringlabel zurückzugeben, können Sie benutzerdefinierte Vorhersageroutinen verwenden.

Batchvorhersagen

Es gibt verschiedene Möglichkeiten, Daten für die Batch-Vorhersage zu formatieren. Zur Vereinfachung speichern wir die Numpy-Daten in einer JSON-Datei und speichern diese Datei in Cloud Storage.

with open('test-data.json', 'w') as fp:
    json.dump(x_test, fp)

!gsutil cp test-data.json gs://{YOUR_BUCKET}

Als Nächstes definieren Sie das Modell. Das ähnelt dem Definieren des Endpunkts, mit der Ausnahme, dass Sie anstelle einer ENDPOINT_ID die MODEL_ID angeben müssen.

my_model=aiplatform.Model("projects/{PROJECT_NUMBER}/locations/us-central1/models/{MODEL_ID}") 

Sie finden die Modell-ID, indem Sie in der Console im Bereich „Modelle“ den Modellnamen und die Version auswählen und dann VERSIONSDETAILS auswählen.

model_id

Verwenden Sie schließlich das SDK, um einen Batchvorhersagejob aufzurufen. Geben Sie dabei den Cloud Storage-Pfad an, unter dem Sie die JSON-Datei gespeichert haben, und geben Sie einen Cloud Storage-Speicherort zum Speichern der Vorhersageergebnisse an.

batch_prediction_job = my_model.batch_predict(
    job_display_name='flower_batch_predict',
    gcs_source='gs://{YOUR_BUCKET}/test-data.json',
    gcs_destination_prefix='gs://{YOUR_BUCKET}/prediction-results',
    machine_type='n1-standard-4',)

Sie können den Jobfortschritt im Bereich „Batch-Vorhersagen“ der Konsole verfolgen. Hinweis: Das Ausführen eines Batchvorhersagejobs für ein einzelnes Bild ist nicht effizient.

batch_pred

Nächste Schritte

In diesem Beispiel haben wir das Testbild zuerst in NumPy umgewandelt, bevor wir den Vorhersageaufruf ausgeführt haben. Für realistischere Anwendungsfälle sollten Sie das Bild selbst senden und es nicht zuerst in NumPy laden müssen. Dazu müssen Sie Ihre TensorFlow-Dienstfunktion so anpassen, dass sie Bildbytes decodiert. Dies erfordert etwas mehr Arbeit, ist jedoch bei größeren Bildern und der Anwendungserstellung deutlich effizienter. In diesem Notebook finden Sie ein Beispiel.

🎉 Glückwunsch! 🎉

Sie haben gelernt, wie Sie Vertex AI für Folgendes verwenden:

  • Modelle in die Vertex AI Model Registry hochladen
  • Batch- und Onlinevorhersagen abrufen

Weitere Informationen zu den verschiedenen Teilen von Vertex finden Sie in der Dokumentation.

7. Bereinigen

Heben Sie die Bereitstellung der Modelle am Endpunkt auf, wenn Sie sie nicht verwenden möchten. Sie können den Endpunkt auch vollständig löschen. Sie können ein Modell bei Bedarf jederzeit wieder auf einem Endpunkt bereitstellen.

undeploy_model

Von Workbench verwaltete Notebooks werden nach 180 Minuten Inaktivität automatisch beendet. Sie müssen sich also nicht um das Herunterfahren der Instanz kümmern. Wenn Sie die Instanz manuell herunterfahren möchten, klicken Sie in der Console im Abschnitt Vertex AI Workbench auf die Schaltfläche „Stop“. Wenn Sie das Notizbuch vollständig löschen möchten, klicken Sie auf Löschen.

Instanz beenden

Wenn Sie den Speicher-Bucket löschen möchten, klicken Sie in der Cloud Console im Navigationsmenü auf „Speicher“, wählen Sie den Bucket aus und klicken Sie auf „Löschen“:

Speicher löschen