Der Fluch des POCs
Jeder, der mit Machine-Learning-Anwendungsfällen zu tun hat, kennt vermutlich dieses Problem: Es steht mittlerweile eine große Fülle an Lösungen und Engines, vor allem Open Source, zur Verfügung. Schnell können erste Analysen und Modelle entwickelt werden, aber die Integration der Lösung in die Geschäftsprozesse erfordert nochmals deutlichen Mehraufwand. Oft bleibt es dann leider nur bei einem POC und ein trainiertes Modell findet nie Anwendung.
Zur Produktivsetzung gehört der Transfer von Datenaufbereitungen, gebildeten Merkmalen und trainierten Modellen in einen Deployment- bzw. Anwendungsprozess. Dieser findet häufig auf anderer Infrastruktur und im Worst Case sogar basierend auf einer anderen Technologie statt. Bestehende Arbeitsschritte müssen dann neu implementiert werden, in der Regel von anderen Personen, die das Modell entwickelt haben – Business Logic wird mehrfach vorgehalten.
Was dabei on top noch meist vernachlässigt wird, ist die ständige Versionierung der Modellstände sowie das Monitoring der Modellperformance. Meist gibt es immer nur das aktuellste Modell und keine Historie oder nachvollziehbare Entwicklung. Ergebnisse sind womöglich nicht mehr reproduzierbar.
Enter the Stage: MLflow
Ein Team um Matei Zaharia, den Spark-Gründer, hat sich nach eigenen Erfahrungen mit Kunden und Anwendern nun diesem Problem angenommen und eine Python-basierte Open-Source-Machine-Learning-Plattform namens MLflow veröffentlicht (www.mlflow.org). Sie wurde bereits im Juni auf dem Spark-Summit vorgestellt.
Ich finde es schade, dass die Veröffentlichung nicht die Wellen geschlagen hat, die die Vision dieser Plattform verdient. Daher stelle ich hier nochmal kurz die Eckdaten von MLflow vor. Das Produkt ist noch im Alpha-Status, also noch weit weg von produktivem Einsatz, aber der aktuelle Funktionsumfang und der generische Ansatz des Frameworks begeistern mich schon jetzt. Gerade erst gab es ein neues Release 0.5, das wiederum den Scope erweitert.
Drei Module
Das Framework besteht aktuell aus drei Komponenten:
Tracking
Das Tracking stellt einen Funktionsumfang in Python bereit, mit dem von Hyperparametern über Ergebnisse (Modell-Performance) bis hin zu Artefakten, wie sogar Charts, alles geloggt werden kann.
Dazu gibt es eine schicke Benutzeroberfläche über einen beinhalteten Tracking-Server, der die Ergebnisse darstellt und durchsuchbar macht. Dieses Tracking bietet nun die Möglichkeit, für jeden Trainings- oder Scoring-Lauf eines Modells Voreinstellungen, Parameter und Ergebnisse für ein kollektives Monitoring zu sammeln. Unter Python verwendet man einfache Funktionsaufrufe, ähnlich einem Logging-Call, um Werte für das Tracking zu sammeln. Alternativ ist es auch möglich, den Tracking-Server direkt über eine REST API anzusprechen, was die Verwendung jenseits von Python ermöglicht.
Projects
Dieses Modul ermöglicht das Abkapseln von ML-Projekten zu einem abgeschlossenen Paket oder Git Repository. Der Anwender des Projekts muss dabei gar nichts mehr über die interne Funktionsweise wissen. Die Einstiegspunkte und die Basiskonfigurationen werden über ein YAML-File festgelegt. Darüber kann z. B. auch gesteuert werden, wie ein notwendiges Conda-Environment aussieht, das dann von MLflow bei Bedarf erstellt wird.
Das bedeutet, dass man ein ML-Modell samt Datenaufbereitung über einen einzigen Kommandozeilenaufruf unter Angabe eines Git Repositorys starten kann. Der konkrete Datensatz wird dabei z. B. über seinen Pfad als Parameter übergeben. Diese feste Git-Verknüpfung ermöglicht dann auch problemlos, verschiedene Versionsstände eines Modells auszuführen.
Models – für jede Geschmacksrichtung
Das dritte Modul übernimmt die Schnittstelle zu nachgelagerten Technologien und ermöglicht ein vereinfachtes Deployment. „Models“ bietet dabei verschiedene Geschmacksrichtungen von Modellen (wörtlich „Flavors“ genannt). Ein Projekt wird dabei in einer der Flavors in einem Binary-File abgespeichert, z. B. als reine Python-Funktion oder als sklearn-, Keras-, TensorFlow-, PyTorch-, Spark-Mlib- oder H2O-Modell.
Zusätzlich gibt es bereits Unterstützung für die Cloud, z. B. für AzureML und Amazons Sagemaker. Ein begleitendes Config-File hilft analog zu „Projects“ dem Konsumenten wieder, das bereitgestellte Modell auf neue Daten anzuwenden.
Anwendung
Einfache Standardinstallation
Im Moment kann MLflow primär als Python-Modul genutzt werden. Ich habe die Installation bereits selbst über pip an einem Conda-Environment durchgeführt und die Beispiele aus dem Git Repository ließen sich problemlos starten. MLflow nutzt auch selbst den Conda Package Manager, um für Projekte einen vordefinierten Python-Interpreter vorzuhalten.
APIs
Die finale Anwendung muss allerdings nicht zwingend über Python passieren, da MLflow neben einem Command Line Interface noch eine REST API bietet. Diese kann sowohl für das Ausführen von Modellen als auch für das Loggen von Infos über den Tracking-Server genutzt werden.
Der eine Ring, sie alle zu binden?
Die Plattform ist, wie oben erwähnt, noch in einem frühen Alpha-Stadium. Dennoch lässt sich der Funktionsumfang sehen, und dieser ist erst der Anfang. Die Vision, ein Framework zu schaffen, das andere Frameworks vereinigt, ist sicher nicht neu und nicht zwingend von Erfolg gekrönt. Die angebotene Lösung, ML-Projekte verschiedenster Frameworks so abzukapseln, dass sie agnostisch in Bezug auf die Implementierung verteilt und angewendet werden können, muss sich erstmal beweisen – sowohl im Hinblick auf die Kompatibilität mit Zielumgebungen als auch im Hinblick auf die Performance und Reaktionsschnelligkeit.
Mich stimmen dabei aber dennoch zwei Dinge sehr zuversichtlich:
Matei ist an Bord
Matei, der verantwortliche Kopf hinter Spark, ist persönlich am Projekt beteiligt und war wohl symbolisch der erste Committer der Codebase. Wir haben es hier im aktuellen Stadium mit einem Open-Source-Produkt zu tun, aber die Crew dahinter hat es mit Spark bereits geschafft, das größte Open-Source-Projekt im Big-Data-Umfeld zu verwirklichen.
Ich habe daher keine Angst, dass MLflow nach einer anfänglichen Euphorie im Sand verlaufen wird. Im Gegenteil – ich erwarte, dass im Hinblick auf eine mögliche zukünftige kommerzielle Variante die Plattform schnell die Alpha-Phase verlassen wird.
Itʼs Python
In einem früheren Blogbeitrag hatte ich bereits vor Jahren dafür geworben, Python als zukünftige Lingua franca der Data Science zu erlernen. Die Entwicklung, die Python dabei in den letzten drei Jahren hingelegt hat, stellt jedoch meine kühnsten Erwartungen in den Schatten. Im „Economist“ wurde im Juli erst ein Beitrag veröffentlicht, dass Python sich zur beliebtesten Programmiersprache entwickelt.
Wenn man mal von Spark absieht, wo die aktuellsten Features immer zuerst für die primäre Scala-API bereitgestellt werden, scheinen sich die ML-Welt und vor allem auch die Deep-Learning-Frameworks auf Python als gemeinsame Sprache zu einigen. Dass MLflow trotz der Spark-/Scala-Historie der Entwickler von vornherein auf Python setzt, ist für mich ein wichtiges Signal. Python is here to stay.