Pipelines#
Code und Daten verbinden#
Befehle wie dvc add
, dvc push
und dvc pull
können unabhängig von
Änderungen im Git-Repository vorgenommen werden und bieten daher nur die
Basis, um große Datenmengen und Modelle zu verwalten. Um tatsächlich
reproduzierbare Ergebnisse zu erzielen, müssen Code und Daten miteinander
verbunden werden.

Design: André Henze, Berlin#
Mit dvc run
könnt ihr einzelne Verarbeitungsstufen erstellen, wobei jede
Stufe durch eine, mit Git verwaltete, Quellcode-Datei sowie weiteren
Abhängigkeiten und Ausgabedaten beschrieben wird. Alle Stufen zusammen bilden
dann die DVC-Pipeline.
In unserem Beispiel dvc-example soll die erste Stufe die Daten in Trainings- und Testdaten aufteilen:
$ dvc run -n split -d src/split.py -d data/data.xml -o data/splitted \
python src/split.py data/data.xml
-n
gibt den Namen der Verarbeitungsstufe an.
-d
gibt Abhängigkeiten (dependencies) für das reproduzierbare Kommando an.
Wenn zum Reproduzieren der Ergebnisse beim nächsten Mal
dvc repo
aufgerufen wird, überprüft DVC diese Abhängigkeiten und entscheidet, ob diese auf dem aktuellen Stand sind oder erneut ausgeführt werden müssen, um aktuellere Ergebnisse zu erhalten.-o
gibt die Ausgabedatei oder das Ausgabeverzeichnis an.
In unserem Fall sollte sich der Arbeitsbereich geändert haben in:
.
├── data
│ ├── data.xml
│ ├── data.xml.dvc
+ │ └── splitted
+ │ ├── test.tsv
+ │ └── train.tsv
+ ├── dvc.lock
+ ├── dvc.yaml
├── requirements.txt
└── src
└── split.py
Die generierte dvc.yaml
-Datei sieht dann z.B. folgendermaßen aus:
stages:
split:
cmd: pipenv run python src/split.py data/data.xml
deps:
- data/data.xml
- src/split.py
outs:
- data/splitted
Da die Daten im Ausgabeverzeichnis nie mit Git versioniert werden sollten, hat
dvc run
dies auch bereits die data/.gitignore
-Datei geschrieben:
/data.xml
+ /splitted
Anschließend müssen die geänderten Daten nur noch in Git bzw. DVC übernommen werden:
$ git add data/.gitignore dvc.yaml
$ git commit -m "Create split stage"
$ dvc push
Werden nun mehrere Phasen mit dvc run
erstellt, wobei die Ausgabe eines
Kommandos als Abhängigkeit eines anderen angegeben wird, entsteht eine DVC
Pipeline.