
Dank moderner KI-Frameworks lassen sich Deep-Learning-Modelle heute mit wenigen Klicks erstellen und bereitstellen. Über eine UI oder eine auf Tensorflow Estimators basierende API entstehen einsatzbereite Modelle, ohne dass eine einzige Zeile Machine-Learning-Code geschrieben werden muss.
Foto von Adi Goldstein auf Unsplash
Vor 70 Jahren wusste nur eine Handvoll Experten, wie man Computerprogramme schreibt – Programmierung erforderte damals ein extrem hohes theoretisches und technisches Spezialwissen. Im Lauf der Jahre sind immer höhere Abstraktions- und Kapselungsebenen entstanden, sodass auch weniger versierte Anwender mit sehr einfachen Tools Software erstellen können (siehe etwa Wix). Genau dieselbe Entwicklung erleben wir heute beim Machine Learning – nur deutlich schneller. In diesem Blogbeitrag schreiben wir ein einfaches Skript, das eine komplette Machine-Learning-Pipeline erzeugt.
Wirklich codeless?
Dieser Beitrag enthält zwei Arten von Code. Der erste ist eine SQL-Abfrage zur Erzeugung des Datensatzes – dieser Teil ließe sich auch durch Tools wie Google Cloud Dataprep ersetzen. Der zweite Teil besteht aus API-Aufrufen über eine Python-Client-Bibliothek – all diese Schritte stehen ebenso über die UI der AI Platform zur Verfügung. Wenn ich von codeless spreche, heißt das: Sie müssen an keiner Stelle TensorFlow oder andere ML-Bibliotheken importieren.
In dieser Demo nutze ich den offenen Datensatz Chicago Taxi Trips in Google BigQuery, um die Fahrtzeit eines Taxis anhand von Abholort, gewünschtem Zielort und Startzeitpunkt vorherzusagen. Trainiert und bereitgestellt wird das Modell über Google-Cloud-Dienste, die Tensorflow kapseln.
Das vollständige Codebeispiel finden Sie in diesem GitHub-Repository.
Features mit BigQuery extrahieren
Auf Grundlage einer EDA, die in diesem Notebook gezeigt wird, habe ich eine SQL-Abfrage zur Erzeugung eines Trainingsdatensatzes erstellt:
https://gist.github.com/gidutz/86c701c621e48860c8ab135df56a8076
Im Repo sehen Sie, wie ich die Abfrage über einen Python-Client ausführe und das Ergebnis nach GCS exportiere.
Wichtig! Damit die AI Platform aus diesen Daten ein Modell bauen kann, muss die erste Spalte die Zielvariable sein, und der CSV-Export darf keinen Header enthalten.
Hyperparameter-Tuning-Job starten und bereitstellen
Sobald mein Datensatz mehrere Hunderttausend Fahrten enthält, definiere ich eine einfache neuronale Netzarchitektur auf Basis der TensorFlow Estimator API – inklusive Suchraum für die Parameter. Diese Spezifikation erzeugt ein neuronales Netz mit drei Hidden Layers, das eine Regressionsaufgabe löst (die erwartete Fahrtdauer). Dabei werden 50 Trials gestartet, um die optimalen Einstellungen für Lernrate, Regularisierungsfaktoren und maximale Schritte zu finden.
https://gist.github.com/gidutz/5408bb93d0e6ab7fe9fc5cb4a82447cc
Mit dieser Spezifikation kann ich über einen Python-Client einen Trainingsjob starten:
https://gist.github.com/gidutz/f166148d84c4d4beb98bc13b831b6284
Über den API-Client überwache ich den Joblauf und stelle das Modell nach Abschluss bereit, um es zu testen.
https://gist.github.com/gidutz/70b126b2a7d561e9d5f7f232d8f754eb
Damit ist die Bereitstellung einer Machine-Learning-Pipeline allein über API-Aufrufe abgeschlossen.
Vorhersagen abrufen
Um Vorhersagen zu erhalten, lade ich einen Teil der Testdaten in den Speicher und schicke ihn zur Inferenz an die bereitgestellte Modellversion:
https://gist.github.com/gidutz/e786c430c5ea767b1bec01bcee03a863
Lust auf weitere Beiträge? Schauen Sie in unseren Blog oder folgen Sie Gad auf Twitter.
Dank an Adam Horowitz für die fachliche Beratung