Zum Hauptinhalt springen

In der Google Cloud ist Vertex AI das MLOps-Framework. Es ist sehr flexibel und kann grundsätzlich mit jedem beliebigen Modellierungs-Framework verwendet werden. Einige sind jedoch etwas einfacher zu nutzen als andere: TensorFlow, XGBoost und scikit-learn beispielsweise werden mit vorgefertigten und durchaus hilfreichen Container-Images unterstützt.
Dieser Blogbeitrag zeigt, wie Du andere Frameworks einsetzen kannst. Wir verwenden ein LightGBM-Modell als Beispiel, der Arbeitsablauf kann aber recht leicht auf jedes andere Modellierungspaket übertragen werden.

Überblick

Die Arbeitsabläufe in Vertex AI basieren stark auf Containern. Für diesen Blogbeitrag benötigen wir zwei Container: einen fürs Training und einen für das Deployment. Wir werden uns an diesem Google Codelab orientieren und es etwas variieren. Das Codelab zeigt, wie man ein TensorFlow-Modell mit vorgefertigten Containern trainiert und einsetzt. Wir modifizieren es, indem wir eigene Container und Code verwenden, um LightGBM anstelle von TensorFlow zu benutzen.

Trainieren eines LightGBM-Modells anstelle von TensorFlow

Für den Trainingsteil geh zunächst die Schritte 1 bis 3 im Codelab ohne Änderungen durch. In Schritt 4 gibst Du bitte den folgenden Befehl ein, um unseren modifizierten Code herunterzuladen, sobald Du Dein Terminal geöffnet hast:


git clone https://github.com/Allgoerithm/lightgbm_vertex_ai.git

Dieser Befehl erstellt ein Verzeichnis lightgbm_vertex_ai mit den Unterverzeichnissen training und prediction. Wir machen jetzt mit dem Codelab weiter und verwenden dabei den Code, den wir gerade heruntergeladen haben: Wenn wir den Trainingscode containerisieren, müssen wir das Dockerfile durch unsere eigene Datei ersetzen (zu finden in lightgbm_vertex_ai/training/Dockerfile). Und natürlich muss der TensorFlow-Code für das Training durch den LightGBM-Trainingscode ersetzt werden (siehe lightgbm_vertex_ai/training/trainer/train.py). Genau wie im Tutorial musst Du die Konstante BUCKET_NAME im Python-Code anpassen und den Namen des Buckets einsetzen, in dem Dein Modell liegt. Achtung: Wir müssen für den Namen des Buckets eine etwas andere Syntax verwenden. Wenn Du TensorFlow wie im Codelab verwendest, kannst Du die Standardschreibweise benutzen, die mit „gs://“ beginnt. Bei der Verwendung von LightGBM ist diese Notation nicht verfügbar. Es gibt jedoch einen praktischen Ersatz: Ersetze einfach „gs://“ durch „/gcs/“, und alles funktioniert einwandfrei. Vertex AI verwendet Cloud Storage FUSE, um den Google Cloud Storage unter „/gcs/“ zu mounten, so dass wir Google Cloud Storage bequem über das lokale Dateisystem nutzen können, ohne auf das entsprechende Python-SDK zurückgreifen zu müssen.

Mit Schritt 5 des Tutorials schließt Du das Training ab. Wenn Du den Trainingsjob startest, wähle „no prediction container“ anstelle von „custom container“. Ansonsten führst Du Schritt 5 wie im Codelab beschrieben aus (stelle Dich nur darauf ein, dass die Trainingszeit kürzer sein wird als die im Tutorial angegebenen 10 bis 15 Minuten).

Bereitstellen des LightGBM-Modells auf einem Vertex-AI-Endpoint

Schließlich wollen wir das Modell an einem Endpoint in Vertex AI bereitstellen. Wenn Du ein TensorFlow-Modell wie im Codelab-Tutorial verwendest, ist dieser Teil viel einfacher, da Du einen vorgefertigten Container für die Bereitstellung Deines Modells verwenden kannst. Im Fall von LightGBM musst Du den Container selbst erstellen, wobei Du Dich an den Vertex-AI-Anforderungen für Prediction Container orientieren musst. Dazu gehört auch das Einrichten eines kleinen Webservers. Wir verwenden hier Flask, weil es bekannt und für unseren Zweck relativ leicht zu benutzen ist. Da es auch zahlreiche Alternativen gibt, prüfe bitte die verfügbaren Optionen, wenn es um ein produktives Deployment geht.

Wir setzen jetzt unseren Prediction Container auf. Gib zunächst

cd ~/lightgbm_vertex_ai/prediction/

ein. Unter der Annahme, dass Du noch die Variable $PROJECT_ID aus dem Codelab in Deinem Terminal gesetzt hast, definieren wir die URI unseres Prediction Images:

IMAGE_URI="gcr.io/$PROJECT_ID/mpg-prediction:v1"

Möglicherweise möchtest Du „gcr.io“ ändern, wenn Du dieses Tutorial in einer Region außerhalb der USA durchführen möchtest, wie beispielsweise „eu.gcr.io“ für Europa. Jetzt bauen wir unseren Prediction Container und laden ihn hoch in die Google Container Registry:

docker build ./ -t $IMAGE_URI && docker push $IMAGE_URI

Der Container, den wir gerade gebaut haben, enthält den Code für einen kompletten Webserver. Du kannst den Code in der Datei app.py durchsehen und wirst feststellen, dass wir hier das Python-SDK anstelle von Cloud Storage FUSE verwenden, um unser Modell herunterzuladen. Das ist notwendig, da zum Zeitpunkt der Erstellung dieses Artikels die Prediction Container in Vertex AI im Gegensatz zum Training keine automatische Unterstützung für Cloud Storage FUSE haben.

Nun kannst Du Dein Modell entweder über die Cloud-Konsole oder mit dem folgenden Befehl in Vertex AI importieren:

gcloud ai models upload   --region=us-central1   --display-name=mpg   --container-image-uri=$IMAGE_URI   --artifact-uri=gs://<your-model-bucket-name>

Ersetze „<your-model-bucket-name>“ durch den Namen des Buckets in Deinem Modell. Analog zu oben kannst Du auch „us-central1“ ersetzen, wenn Du in einer anderen Region arbeitest.
Schließlich kannst Du Dein Modell bereitstellen, wie in Schritt 6 des Codelabors beschrieben.

Herzlichen Glückwunsch! Dein erstes LightGBM-Modell wird jetzt auf Vertex AI bereitgestellt. Vergiss nicht, alle Artefakte wieder zu löschen, die Du in diesem Tutorial erstellt hast (siehe auch Schritt 7 des Codelabors).

 

 

 

Jetzt, wo Du ein Modell trainiert und bereitgestellt hast, bist Du flexibel genug, um Vertex AI mit jedem beliebigen Modellierungs-Framework zu verwenden. Der nächste Schritt besteht darin, das Training und die Bereitstellung in einen automatisierten Arbeitsablauf einzubetten. Wirf einen Blick auf die großartigen Blogbeiträge meines Kollegen Laurenz, um zu sehen, wie das funktioniert!

Zu den Blogbeiträgen

 

 

 

München
b.telligent Group Holding GmbH
Walter-Gropius-Straße 17
80807 München


Zürich
b.telligent Schweiz GmbH
Kanzleistrasse 57
8004 Zürich