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 Modell zu erhalten.

Dieses Lab ist Teil der Videoreihe Von Prototyp zur Produktion. Sie sollten das vorherige Lab abgeschlossen haben, bevor Sie dieses hier ausprobieren. Weitere Informationen finden Sie im zugehörigen 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 die Ausführung dieses Labs in Google Cloud betragen etwa 1$.

2. Einführung in Vertex AI

In diesem Lab wird das neueste KI-Produkt von Google Cloud verwendet. Vertex AI vereint die ML-Angebote von Google Cloud in einer nahtlosen Entwicklungsumgebung. Bisher musste auf mit AutoML trainierte und benutzerdefinierte Modelle über verschiedene Dienste zugegriffen werden. Das neue Angebot kombiniert diese und weitere, neue Produkte zu 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 konzentrieren wir uns auf die unten hervorgehobenen Produkte: 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 unser Modell verwenden können, um Vorhersagen zu erhalten, müssen wir es in Vertex AI Model Registry hochladen. Dies 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 importieren, nachdem der Trainingsjob abgeschlossen ist, sofern Sie die gespeicherten Modellartefakte in einem Cloud Storage-Bucket speichern. Das ist die Option, die wir in diesem Lab verwenden.

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

Modellmenü

Wählen Sie IMPORT aus.

import_model

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

new_model

Importieren Sie das Modell unter Modelleinstellungen mit einem vordefinierten Container und verwenden Sie TensorFlow 2.8. 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. Das sollte ungefähr so aussehen: gs://{PROJECT_ID}-bucket/model_output

Wir überspringen den Abschnitt „Explainability“. Wenn Sie mehr über Vertex Explainable AI erfahren möchten, sehen Sie sich die Dokumentation an.

Nach dem Import des Modells wird es in der Registry angezeigt.

flower_model

Wenn Sie das Modell über das SDK anstelle der Benutzeroberfläche hochladen möchten, können Sie den folgenden Befehl in Ihrem Workbench-Notebook ausführen.

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 dagegen Vorhersagen mit niedriger Latenz auf Basis von Daten erhalten möchten, die direkt an Ihr Modell übergeben werden, würden Sie die Onlinevorhersage nutzen.

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.

Wenn Sie das Modell auf einem Endpunkt bereitstellen möchten, wählen Sie die drei Punkte ganz rechts neben dem Modell und dann Auf Endpunkt bereitstellen aus.

deploy_model

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

endpoint_name

Endpunkte unterstützen Autoscaling. Sie können also einen Mindest- und Höchstwert festlegen. Die Computing-Knoten werden dann innerhalb dieser Grenzen skaliert, um die Trafficanforderungen zu erfüllen.

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

endpoint_compute

Wir überspringen die Modellüberwachung. Wenn Sie mehr über diese Funktion erfahren möchten, sehen Sie sich die Dokumentation an.

Klicken Sie dann auf BEREITSTELLEN.

Die Bereitstellung dauert einige Minuten. Danach sehen Sie, dass sich der Bereitstellungsstatus Ihres Modells in Deployed on Vertex AI (Auf 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 wird, können Sie es wie jeden anderen REST-Endpunkt aufrufen. Das bedeutet, dass Sie es von einer Cloud Functions-Funktion, einem Chatbot, einer Web-App usw. aufrufen können.

Zu Demonstrationszwecken rufen wir diesen Endpunkt über Workbench auf.

Kehren Sie zu dem 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 mit diesem Bild eines Löwenzahns.

test_image

Definieren Sie zuerst den Endpunkt. Sie müssen {PROJECT_NUMBER} und {ENDPOINT_ID} unten ersetzen.

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

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

endpoint_id

Ihre Projektnummer finden Sie auf der Startseite der Console. Beachten Sie, dass sich diese von der Projekt-ID unterscheidet.

project_number

Im folgenden Code wird das Bild mit PIL geöffnet und seine 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 wir sie daher nicht im Text unserer Anfrage senden 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 ist die Ausgabe des Modells, die aus einer Softmax-Schicht mit 5 Einheiten besteht. Wenn Sie eine benutzerdefinierte Logik schreiben möchten, um das String-Label anstelle des Index zurückzugeben, können Sie benutzerdefinierte Vorhersageroutinen verwenden.

Batchvorhersagen

Es gibt verschiedene Möglichkeiten, Daten für die Batchvorhersage zu formatieren. Der Einfachheit halber werden die NumPy-Daten in eine JSON-Datei geschrieben und die Datei in Cloud Storage gespeichert.

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 ist ähnlich wie beim Definieren des Endpunkts, nur dass Sie die MODEL_ID anstelle einer ENDPOINT_ID angeben müssen.

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

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

model_id

Rufen Sie schließlich mit dem SDK einen Batchvorhersagejob auf. Übergeben Sie dazu den Cloud Storage-Pfad, in dem Sie die JSON-Datei gespeichert haben, und geben Sie einen Cloud Storage-Speicherort an, an dem die Vorhersageergebnisse gespeichert werden sollen.

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 Fortschritt des Jobs im Bereich „Batch-Vorhersagen“ der Konsole verfolgen. 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 konvertiert, bevor wir den Vorhersageaufruf ausgeführt haben. Für realistischere Anwendungsfälle möchten Sie wahrscheinlich das Bild selbst senden und es nicht zuerst in NumPy laden müssen. Dazu müssen Sie Ihre TensorFlow Serving-Funktion anpassen, um Bildbyte zu decodieren. Das erfordert zwar etwas mehr Aufwand, ist aber bei größeren Bildern und beim Erstellen von Anwendungen viel effizienter. Hier finden Sie ein Beispiel.

🎉 Das wars! 🎉

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

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

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

7. Bereinigen

Wenn Sie die Modelle nicht verwenden möchten, sollten Sie die Bereitstellung der Modelle am Endpunkt aufheben. Sie können den Endpunkt auch vollständig löschen. Sie können ein Modell jederzeit wieder auf einem Endpunkt bereitstellen.

undeploy_model

Von Workbench verwaltete Notebooks laufen nach 180 Minuten Inaktivität automatisch ab. Sie müssen die Instanz also nicht herunterfahren. Wenn Sie die Instanz manuell herunterfahren möchten, klicken Sie im Bereich „Vertex AI Workbench“ der Console auf die Schaltfläche „Beenden“. Wenn Sie das Notebook vollständig löschen möchten, klicken Sie auf die Schaltfläche „Löschen“.

Instanz beenden

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

Speicher löschen