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.
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.
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.
Wählen Sie IMPORTIEREN aus.
Wählen Sie Als neues Modell importieren aus und geben Sie einen Namen für Ihr Modell ein.
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.
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.
Geben Sie dem Endpunkt einen Namen, lassen Sie die restlichen Einstellungen unverändert und klicken Sie auf WEITER.
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.
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.
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.
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.
Ihre Projektnummer finden Sie auf der Startseite der Console. Diese unterscheidet sich von der Projekt-ID.
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.
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.
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.
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.
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“: