Machine-Learning-Projekte mit mlflow - Teil 1
Im letzten Beitrag haben wir das Konzept des Machine-Learning-Lifecycles vorgestellt. Dieser ermöglicht es uns die verschiedenen Phasen, die ein ML-Modell während seiner Entwicklung und seines Betriebs durchläuft, klar voneinander zu trennen und einzeln zu betrachten. Da dies ein relativ neues Konzept ist, gibt es nur sehr wenige Tools, die eine große Bandbreite an Werkzeugen zur Verfügung stellen, um den Lebenszyklus von ML-Modellen vollumfänglich zu unterstützen. Eines der Tools, das viele Herausforderungen der verschiedenen Phasen des ML-Lifecycles adressiert und Werkzeuge für die Entwicklung und das Deployment kollaborativer nachhaltiger ML-Modelle bietet, ist mlflow.
Mlflow ist nicht nur open source, sondern bietet auch umfangreiche Schnittstellen zu den relevanten Data-Science-Sprachen R und Python, sowie eine Schnittstelle zu Java und eine REST API. Im Folgenden wird beleuchtet, inwiefern mlflow in den verschiedenen Phasen des Lifecycles benutzt werden kann, um die Entwicklung von ML-Modellen zu professionalisieren und zu erleichtern.
mlflow
Das Open Source Tool mlflow bietet viele Funktionalitäten, um die Arbeit mit Machine Learning Modellen von der Entwicklung bis hin zur Produktivsetzung zu erleichtern. Dabei bilden die vier verschiedenen Komponenten von mlflow verschiedene Elemente des ML-Lifecycles ab und adressieren vier grundsätzliche Herausforderungen, die bei der Entwicklung von produktiven ML-Modellen auftreten können:
Experimentelles Machine Learning
Die mlflow tracking Komponente unterstützt Data Scientists unmittelbar bei der Entwicklung von ML-Modellen. Mit mlflow kann man verschiedene Experimente und deren Runs anlegen und verwalten. Da die Runs meistens in Form von Skriptausführungen (z.B. von R- oder Python-Skripten) stattfinden, gibt es zahlreiche mlflow tracking Funktionen für Python und R, um während eines Durchlaufs Parameter und Metriken speichern und direkt mit dem Run verknüpfen zu können. Neben Parametern und Metriken können auch selbst definierte Tags, Artefakte und sogar Modelle selbst gespeichert und mit dem Run verknüpft werden. Artefakte sind beliebige Dateien, beispielsweise Bild- oder Text-Dateien, die die Performance bzw. die Güte des Modells über die Metriken hinaus oder das spezifische Modell selbst beschreiben (z.B. Visualisierungen eines Decision Trees oder die Confusion Matrix für ein Klassifizierungsmodell). Liegen Informationen für mehrere Runs in mlflow vor, kann man diese entweder durch die jeweiligen Schnittstellen in R und Python abfragen und analysieren oder über das mlflow User Interface untersuchen. In besagter UI ist es möglich, die Parameter und Metriken verschiedener Durchläufe miteinander zu vergleichen, um die Beziehung zwischen Metriken und Parametern genauer zu analysieren. Darüber hinaus ermöglicht die mlflow tracking Komponente auch das kollaborative Arbeiten an Experimenten. So können verschiedene Nutzer in den gleichen Experimenten Runs erzeugen und ihre Ergebnisse vergleichen, nachdem sie beispielsweise verschiedene Modellansätze angewendet haben. Die mit einem Run verknüpften Modelle können genau wie Parameter und Metriken unter Angabe der eindeutigen Run-ID von jedem Nutzer abgerufen und genutzt werden.
Reproduzierbarkeit im Machine Learning
Die mlflow projects Komponente bietet eine Möglichkeit, um Machine-Learning-Projekte zu bündeln, zu teilen und zu reproduzieren. Dies ist vor allem dann vorteilhaft, wenn das Projekt aus mehreren Skripten besteht. Das ist häufig der Fall, da ein ML-Workflow meist aus mehreren voneinander weitestgehend unabhängigen Schritten besteht: Preprocessing, Modelltraining, Modellevaluation, etc. Im Idealfall teilt man die Schritte in einzelne Skripte auf, die unabhängig voneinander in verschiedenen Projekten kombiniert werden können. Diese Skripte können außerdem über mlflow projects parametrisiert werden, sodass die Skripte möglichst generisch angelegt werden und dann in verschiedenen Anwendungsfällen mit unterschiedlichen Parametern genutzt werden können.
Neben den auszuführenden Skripten enthält das mlflow project –das letztlich nur ein Verzeichnis ist– eine MLproject-Datei im YAML-Format, die als Konfigurationsdatei fungiert. Diese beschreibt aus welchen Schritten bzw. entry points das Projekt besteht. Ein entry point besteht aus einem Kommandozeilen-Befehl (z.B. Ausführung eines Python-Skripts) und einer optionalen Angabe von Parametern inklusive ihrer Datentypen (z.B. Hyperparameter von ML-Algorithmen oder Dateipfade der Daten). Die Ausführung des Projekts ist über die Kommandozeile mit einem entsprechenden mlflow-Befehl möglich. Außerdem kann ein MLproject mit einem conda environment oder einem docker image verknüpft werden, in denen das mlflow project ausgeführt wird. Dies garantiert, dass die richtigen Pakete und vor allem Paketversionen in den environments vorliegen, damit das Projekt für jeden Nutzer gleich ausgeführt werden kann. Die mlflow projects Komponente bietet somit ein standardisiertes Format, um ML-Projekte zu organisieren und auszuführen. So können Projekte einfach geteilt werden, ohne dass die Ergebnisse abhängig vom Nutzer oder deren lokalen Umgebungen sind.
Fazit & Ausblick
In diesem Beitrag wurde gezeigt, wie mlflow Data Scientists dabei unterstützen kann, Modelltrainingsergebnisse zu speichern und zu vergleichen. Außerdem wurde dargestellt, wie mlflow projects ein standardisiertes Format für ML-Projekte bietet, um verschiedene Schritte eines ML-Workflows zusammenzufassen und zu parametrisieren. Diese beiden Komponenten ermöglichen das kollaborative Arbeiten an Projekten durch das Zusammenführen der einzelnen Ergebnisse und das einfache Teilen von Modellen durch ein standardisiertes Format. Im nächsten Beitrag wird auf die restlichen Komponenten und deren Vorteile in Bezug auf Modellverwaltung und –deployment eingehen.
Sie möchten Machine-Learning-Modelle in Ihrem Unternehmen entwickeln, um datengetriebene Prozesse und Anwendungen aufzubauen? Als Ansprechpartner rund um das Thema Data Science, Machine Learning & Co. stehen wir Ihnen sehr gerne zur Verfügung. Sprechen Sie uns an.