In der Regel müssen bei der Entwicklung von Machine Learning Modelle zahlreiche Tests und Versuche durchgeführt werden, um die optimalen Input-Daten, Parameter und Algorithmen zu finden. Je mehr Experimente dabei ausgeführt werden, desto schwieriger wird es, einen Überblick darüber zu behalten, was funktioniert und was nicht.
So kann es schnell passieren, dass sich zwar nach stunden- oder tagelanger Arbeit ein zufriedenstellendes Ergebnis zeigt, man am Ende jedoch gar nicht mehr nachvollziehen kann, welche Änderung von welchem Parameter zu diesem Ergebnis geführt hat. Dieses Problem gibt es in jeder wissenschaftlichen Disziplin und wird meist durch Protokolle gelöst: eine Übersicht, in dem jedes durchgeführte Experiment sorgfältig protokolliert und festgehalten wird.
Auch Data Scientists nutzen oft eine ähnliche Methode und dokumentieren ihre Experimente entweder digital oder handschriftlich. Im Machine Learning funktioniert das aber nur bedingt, da drei wesentliche Faktoren festgehalten werden müssen: die Daten, der Code und das Modell. Selbst extrem genaue Notizen reichen meist nicht aus, um alles drei lückenlos zu erfassen.
Mit Hilfe von MLFlow kannst du jedoch Experimente vollständig automatisiert tracken, wodurch sich mühseliges protokollieren erübrigt. MLFlow lässt sich unkompliziert einrichten und passt sich problemlos an bestehende Arbeitsabläufe an.
Was ist MLFlow?
MLFlow ist eine Machine Learning-Plattform mit zahlreichen Komponenten. In diesem Artikel konzentrieren wir uns hauptsächlich auf die Funktion des Experiment Trackings. In einem früheren Beitrag haben wir uns bereits mit Model Registries auseinandergesetzt und ihre Funktionen erläutert. Zwischen Experiment Tracking und Model Registries gibt es zwar einige Überschneidungen, in einigen Punkten unterscheiden sie sich jedoch deutlich voneinander.
Experiment Tracking vs. Model Registries
Model Registries eignen sich vor allem für Modelle, die bereits in der Produktion eingesetzt werden. Sie tracken und visualisieren die Model-Performance und alle zugehörigen Metadaten. Doch für jedes Modell in der Produktion gibt es in der Regel auch Hunderte von gescheiterten Anläufen. Tools zum Tracken von Experimenten sind daher eher dafür konzipiert, alle Experimente - einschließlich der erfolglosen - festzuhalten. So wird der Forschungsprozess effizienter, da sichergestellt wird, dass keine Arbeit verloren geht oder doppelt durchgeführt wird.
MLFlow’s Python Bibliothek und Dashboard
Für das Experiment Tracking benötigst du zwei Komponenten von MLFlow: die Python-Bibliothek und die Web-UI. Beides lässt sich mit einem einzigen Befehl installieren:
pip install mlflow
Das Dashboard, in dem alle Experimente gespeichert werden, kannst du direkt einsehen, indem du mlflow ui ausführst und die Seite http://localhost:5000 im Browserfenster öffnest.
Dieses Dashboard bietet bereits einige ähnliche Funktionen wie ein Laborprotokoll: Du kannst Notizen hinterlegen, ältere Daten durchsuchen und neue Experimente aufsetzen.
Das Ganze wird vor allem dann interessant, sobald du zusätzlich auch die mlflow Python-Bibliothek verwendest. Mit etwas Code, den du zu deinen vorhandenen Machine Learning Code-Dateien hinzufügst, kannst du dann mühelos jeden einzelnen Durchlauf nachverfolgen. Dabei werden automatisch alle verwendeten Parameter, die Ergebnisse und sogar das vollständige Modell gespeichert.
Jedes Mal, wenn du ein Experiment mit diesem Code ausführst, wird ein neuer Eintrag von MLFlow protokolliert, den du im Dashboard einsehen kannst. Beachte dabei Folgendes:
- Im Python-Code haben wir uns auf eine experiment_id bezogen. Diese erscheint im Dashboard, sobald du ein neues Experiment in der Benutzeroberfläche erstellt hast. Da ein Experiment viele Durchläufe beinhalten kann, benötigst du nicht bei jedem Versuch mit neuen Parameterwerten oder anderen Variationen eine neue Experiment-ID.
- Dein bestehender Trainings- und Evaluierungscode muss sich innerhalb des mlflow.start_run Blocks befinden.
- Du kannst Parameter, Metriken und das gesamte Modell mit log_param, log_metric und sklearn.log_model protokollieren.
Ab hier kannst du Parameter nach Belieben ändern, ohne dir Sorgen machen zu müssen, den Überblick zu verlieren. Der Screenshot zeigt zum Beispiel das Ergebnis von zwei Experimenten, bei denen die Parameter "alpha" und "l1_ratio" geändert wurden. So kannst du direkt vergleichen, wie sich diese Metriken auf die Ergebnisse von r2 und rmse auswirken.
Eigene Notizen
Viele Wissenschaftler führen nach wie vor am liebsten ihr eigenes Notizbuch statt einer strukturierten Plattform, weil ihnen die vordefinierten Vorlagen nicht flexibel genug sind.
Was uns an MLFlow jedoch gefällt, ist, dass du an verschiedenen Stellen individuelle Notizen hinterlegen kannst: Es gibt die Möglichkeit, Notizen zu einem gesamten Experiment oder nur zu einem bestimmten Durchlauf zu machen.
MLFlow einrichten
Du kannst MLFlow auf verschiedenen Wegen einrichten. Du kannst es lokal einrichten, wie in unserem Beispiel oben, oder aber auf einem Remote-Server, sodass du ein einziges Dashboard für dein ganzes Team freigeben kannst.
Wenn du es lokal installierst, erstellt MLFlow ein Verzeichnis namens "mlruns" in demselben Verzeichnis, in dem du deinen Python-Code ausgeführt hast. In diesem Verzeichnis befinden sich die vollständigen Modell-Binärdateien (als .pkl-Dateien) für jeden Versuchsdurchlauf.
Möchtest du mehrere Modelle tracken und brauchst dafür mehr Speicherplatz, kannst du MLFlow so konfigurieren, dass deine Dateien stattdessen auf S3 oder einem anderen Cloud-Anbieter gespeichert werden.
MLFlow als Teil deiner Machine Learning Infrastruktur
Wir nutzen MLFlow als Teil unserer Open MLOps Architektur. Es lässt sich einzeln verwenden, funktioniert aber auch ausgezeichnet in Verbindung mit anderen MLOps-Komponenten wie z. B. Prefect oder einer Cloud-basierten Jupyter Notebook-Umgebung.
Wir setzen uns gerne mit neuen Herausforderungen bei der Entwicklung und Nachverfolgung von Machine Learning Modellen auseinander. Setze dich gerne mit uns in Verbindung, wenn du beim Einsatz von MLOps noch offene Fragen hast.