DagsHub, DVC und MLflow – Drei Open-Source-Tools für einen skalierbaren Data-Science-Workflow

22.03.2023

Im Gegensatz zur klassischen Softwareentwicklung erfordern Datenprojekte eine umfassendere Versionierung und Nachverfolgung von Artefakten.

Neben dem Code müssen auch Modelle, Datensätze, Parameter und Metriken abgespeichert werden, die im Laufe des Projekts angepasst oder verändert werden können. Um ein Experiment zu reproduzieren, müssen alle Artefakte korrekt versioniert werden. Und das kann problematischer sein, als es zunächst klingt.

 

Übersicht über Experiment
Abbildung 1: Experiment Übersicht, Quelle: eigene Darstellung

 

Für die zentrale Speicherung und Organisation von Code gibt es üblicherweise Repositories auf GitHub, GitLab oder Azure DevOps. Allerdings stoßen sie bei der Speicherung von Datensätzen oder Modellartefakten schnell an ihre Grenzen, da diese oft größer als das Dateilimit von 60-100 MB sind. Es gibt zwar Erweiterungen, um diese Sonderfälle doch noch abzuspeichern, so können Parameter und Metriken theoretisch als Notiz im Code-Skript oder als extra angelegte Textdatei gespeichert werden. Praktikabel ist diese Methode jedoch nicht, und anfällig für menschliche Fehler, insbesondere bei mehreren Beteiligten im Projekt.

Wäre es nicht schön, man könnte eine Plattform nutzen, die ähnlich wie GitHub funktioniert, aber mehr für Datenprojekte optimiert ist? Genau hier kommt DagsHub ins Spiel.
DagsHub ist eine Plattform für Data Scientists und Machine Learning Ingenieure, um Daten, Modelle, Experimente und Code zu versionieren.
Es ermöglicht die Verwaltung von Repositories und ähnelt GitHub sehr. Allerdings bietet DagsHub zusätzliche Registerkarten wie Experimente, Daten, Modelle, Notizbücher, DVC und Git.

 

Auf der Plattform können wichtige Tools zum Verfolgen von Machine Learning (ML) – Experimenten integriert werden. Das erleichtert die Zusammenarbeit in Datenprojekten ungemein. Die Nutzung ist für bis zu drei Personen kostenlos. Bei vier und mehr Personen werden Kosten für ein Abonnement fällig[1].

In diesem Beitrag möchten wir DagsHub vorstellen und eine Einführung in die Verwendung dieses GitHub-Äquivalent mit MLflow und Data Version Control (DVC) geben. Beides sind Open-Source-Tools, die die Versionierung von Artefakten und das Tracking von Trainingsexperimenten ermöglichen. Anhand eines Beispiels zeigen wir, wie auch größere Teams ihre Datenprojekte ohne teure Lizenzprodukte effektiv managen können.

 

Einrichten eines Repositorys auf DagsHub

Um DagsHub zu nutzen, müssen wir uns zuerst registrieren und ein Repository einrichten, entweder indem wir ein neues erstellen oder ein bestehendes mit der Plattform verbinden.

 

Hier wird gezeigt, wo man ein Repository in DagsHub erstellen kann.
Abbildung 2: Repository in DagsHub erstellen, Quelle: eigene Darstellung (DagsHub)

 

Sobald wir das Repository eingerichtet haben, können wir den Inhalt einsehen, ähnlich wie auf GitHub. Dennoch fallen einige Unterschiede auf, wie beispielsweise extra Tabs für Datensets, Modelle und Notebooks. Das gute dabei: Jupyter Notebooks können wir im Gegensatz zu GitHub direkt auf der Plattform lesen und kommentieren. In den anderen Tabs landen die jeweiligen Artefakte, sobald wir sie mit Git oder DVC versionieren. Wie die Versionierung von Code mit Git funktioniert, kann hier nachgelesen werden. Für diesen Beitrag möchten wir eine Erklärung außenvor lassen, weshalb wir direkt zur Versionierung von großen Dateien mit DVC springen.

 

Versionierung von Datensets und Modellen mit DVC

Datensätze wie auch Modelldateien können schnell das Volumen-Limit von Git sprengen. Im Team müssen diese Artefakte aber auch geteilt und verwaltet werden. DVC schafft hier Abhilfe, indem es das Abspeichern und Tracking von großen Binärdaten ermöglicht.

Die Installation von DVC erfolgt mit dem pip Paketmanager:

pip install dvc

Im lokalen Repository müssen wir DVC initialisieren mit:

dvc init

Üblicherweise ist es erforderlich, nach der Installation einen externen Speicher wie Google Drive, Amazon S3, Azure Blob Storage oder Google Cloud Storage zu registrieren. DagsHub erleichtert diesen Prozess jedoch, indem es jedem Repository einen Speicherplatz zur Verfügung stellt. Die URL für diesen Speicherplatz finden wir in der Repository-Ansicht unter dem Remote-Button:

 

Speicherplatz in DagsHub
Abbildung 3: Speicherplatz in Repository, Quelle: eigene Darstellung (DagsHub)

 

Den Remote Speicher für DVC legen wir wie folgt fest:

dvc remote add origin

Nun müssen wir noch die Authentifizierung für den Speicher hinzufügen:

dvc remote modify origin --local auth basic
dvc remote modify origin --local user DAGSHUB_USERNAME
dvc remote modify origin --local password DAGSHUB_PASSWORT

Als Nächstes fügen wir einen Datensatz hinzu, den wir auf DagsHub speichern möchten. Um das Verzeichnis data/vibration hinzuzufügen, müssen wir folgenden Kommandozeilenbefehl ausführen:

dvc add data/vibration

Mit diesem Befehl wird eine neue .dvc-Datei erstellt. Dabei handelt es sich um eine kleine Textdatei, die Informationen (Hash-Werte) enthält. Die Hash-Werte zeigen eine Art verschlüsselten Pfad zur Originaldatei. Dadurch können wir auf die Original-Datei auf unserem Speicher zugreifen. Gleichzeitig wird der Datensatz der .gitignore hinzugefügt, sodass er nicht von Git versioniert wird.

data
├── vibration
│ └── mfpt_small.csv
└── mfpt_small.dvc

Der eigentliche Datensatz wird mit einem Push auf den DagsHub Speicher hochgeladen:

dvc push

Nun haben wir die Möglichkeit, sowohl Änderungen an den Daten als auch im Code vorzunehmen, können diese anschließend committen und die Änderung auf Git veröffentlichen:

git add data/vibration
git commit -m 'push data and code'
git push origin master

Auf GitHub können wir die .dvc-Dateien sehen, aber nicht die Daten selbst. Das liegt daran, dass die eigentlichen Daten auf DagsHub gespeichert sind. Auf DagsHub können wir sowohl die .dvc-Dateien als auch die Daten selbst sehen.

Diese Funktion ist äußerst nützlich, da wir nun sowohl den Code als auch die Daten auf einer einzigen Plattform betrachten können.

Im Gegensatz zu GitHub können wir auf DagsHub nicht nur Code-Skripte ansehen, sondern auch Jupyter Notebooks. Da Notebooks aufgrund ihrer Interaktivität bei Data Scientists sehr beliebt sind, bietet das einen echten Vorteil.

 

Datenimport in DagsHub
Abbildung 4: Datenimport, Quelle: eigene Darstellung (DagsHub)

 

Experimente protokollieren mit MLflow

Die Python-Bibliothek MLflow ermöglicht es Data Scientists, ihre Experimente zusammen mit Modellen und Parametern zu verfolgen. Allerdings verfolgt sie nicht den Code selbst.
DagsHub hingegen ermöglicht es, Experimente eindeutig einem Code-Stand zuzuordnen. Auf der Registerkarte „Experimente“ erhalten wir eine Auflistung dieser Experimente:

 

Experimente protokollieren mit MLflow
Abbildung 5: Experimente protokollieren mit MLflow, Quelle: eigene Darstellung (DagsHub)

 

Es ist üblich, alle Ausführungen der Experimente mit MLflow zu protokollieren, aber nicht jedes Mal den Code zu versionieren. Nur der Code, der zu nützlichen Ergebnissen führt, sollte in das Repository hochgeladen werden. Bei MLflow-Experimenten ist es jedoch nicht möglich, den verwendeten Code zu identifizieren. DagsHub stellt automatisch eine Verbindung zwischen den Experimenten und dem entsprechenden Code her. In der „Experimente“-Ansicht können wir jedem Experiment über den „Commit“-Tab einen eindeutigen Code-Stand zuordnen.

 

Im Folgenden wird demonstriert, wie MLflow zur Protokollierung von Experimenten verwendet wird.

Die Installation von MLflow erfolgt mit dem pip-Paketmanager:

pip install mlflow

Für das Tracking von Experimenten benötigen wir einen MLflow-Server, auf dem die Protokolle gespeichert werden. Oftmals wird der lokale Rechner als Server genutzt, was jedoch dazu führt, dass Teamkollegen keinen Zugriff auf die Protokolle haben. DagsHub bietet hierfür eine Lösung an, indem es einen speziell für das Repository eingerichteten Server bereitstellt. Die URI für diesen Server finden wir in der Repository-Ansicht unter dem „Remote“-Button:

 

Tracking von Experimenten mit DagsHub
Abbildung 6: Tracking von Experimenten, Quelle: eigene Darstellung (DagsHub)

 

Die URI stellen wir im Code vor dem Training des Modells ein. Anschließend benennen wir das Experiment und stellen optional ein, ob bestimmte Parameter und Metriken protokolliert werden sollen. Autolog zeichnet einige Standardparameter und -metriken auf.

mlflow.set_tracking_uri("https://dagshub.com/silahis.mera/_git.mlflow")mlflow.set_experiment("decision-tree")
mlflow.autolog()
x_train, x_test, y_train, y_test = train_test_split(data, labels, random_state=21, test_size=0.30)
clf = DecisionTreeClassifier(random_state=21)
clf.fit(x_train, y_train)

Das war’s! Ab sofort werden jedes Mal, wenn wir den Code ausführen, die Parameter und Metriken für jedes Experiment auf der Registerkarte „Experimente“ im DagsHub-Repository angezeigt.
Da wir die MLflow-Experimente jetzt auf einem zentralen Server statt in einer lokalen Datenbank protokollieren, können Teamkollegen über ihren Browser auf die Experimente zugreifen.

 

Vergleich zwischen MLflow-Experimenten

Wenn es eine große Anzahl an Experimenten gibt, können Teammitglieder leicht den Überblick verlieren. Um den besten Lauf zu finden, gibt es die Möglichkeit Experimente zu vergleichen. Dazu klicken wir in der „Experimente“-Ansicht auf die Kästchen aller Experimente, die wir vergleichen wollen und klicken dann auf „Vergleichen“.

Anschließend werden alle ausgewählten Experimente in einem Vergleich dargestellt:

 

Hier sieht man den Vergleich verschiedener MLflow-Experimente
Abbildung 7: Vergleich von MLflow-Experimenten, Quelle: eigene Darstellung (DagsHub)

 

Zur Darstellung der Evaluationsmetriken können außerdem Diagramme erstellt werden, um die Ergebnisse auf einen Blick zu visualisieren:

 

verschiedene Diagramme zur Darstellung von Evaluationsmetriken nutzen
Abbildung 8: Diagramme zur Darstellung von Evaluationsmetriken, Quelle: eigene Darstellung (DagsHub)

 

Mein Fazit: Bessere Kollaboration in Datenprojekten dank Open-Source-Tools

DagsHub ist eine benutzerfreundliche Alternative zu GitHub, die insbesondere für Datenprojekte einige gewichtige Vorteile bietet. Durch die Kombination von GitHub, DVC und MLflow können alle Anforderungen an Nachverfolgbarkeit und Reproduktion von Experimenten erfüllt werden. Besonders nützlich sind die DVC-Speicher und MLflow-Server, die pro Repository mitgeliefert werden und Einrichtungsaufwand sparen. Die Notebook-Ansicht und Experiment-Vergleiche sind weitere Extras, die man als Nutzer nicht mehr missen möchte.
Die Bedienbarkeit sollte für die meisten Machine-Learning-Ingenieure kein Problem darstellen, da MLflow bereits zum Techstack gehört und DVC die Syntax von Git nutzt. Die einzige Hürde wäre somit der Preis: DagsHub ist kostenlos für Teams von bis zu drei Personen, ab vier Personen fallen aber Abonnement-Kosten an. [1]
Insgesamt verbessert die Plattform den Entwicklungsprozess im Team zeitlich und administrativ. Ob die Vorteile die Kosten überwiegen, hängt vom Einzelfall ab. In jedem Fall können MLflow und DVC als reine Open-Source-Tools auch ohne DagsHub kostenlos genutzt werden.

 


[1] https://dagshub.com/pricing ^

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*