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 benutzerdefiniert 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 erhalten 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 mit der Benutzeroberfläche und dem 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-Produktangebot von Google Cloud verwendet. Vertex AI bindet die ML-Angebote in Google Cloud in eine nahtlose Entwicklungsumgebung ein. Zuvor waren mit AutoML trainierte und benutzerdefinierte Modelle über separate Dienste zugänglich. Das neue Angebot vereint beides in einer einzigen API sowie weitere neue Produkte. Sie können auch vorhandene Projekte zu Vertex AI migrieren.

Vertex AI enthält viele verschiedene Produkte zur Unterstützung von End-to-End-ML-Workflows. In diesem Lab liegt der Fokus auf den unten aufgeführten Produkten: Predictions 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 Registry hochladen

Bevor wir mit unserem Modell Vorhersagen abrufen können, müssen wir es in die Vertex AI Model Registry hochladen. In diesem Repository können Sie den Lebenszyklus Ihrer ML-Modelle verwalten.

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

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 Abschnitt „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 Container für vordefinierte Vorhersagen finden Sie hier.

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 zu Erklärbarkeit, aber wenn Sie mehr über Vertex Explainable AI erfahren möchten, sehen Sie sich die Dokumentation an.

Nachdem das Modell importiert wurde, 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 Endpunkt bereitstellen

Es gibt zwei Arten von Vorhersagejobs, die in Vertex AI ausgeführt werden können: Batch- und Onlinejobs.

Eine Batchvorhersage ist eine asynchrone Anfrage. 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 nun in der Registry befindet, können wir es für Batchvorhersagen verwenden.

Wenn wir jedoch Onlinevorhersagen abrufen möchten, müssen wir das Modell auf einem Endpunkt bereitstellen. Dadurch werden die gespeicherten Modellartefakte physischen Ressourcen zugeordnet, um Vorhersagen mit niedriger Latenz zu ermöglichen.

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

deploy_model

Geben Sie einen Namen für den Endpunkt ein, lassen Sie die restlichen Einstellungen unverändert und klicken Sie auf WEITER.

endpoint_name

Endpunkte unterstützen Autoscaling. Sie können einen Mindest- und Höchstwert festlegen und Rechenknoten skalieren, um den Trafficbedarf innerhalb dieser Grenzen zu erfüllen.

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

endpoint_compute

Wir überspringen das Modellmonitoring. 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 wird, können Sie es wie jeden anderen Ruheendpunkt aufrufen, d. h. über eine Cloud Functions-Funktion, einen Chatbot, eine Webanwendung usw. aufrufen.

Zu Demonstrationszwecken nennen wir diesen Endpunkt aus Workbench.

Kehren Sie zu dem Notebook zurück, das Sie im vorherigen Lab erstellt haben. Erstellen Sie aus dem 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 in Ihre Workbench-Instanz hoch. Wir werden das Modell an diesem Bild eines Löwenzahns testen.

test_image

Definieren Sie zuerst den Endpunkt. Du musst unten {PROJECT_NUMBER} und {ENDPOINT_ID} ersetzen.

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

Außerdem finden Sie Ihre Projektnummer auf der Startseite der Konsole. Beachten Sie, dass sich diese von der Projekt-ID unterscheidet.

project_number

Der folgende Code wird geöffnet und die Größe des Bildes wird mit PIL geändert.

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

Konvertieren Sie dann die NumPy-Daten in den Typ float32 und in eine Liste. Wir konvertieren in eine Liste, da Numpy-Daten nicht in JSON serialisierbar sind 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, das Sie erhalten, ist die Ausgabe des Modells, eine Softmax-Schicht mit fünf Einheiten. Wenn Sie eine benutzerdefinierte Logik schreiben möchten, um das Stringlabel anstelle des Index zurückzugeben, können Sie benutzerdefinierte Vorhersageroutinen verwenden.

Batchvorhersagen

Es gibt verschiedene Möglichkeiten, Ihre Daten für die Batchvorhersage zu formatieren. Der Einfachheit halber speichern wir die Numpy-Daten in eine JSON-Datei und speichern die 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. Dies ähnelt der Definition des Endpunkts, mit der Ausnahme, dass Sie die MODEL_ID anstelle eines 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 in der Konsole im Abschnitt „Modelle“ den Modellnamen und die Version 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 Abschnitt „Batchvorhersagen“ der Console verfolgen. Das Ausführen eines Batchvorhersagejobs für ein einzelnes Image ist nicht effizient.

batch_pred

Nächste Schritte

In diesem Beispiel haben wir das Testbild zuerst in NumPy konvertiert, bevor der Vorhersageaufruf durchgeführt wurde. Für realistischere Anwendungsfälle empfiehlt es sich, das Bild selbst zu senden, ohne es zuerst in NumPy laden zu müssen. Dazu müssen Sie die TensorFlow-Bereitstellungsfunktion so anpassen, dass Bildbytes decodiert werden. 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 mit Vertex AI Folgendes tun können:

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

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

7. Bereinigen

Sie sollten die Bereitstellung der Modelle auf dem Endpunkt aufheben, 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 auf einem Endpunkt noch einmal bereitstellen.

undeploy_model

Bei von Workbench verwalteten Notebooks tritt nach 180 Minuten Inaktivität automatisch eine Zeitüberschreitung auf, sodass Sie die Instanz nicht beenden müssen. 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 Storage-Bucket löschen möchten, gehen Sie im Navigationsmenü der Cloud Console zu „Storage“, wählen Sie den Bucket aus und klicken Sie auf „Löschen“:

Speicher löschen