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.

Git und DVC verbinden

Design: André Henze, Berlin

Mit dvc stage 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:

$ uv run dvc stage add \
    -n prepare \
    -p prepare.seed,prepare.split \
    -d src/dvc_example/prepare.py -d data/data.xml \
    -o data/prepared \
    uv run python src/dvc_example/prepare.py data/data.xml
-n

gibt den Namen der Verarbeitungsstufe an.

-p

gibt die Parameter aus der params.yaml-Datei an, die für diese Stufe verwendet werden sollen.

Siehe auch

Parametrisierung

-d

gibt Abhängigkeiten (dependencies) für das reproduzierbare Kommando an.

Wenn zum Reproduzieren der Ergebnisse beim nächsten Mal dvc repro 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.

Die generierte dvc.yaml-Datei sieht dann folgendermaßen aus:

stages:
  prepare:
    cmd: uv run python src/dvc_example/prepare.py data/data.xml
    deps:
    - data/data.xml
    - src/dvc_example/prepare.py
    params:
    - prepare.seed
    - prepare.split
    outs:
    - data/prepared

Ruft ihr nun uv run dvc repro auf, werden in data/prepared die Dateien test.tsv und train.tsv erstellt, sowie dvc.lock geschrieben. Die Verzeichnisstruktur sieht dann so aus:

├── .dvc
├── .dvcignore
├── .git
├── .gitignore
├── .pre-commit-config.yaml
├── .python-version
├── .venv
├── README.md
├── data
│   ├── .gitignore
│   ├── data.xml
│   ├── data.xml.dvc
│   └── prepared
│       ├── test.tsv
│       └── train.tsv
├── dvc.lock
├── dvc.yaml
├── params.yaml
├── pyproject.toml
├── src
│   └── dvc_example
│       ├── __init__.py
│       └── prepare.py
└── uv.lock

Siehe auch

dvc repro

Die neuen und geänderten Programm- und Konfigurationsdateien sollten nun in Git verwaltet werden:

$ git add data/.gitignore dvc.lock dvc.yaml src/dvc_example/prepare.py
$ git commit -m ':sparkles: Add prepare step'

Hinweis

DVC weiß durch die Pipeline-Definition, dass die Dateien in data/prepared in der prepare-Stufe generiert wurden. Mit uv run dvc repro oder uv run dvc commit könntet ihr sie jederzeit wieder herstellen.