Machine-Learning-Projekte mit mlflow - Teil 2

Mlflow ist ein open-source-tool, um die Entwicklung und das Bereitstellen von ML-Modellen entsprechend dem ML-Lifecycle zu erleichtern. In einem vorherigen Beitrag wurde der ML-Lifecycle näher betrachtet. Im ersten Teil dieses Beitrags wurde das grundlegende Konzept von mlflow inklusive der Komponenten mlflow tracking und mlflow projects beleuchtet. Diese bieten viele Funktionen, um gemeinsam an ML-Projekten zu arbeiten und die Ergebnisse verschiedener Data Scientists zusammenzuführen, vergleichbar zu machen und in einem standardisierten Projektformat zu organisieren und auszuführen. Im zweiten Teil wollen wir nun die Komponenten mlflow models und mlflow model registry betrachten. Diese bieten die Möglichkeit, ML-Modelle verschiedener Frameworks in einem standardisierten Format zu speichern, zu verwalten und zu deployen. 

Modellverwaltung- und deployment

Die Komponenten mlflow models und mlflow model registry bieten zum einen ein universelles Format, um Modelle zu speichern und zu deployen sowie einen zentralen Speicher, um die Modelle zu verwalten. Im Kontext von mlflow werden Modelle unabhängig von ihrem ursprünglichen Framework und Format als Blackbox betrachtet, die für eine Menge an Input-Daten eine oder mehrere Voraussagen ausgibt.  Je nach Sprache, in der mlflow angewendet wird, können verschiedene Arten von Modellen gespeichert werden. Dabei unterscheiden sich die Modelle in dem Framework, mit dem sie erstellt wurden. Viele gängige Frameworks stellen in mlflow sogenannte flavors dar. Modelle, die mithilfe dieser Frameworks erstellt wurden, können mithilfe von mlflow in einem einheitlichen Format abgespeichert, geladen und deployed werden. Die unterstützten flavors umfassen in Python unter anderem: 

  • Scikit-learn 
  • TensorFlow 
  • Keras 
  • PyTorch 
  • H2O 
  • XGBoost 
  • ONNX 
  • Spark MLlib 

Speichert man ein Modell eines dieser flavors ab, erstellt mlflow ein Verzeichnis, das aus zwei Komponenten besteht. Zum einen aus dem Modell selbst in Form eines pickle-Files und zum anderen einem Konfigurations-File im YAML-Format, das den Modell-Flavor beschreibt und dabei unter anderem die Version des flavor-bestimmenden Python-Pakets (z.B. sklearn) angibt. Dieses Modell, das entweder separat mit einer save-Methode oder innerhalb eines Runs mit einer log-Methode gespeichert wurde, kann anschließend über die mlflow CLI entweder als REST-API oder im Rahmen von AWS SageMaker deployed werden. Beim Deployment als REST-API ist das Modell unter einem bestimmten Port erreichbar und liefert als Antwort auf einen POST-Request, der Daten im JSON-Format enthält, durch das Modell berechnete Voraussagen. 

Mit der model registry Komponente können Modelle, die mit einem run verknüpft sind, registriert und somit zentral verwaltet werden. Für ein registriertes Modell können aus Modellen nachfolgender Runs neue Versionen erstellt werden. Eine Modellversion kann die Phasen Staging und Production durchlaufen. Dabei kann sich ein registriertes Modell in Form von verschiedenen Versionen in unterschiedlichen Phasen befinden. Zum Beispiel kann die erste Version des Modells bereits produktiv laufen, während die zweite Version bereits für den produktiven Betrieb empfohlen wurde und sich in der Staging-Phase befindet und eine dritte Version noch in der Entwicklung ist. Der Übergang der Phasen kann entweder über die Schnittstellen oder über die UI gesteuert werden. In Kombination mit einer Plattformlösung wie databricks,  können Berechtigungen auf Nutzerebene vergeben werden, sodass nur bestimmte Benutzer:innen den Übergang zwischen den Phasen ausführen können. Die restlichen Nutzer:innen können den Übergang lediglich anfragen und müssen auf eine Freigabe warten. Für das Deployment bietet die model registry den Vorteil, dass nicht eine spezifische Modellversion deployed werden muss, sondern diejenige Version bzw. das spezifische Modell deployed werden kann, welches sich momentan in der Phase Production/Staging befindet. Somit kann zum Beispiel wöchentlich das Modell aus der Production-Phase deployed werden, unabhängig davon, ob und wie oft sich das Modell bereits geändert hat bzw. welche spezifische Version sich momentan in dieser Phase befindet. 

Fazit

Die verschiedenen mlflow Komponenten ermöglichen das kollaborative Arbeiten an Machine-Learning-Projekten. Mit der tracking-Komponente können Informationen über verschiedene runs hinweg gespeichert und verglichen werden. Mit der projects-Komponente können verschiedene Bausteine eines Machine-Learning-Workflows einheitlich gebündelt und geteilt werden. Die models- und model-registry-Komponenten bieten ein standardisiertes Format für ML-Modelle sowie eine zentrale Verwaltungsebene mit der Option, die Modelle unkompliziert als REST-API zur Verfügung zu stellen. Bei der Entwicklung entsprechend des ML-Lifecycles unterstützt mlflow den Entwicklungsprozess an den entscheidenden Stellen, sodass die Modelle kollaborativ und nachhaltig entwickelt und bereitgestellt werden können.

Als Ansprechpartner rund um das Thema Data Science, KI & Co. unterstützen wir Sie dabei, Machine-Learning-Modelle in Ihrem Unternehmen zu entwickeln, um somit datengetriebene Prozesse und Anwendungen aufzubauen. Sprechen Sie uns an.