Cookie Consent by FreePrivacyPolicy.com rheindata GmbH | Deployment eines Machine Learning-Modells auf der Google Cloud Platform Deployment eines Machine Learning-Modells auf der Google Cloud Platform

Deployment eines Machine Learning-Modells auf der Google Cloud Platform


Stephan NeureiterIn diesem Post zeigen wir, wie man ein selbst erstelltes Machine Learning-Modell auf der Google Cloud Plattform bereitstellt. Wir haben in einem vorherigen Post ein Klassifikationsmodell erstellt, welches wir nun als Flask App verpacken und anschließend auf der Google Cloud App-Engine laufen lassen.

Für das Erstellen umfassender ML-Pipelines kann auch Google-Kubeflow verwendet werden, darüber hinaus bietet die Plattform Google-AI einige vorkonfigurierte Modelle, welche ohne Programmierkenntnisse nutzbar sind. Wir verwenden hier die Google App-Engine, da sie für unser Beispiel die unkomplizierteste und kostengünstigste Lösung bietet. Am Ende des Deployments können Vorhersagen für neue Daten per API-Call generiert werden. Der Weg von den Rohdaten zu einem fertigen ML-Modell lässt sich im vorherigen Artikel finden. Hier beziehen wir uns nur auf das Cloud Deployment eines Python ML-Modells.


Verpacken des Modells mittels Flask

Nachdem wir unser Modell erstellt haben müssen wir es in eine nutzbare Form bringen. Flask ist ein schlankes Web-Framework für Python, das uns erlaubt Python Applikationen zu Webanwendungen zu machen, indem wir die nötigen Schnittstellen für unser Modell als API’s (Application Programming Interface) konfigurieren können. So kann unser Modell Anfragen mit neuen Daten erhalten, aus den Daten in der Anfrage anschließend Vorhersagen erstellen und diese an den User zurückschicken.

Um unser ML-Modell als Flask-App zu verpacken, beginnen wir mit einer neuen Python Datei (Die Development Umgebung ist dabei natürlich frei wählbar, hier nutze ich Spyder):

  • Zuerst laden wir alle nötigen Libraries.
  • Danach wird eine Instanz der Klasse Flask initialisiert.
  • Anschließend laden wir das Model.
  • In unserem Beispiel führen wir ebenfalls noch ein wenig Datenvalidierung für den Input durch.




  • Danach konfigurieren wir die API-Schnittstelle. Da wir nur eine Funktionalität einbauen wollen bleiben wir auf der minimal Route (@app.route(“/“)). Allerdings können auch mehrere Schnittstellen in der App konfiguriert werden, Authentifizierungen eingebunden werden und sogar HTML-Templates können integriert werden mit Flask’s render_template.
  • Wir wählen die Methode und lesen die Daten der Request aus, welche als JSON übermittelt werden.
  • Dann können die Daten validiert werden (z.B. Prüfung der Vollständigkeit und Reihenfolge).




  • Danach nutzen wir die übertragenen Daten zur Vorhersage. In unserem Beispiel muss darauf geachtet werden, dass model.predict ein Numpy Array erwartet, weswegen die Daten umgeformt werden müssen.
  • Abschließend verpacken wir den Output und senden ihn zurück. Nachdem alle API-Schnittstellen konfiguriert wurden muss die App noch gestartet werden. Der Debug-Mode der App ist nützlich, um schnell Änderungen zu testen, aber er kann für das finale Deployment abgeschaltet werden.




Jetzt kann die App auf dem eigenen Rechner getestet werden. Ein Programm wie Postman erleichtert das Überprüfen der API, indem man seine eigenen API-Calls mit beliebiger Methode und Format schrieben kann.





Deployment der App auf der Google Cloud Platform

Die Google Cloud Plattform bietet mit ihrer App-Engine eine ideale Möglichkeit zur Bereitstellung unserer App. GCP kümmert sich automatisch um die Bereitstellung von Speicher und Rechenleistung. In diesem Beispiel läuft unsere Python App problemlos in der Standardkonfiguration und es muss nichts Weiteres deklariert werden. Der Vorteil ist hierbei, dass man in der Standardkonfiguration nur für Ressourcen bezahlt, die auch wirklich genutzt werden, und sich nicht um deren Bereitstellung kümmern muss. Ähnliche Dienste lassen sich auch in der Azure Cloud und bei AWS finden.

Bevor wir mit dem Deployment beginnen müssen wir allerdings zuerst das Befehlszeilentool Google SDK herunterladen und einen neuen Ordner erstellen, den wir mit den nötigen Deployment Dateien befüllen.

In den Ordner packen wir:

  • Unsere Flask Python Datei, in der die APIs konfiguriert wurden, unter dem Namen main.py.
  • Das finale Modell, damit es in der Flask App geladen werden kann.
  • Eine einfache Textdatei mit dem Namen app.yaml, in der wir die Python Version deklarieren (z.B. runtime: python38).
  • Eine requirements.txt Datei. Um diese zu generieren erstellt man ein virtuelles Environment für Python, falls man nicht schon in einem arbeitet, und installiert darin alle nötigen Pakete.

Diese kann man sich dann mittels pip freeze > requirements.txt ausgeben lassen.




Wenn noch andere Dateien oder Website Templates von der App genutzt werden sollen, dann kommen diese ebenfalls noch in den Ordner, allerdings sind die vier beschriebenen Dateien genug für unser Projekt.





Für das Deployment loggen wir uns per Google Account bei der Google Cloud Console ein und erstellen ein neues Projekt, da alle Ressourcen in Google an Projekte gebunden sind. Keine Angst vor eventuellen Kosten, das Gratiskontingent, welches Google bei der Registrierung bereitstellt, ist für die meisten Probeprojekte vollkommen ausreichend. Ein Problem wird es nur, wenn die Modelle im Gigabyte Bereich liegen sollten.








Zur Erstellung einer App-Engine Instanz klicken wir in der Cloud Console oben links auf das Navigationsmenü und anschließend auf App-Engine.








Dann auf App Anwendung erstellen. Anschließend den Anweisungen folgen und Region, Sprache und Environment wählen und warten, bis die App erstellt ist.

Danach öffnen wir Google Cloud SDK und wählen unser Deployment Verzeichnis an. Wir starten die gcloud Funktionalität mit gcloud init und wählen dann die default Einstellung, den Google Account und unser erstelltes Projekt.





Die abschließende Bereitstellung benötigt nur noch den Befehl gcloud app deploy. Nun warten wir bis die Daten aus dem Ordner hochgeladen wurden und die App anfängt zu laufen. Dann kann man über den angegebenen Link auf die App zugreifen.





Herzlichen Glückwunsch! Wir haben soeben ein Machine Learning-Modell auf der Google Cloud App-Engine deployed und können dem Modell jetzt, über die target url, von überall neue Daten senden und erhalten Vorhersagen zurück. Am Ende natürlich nicht vergessen unnötige Dienste auch wieder abzuschalten.





Zusammenfassung

Im Post Konstruktion eines Machine Learning-Modells mit Python haben wir ein CatBoost Klassifikationsmodell erstellt. Dieses Modell haben wir nun in eine Flask App verpackt, in der APIs konfiguriert wurden. So ist das Modell bereit für webbasierte Vorhersagen. Abschließend haben wir das Modell in der Google Cloud App-Engine bereitgestellt. Alle nötigen Informationen können auf Gitlab gefunden werden.