29. Dezember 2023 von Azza Baatout
Der Weg zur Rückverfolgbarkeit in KI-Projekten
Unsere Motivation: Dinge können schiefgehen
Maschinelles Lernen kann in der Produktionsumgebung auf verschiedene Weise versagen. Es kann zu falschen Vorhersagen oder verzerrten Ergebnissen kommen. Oft ist es schwierig, ein solches unerwartetes Verhalten zu erkennen, insbesondere wenn der Betrieb erfolgreich zu sein scheint. Im Falle eines Vorfalls ermöglicht uns die Rückverfolgbarkeit (Traceability), die Ursache des Problems zu identifizieren und schnell zu handeln. Wir können leicht feststellen, welche Codeversion für das Training und die Vorhersage verantwortlich ist und welche Daten verwendet wurden.
Step-by-Step Guide to Developing a Traceable Data Pipeline
Durch die Schaffung klarer Pfade für Daten von der Quelle bis zum Ergebnis ermöglichen rückverfolgbare Pipelines den Teams, Fehler zu erkennen, die Ursachen von Problemen zu identifizieren und letztendlich die Qualität der Ergebnisse zu verbessern. Sie bilden eine solide Grundlage für reproduzierbare Forschung, kollaboratives Arbeiten und die Fähigkeit, Änderungen an Daten oder Modellen effizient zu handhaben.
DVC
In diesem Praxisbeispiel werden wir eine rückverfolgbare Datenpipeline mit DVC erstellen. Data Version Control ist ein kostenloses Open-Source-Tool für das Datenmanagement, die Automatisierung von ML-Pipelines und die Verwaltung von Experimenten. Es hilft ML-Teams, große Datensätze zu verwalten, Versionen von Modellen, Daten und Pipelines zu verfolgen und Projekte im Allgemeinen reproduzierbar zu machen. Hier erfahrt ihr mehr über DVC.
Setup
Für die Konfiguration verwende ich Python3. Ich füge DVC zu meiner Umgebung hinzu (conda oder poetry, je nach Vorliebe) und initialisiere DVC mit dem Befehl dvc init
.
Nachdem DVC initialisiert wurde, wird ein neues Verzeichnis namens .dvc/
erstellt. Es enthält interne Einstellungen, Cache-Dateien und Verzeichnisse, die der User normalerweise nicht sieht. Dieses Verzeichnis wird automatisch mit git add zur Staging Area hinzugefügt, so dass es einfach mit Git committed werden kann.
Schritt 1: Data Versionierung
Mit dvc add
können wir Datensätze, Modelle oder große Dateien einfach überwachen, indem wir die zu überwachenden Ziele angeben. DVC verwaltet die entsprechenden .dvc-Dateien und stellt die Datenkonsistenz im Workspace sicher.
Nach Ausführung des Befehls wird eine data.xml.dvc-Datei erstellt.
Der im Bild angezeigte MD5-Wert ist der Hash-Wert der Datei oder des Verzeichnisses, die oder das von DVC überwacht wird. In diesem Fall ist es der Hashwert der Datei data.xml. Diese Datei enthält die Informationen, die benötigt werden, um die Zieldaten im Laufe der Zeit zu verfolgen.
Für neue Dateien und Verzeichnisse, die noch nicht verfolgt werden, erstellt DVC neue .dvc-Dateien, um die hinzugefügten Daten zu verfolgen, und speichert sie im Cache.DVC unterstützt auch verschiedene Speichertypen: entweder Remote-Speicher bei Cloud-Anbietern, sogar selbst gehostet/lokale Speicher.
- Mit
dvc pull
können Datenartefakte, die von Kolleginnen und Kollegen erstellt wurden, heruntergeladen werden, ohne dass Zeit und Ressourcen für die lokale Neuerstellung aufgewendet werden müssen. - Mit
dvc push
können die neuesten Änderungen in den Remote- oder lokalen Speicher hochgeladen werden.
Schritt 2: Data Pipeline Definition
In diesem Beispiel wird eine DVC-Pipeline erstellt, indem drei Stages in der Datei dvc.yaml definiert werden:
- Die preprocess-Stage bereitet die Rohdaten für die weitere Verarbeitung vor.
- Die train-Stage trainiert ein beliebiges Modell mit den vorverarbeiteten Daten.
- Die evaluate-Stage bewertet die Leistung anhand der Ausgabe des Modells.
Diese Stages werden entweder manuell in der Datei „dvc.yaml“ definiert oder direkt über die Kommandozeile erstellt mit: dvc add stage
Dabei sind folgende Regeln zu beachten:
- n der Name der Stage
- d die Abhängigkeiten dieser Stufe
- o die Ausgabe der Ergebnisse
- p verwendet bestimmte Parameter aus der Datei
parameters.yaml
Im Folgenden wird eine Konfigurationsdatei mit dem Namen dvc.yaml erstellt, in der folgende Punkte definiert sind:
- cmd: Die Kommandozeile, die von der Stage ausgeführt wird
- deps: Die Liste der Abhängigkeiten
- params: Alle Parameter oder Hyperparameter, die aus der Datei params.yaml übernommen werden.
- outs: Die Liste der Ausgabedateien oder Ausgabeordner.
Schritt 3: Data Pipeline Reproduzierung
Um die Pipeline mit DVC zu reproduzieren, verwende ich den folgenden Befehl: dvc repro
Dieser Befehl reproduziert die gesamte Pipeline in der richtigen Reihenfolge entsprechend den in dvc.yaml
definierten Schritten.
Dieser Schritt wird jedoch übersprungen, wenn keine Änderungen gefunden werden. Wenn Sie einzelne Stages ausführen möchten, fügen Sie einen Stage-Namen wie unten gezeigt hinzu:
. Dies erzeugt eine Statusdatei namens dvc.lock, um die Ergebnisse der Reproduktion festzuhalten.dvc repro
<stage-name>
Nachdem dvc repro
ausgeführt wurde, verwende ich dvc push, um meine Änderungen in das Remote Repository zu übertragen. Wenn ich meine Daten wieder aus dem DVC-Repository herunterladen möchte - ähnlich wie bei git pull - benutze ich folgendes: dvc pull
Good Practice: es ist ratsam, dvc.lock
sofort zu committen, um den aktuellen Stand und die Ergebnisse zu speichern: git add dvc.lock && git commit -m “Save current reproduction state”
Kombination von DVC und Workflow-Automatisierungstools
Durch die Verknüpfung von DVC mit Workflow-Automatisierungstools wie GitHub Actions können wir sicherstellen, dass Änderungen an Ihren Daten konsistent und reproduzierbar sind. Jeder Schritt des Versionskontrollprozesses kann automatisiert und überwacht werden, um Fehler zu minimieren und Nachvollziehbarkeit zu gewährleisten.
Ausblick
Mit DVC können Daten und Modelle verfolgt werden, ähnlich wie mit Git - es ist sozusagen das Git für Daten. DVC hilft uns beim Aufbau einer nachvollziehbaren Machine-Learning-Pipeline. Wir können Experimente mit unseren Modellen durchführen und die Unterschiede zwischen den Modellen visualisieren, was die Nachvollziehbarkeit verbessert.