Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows
Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-Änderungen zu verfolgen – Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche Spezifische Kombination von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis geführt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von einer reproduzierbaren Simulationspipeline.
Das am weitesten verbreitete Tool dafür ist DVC (Data Version Control), das das Versionsmodell von Git erweitert, um große Datensätze und Pipeline-Stufen zu verarbeiten. Dieser Artikel behandelt die praktische DVC-Implementierung für wissenschaftliche Workflows – Pipeline-Konstruktion mit dvc.yaml, Parameterisolierung mit params.yaml, HPC/Slurm-Integration und aufkommende Provenienz-Tracking von W3C Prov-JSON – so können Sie deterministische Simulationskampagnen erstellen, die das Team überleben Umsatz, Hardware-Migration und jahrelange Projektlebenszyklen.
Schlüssel zum Mitnehmen
- Der Kernwert von DVC: Pipeline-Dateien (
dvc.yaml) machen Simulationen abhängigkeitsbewusst, sodassdvc repronur die Änderungen erneut ausführt. - Versionsreproduzierbarkeit: DVC verknüpft Daten-Snapshots (
.dvcDateien), Code-Commits (Git) und Parameterdateien (params.yaml) zu reproduzierbaren Experimentiereinheiten - HPC-Integration: Slurm-Batchplanung umschließt DVC für die Ausführung von Cluster-Native Pipeline ohne manuellen Eingriff
- Provenance Standards: W3C Prov-JSON (YProv4ML) tritt als interoperables Format auf, das zu Ro-Crate-Verpackungen ergänzt
- DVC vs Datalad: Wählen Sie DVC für Pipeline-orientierte Experimente; Wählen Sie DataLad für langfristige Datenkuration und verteilte Datensätze
Warum die Standardversionierung für Simulationsworkflows fehlschlägt
Git eignet sich hervorragend zum Tracking von Code-Änderungen. Es ist schrecklich, Datenänderungen zu verfolgen.
Wenn Sie eine DFT-Relaxationsberechnung ausführen, kann Git die resultierende .xyz-Kristallstrukturdatei (oft zehn MB) nicht speichern. Sie können es auf ein freigegebenes Laufwerk kopieren oder seinen SHA-256-Hash an eine Textdatei anhängen oder sich auf den Speicher verlassen. Alle drei Ansätze werden unterbrochen, wenn sich die Datenquelle ändert, wenn Sie sie mit Mitarbeitern teilen müssen, die keinen Zugriff auf das freigegebene Laufwerk haben, oder wenn Sie sechs Monate später wiederkommen und vergessen, welcher Parametersatz die Struktur mit der niedrigsten Energie erzeugt hat.
Datenversionstools lösen dies durch die Entkopplung von Datenverfolgung von Code-Tracking. Sie speichern aktuelle Dateien im Remote-Speicher (Google Drive, S3, ein freigegebenes NAS oder sogar ein anderes Git-Repository) und registrieren leichte Zeigerdateien im Git-Repository. Die Zeigerdateien – in der Regel kleine .dvc-Dateien oder Git-Annex-Symlink-Referenzen – enthalten Metadaten (Checksum, Remote-Standort, Versions-Tag), ohne die tatsächlichen Daten zu duplizieren.
Diese Trennung ist für Simulations-Workflows wichtig, da das Datenvolumen unabhängig vom Codevolumen skaliert wird. Eine einzelne Simulationskampagne kann Tausende von Trajektoriendateien erzeugen, während die Python-Skripte, die sie erzeugen, in einigen hundert Zeilen bleiben.
Die Pipeline-Lücke
Die meisten Forscher beginnen mit der Ad-hoc-Datenverfolgung: Ein Bash-Skript, das Berechnungen in der Reihenfolge ausführt, die Ergebnisse in ein Verzeichnis results/ kopiert und die endgültigen Zahlen in ein Google Sheet eingefügt werden. Das funktioniert für kleine Projekte. Es bricht zusammen, wenn:
- Neulauf mit unterschiedlichen Parametern – Sie müssen sich merken, welche
params.yaml-Datei verwendet wurde, und nur die geänderten Phasen erneut ausführen - Debugging-Fehler – Sie müssen wissen, ob der Fehler auf Datenbeschädigung, Code-Änderungen oder Parameterfehlanpassungen zurückzuführen ist
- Team Handoff – Ein neuer Schüler kann die Pipeline nicht aus einem
bash-Skript und einem Ordner mit verwaisten Dateien rekonstruieren
Die DVC-Pipeline-Definitionsdatei (dvc.yaml) schließt diese Lücke, indem sie Phasen mit expliziten Abhängigkeiten und Ausgaben deklariert. Jede Phase wird nur dann erneut ausgeführt, wenn sich die Abhängigkeiten ändern (dvc repro <stage>), wodurch Simulationskampagnen beim erneuten Ausführen von Berechnungen mit unterschiedlichen Parametern dramatisch effizienter werden.
DVC-Pipeline-Konstruktion für wissenschaftliche Workflows
Eine DVC-Pipeline-Datei ist ein deklaratives YAML-Dokument, das die Abhängigkeit Ihrer Simulationsschritte voneinander abbildet. Hier ist ein konkretes Beispiel für einen Workflow für Computational Materials Science:
# dvc.yaml — DFT relaxation and energy calculation pipeline
stages:
relax:
cmd: python src/relax.py
deps:
- data/raw_crystal_structure.xyz
- src/relax.py
params:
- params.yaml
outs:
- results/relaxed_structure.xyz
energy:
cmd: python src/energy.py
deps:
- results/relaxed_structure.xyz
- src/energy.py
params:
- params.yaml
outs:
- results/energies.txt
metrics:
- results/energies.txt
visualize:
cmd: python src/plot.py
deps:
- results/energies.txt
- src/plot.py
outs:
- figures/energy_plot.png
Jede Etappe erklärt:
cmd: Der Befehl, der die Ausgaben dieser Stufe generiertdeps: Dateien, die diese Phase, wenn sie geändert werden, auslösenparams: Parameterdateien, die bei einer erneuten Ausführung dieser Phase auslösenouts: Dateien, die in dieser Phase erstellt wurden (verfolgen als Datenversionen)metrics: Dateien, die DVC zum Experimentieren numerisch verfolgt
Warum params.yaml wichtig ist
Die Datei params.yaml isoliert Simulationsparameter aus Ausführungsskripten. Dies ist entscheidend für materialwissenschaftliche Workflows, bei denen derselbe Simulationscode hunderte Male mit unterschiedlichen Parametern ausgeführt wird:
# params.yaml
simulator:
cutoff_energy: 500 # eV
kpoints: [8, 8, 8]
tolerance: 1e-6
optimization:
max_steps: 200
algorithm: ionic
Wenn Sie tolerance von 1e-6 in 1e-8 ändern und dvc repro ausführen, erkennt DVC die Änderung von params.yaml und führt jede davon abhängige Phase erneut aus. Die resultierende Datei relaxed_structure.xyz erhält ein neues Versions-Tag. Die alte Version bleibt im Cache verfügbar – Sie verlieren keine historischen Läufe.
Für Parameter-Sweeps können Sie --set-param verwenden, um Werte zu überschreiben, ohne die Datei zu ändern:
dvc exp run --set-param sim.tolerance=1e-8 --set-param sim.cutoff_energy=450
Dadurch wird ein neuer Experimentzweig erstellt, der sowohl die ursprünglichen als auch die geänderten Läufe in Ihrem Pipeline-Verlauf beibehält.
Versionierte Reproduzierbarkeit – der konzeptionelle Beitrag von DVC
Der Blog von DVC (Dezember 2021) führte die „versionierte Reproduzierbarkeit“ als die Fähigkeit ein, nicht nur ein Ergebnis, sondern auch den Exact experimental state nachzubilden, der es erzeugt hat. Dies unterscheidet DVC von der generischen Versionierung:
- Standardversionierung Verfolgen Sie Änderungen an Dateien im Laufe der Zeit (Git-Zweck)
- Versionsreproduzierbarkeit Verfolgen Sie, welche bestimmte Datenversion, Code-Commit und Parameterdateikombination ein bestimmtes Ergebnis erzeugt hat (DVC-Zweck)
DVC erreicht dies durch die Verknüpfung von drei unabhängig versionierten Artefakten:
| Artefakt | Versionierungssystem | Was es verfolgt |
|---|---|---|
.dvc Zeigerdateien |
DVC | Datendateiversion + Remote-Standort + Prüfsumme |
| Git verpflichtet | Git | Codeversion + Commit-Nachricht + Diff |
params.yaml |
Git | Parameterdateiversion + Änderungen auf Feldebene |
Die Kombination dieser drei schafft eine reproduzierbare Einheit – ein „versioniertes Experiment“, das isoliert rekonstruiert werden kann. Dies ist für die Simulation von Bedeutung, da Experimente iterativ verfeinert werden. Die Forscher müssen wissen, was funktioniert hat, und es reproduzieren können, ohne jeden Zwischenschritt erneut ausführen zu können.
Praktische Implikationen
Wenn ein Prüfer nach den Daten hinter einer veröffentlichten Figur fragt, können Sie Folgendes angeben:
- Der Git-Commit-Hash (Code-Version)
- Die Referenzdatei-Referenz
.dvc(Datenversion) - Die Datei
params.yamlbei diesem Commit (Parameterversion)
Zusammen reichen diese drei Artefakte aus, um das Ergebnis auf jeder Maschine zu reproduzieren. Dies ist der Goldstandard für die Reproduzierbarkeit der Simulation – weit über Container (die Codeumgebungen einfrieren) oder nackte Git-Repositories (die keine großen Daten verarbeiten können).
Versuchswarteschlange und Management
Das Experiment-Management (dvc exp) von DVC erweitert das Pipeline-Modell, um gleichzeitige und in der Warteschlange gestellte Experimente zu unterstützen:
# Run a single experiment with custom parameters
dvc exp run -S sim.tolerance=1e-8
# Queue multiple experiments
dvc exp run --queue -S sim.tolerance=1e-8
dvc exp run --queue -S sim.tolerance=1e-6
dvc exp run --queue -S sim.tolerance=1e-5
# Execute queued experiments
dvc exp run
Das Flag --queue verzögert die Ausführung, sodass Sie mehrere Experimente vorbereiten und diese nacheinander ausführen können. Dies ist wertvoll für Computerexperimente, die stundenlang oder tagelang ausgeführt werden. Sie können einen Parameter-Sweep über Nacht in die Warteschlange stellen, ohne jeden Lauf manuell zu starten.
Für den Experimentvergleich bietet DVClive Echtzeit-Metrik-Tracking:
# src/metrics.py — DVCLive integration
from dvclive import Live
with Live() as live:
for step in range(n_iterations):
result = run_step(step)
live.step = step
live.log("energy", result["total_energy"])
live.log("forces", result["max_force"])
Dies erzeugt ein interaktives Vergleichs-Dashboard, in dem Sie sehen können, wie sich Energie und Kräfte bei Parameter-Sweeps entwickeln.
Ausführen von DVC-Pipelines auf HPC-Clustern
Die meisten Computerwissenschaftler betreiben keine Pipelines auf Laptops. Sie führen sie auf Clustern mit Slurm-, PBS- oder LSF-Schedulern aus. DVC lässt sich über den srun-Wrapper in Slurm integrieren und ermöglicht die Ausführung von generativen Pipeline-Ausführungen:
# Run a single pipeline stage with SLURM resource allocation
srun dvc repro -n relax --job slurm-job.sh
# Run all pipeline stages on the cluster
srun dvc repro
Das Flag --job weist DVC an, jede Phase über den Job-Scheduler von Slurm auszuführen und automatisch zu bearbeiten:
- Clusterspezifische Ressourcenzuordnung (Speicher, CPU, GPU-Knoten)
- Batch-Modus-Ausführung ohne manuellen Eingriff
- Automatische Jobwarteschlange für Pipeline-Stufen
- Integration mit clusterspezifischen Dateisystemen und Speicher (LUSTRE, GPFS, BEEGFS)
ARXIV 2505.06558v2 (September 2025) zeigt diese Integration für materialwissenschaftliche Workflows mit DFT-Berechnungen auf HPC-Clustern. Der entscheidende Vorteil ist, dass dvc repro Cluster-fähig wird. Wenn eine Phase fehlschlägt oder sich ihre Abhängigkeiten ändern, übernimmt Slurm die Ressourcenzuweisung, um nur die erforderlichen Phasen erneut auszuführen.
Überlegungen zum Clusterspeicher
Der Remote-Speicher von DVC funktioniert gut mit Cluster-Dateisystemen. Sie können DVC so konfigurieren, dass das Lüster- oder GPFS-Dateisystem des Clusters als DVC-Remote verwendet wird:
# Configure a cluster storage remote
dvc remote modify cluster_storage token_url "https://cluster-storage.example.com"
Dies vermeidet den Aufwand beim Kopieren von Daten in den externen Cloud-Speicher und hält die Pipeline innerhalb der Speicherhierarchie des Clusters eigen.
W3C Prov-JSON Provenienz-Tracking
Während DVC Pipeline-Stufen und Datenversionen verfolgt, erzeugt es nativ kein maschinell umsetzbares Provenienzdiagramm. Dafür benötigen Sie einen Provenienzstandard – und das aufkommende Format ist W3C Prov-JSON.
Yprov4ML (ArXiv Juli 2025) implementiert die W3C Proven-JSON-Provenienz mit minimalen Code-Modifikationen. Es erfasst:
- Wer hat das Experiment ausgeführt (Benutzeridentität)
- Was Daten und Code wurden verwendet (Quelle Provenienz)
- Wie Das Experiment lief (Execution Provenienz)
- Warum (optionale Motivation, gebunden an Forschungsziele)
Die Ausgabe ist ein Prov-JSON-Diagramm – ein gerichteter Graph, in dem Knoten Entitäten (Dateien, Parameter, Code-Commits) und Kanten darstellen (abgeleitet von, erzeugt von, erstellt, verwendet von By). Dieses Format ermöglicht:
- Interoperabilität über Provenienzsysteme: Prov-JSON ist maschinenlesbar und kann mit SPARQL- oder Graph-Datenbanken abgefragt werden
- Faire Daten-Konformität: Prov-JSON-Diagramme erfüllen faire Prinzipien, indem sie die Datenlinien und die Wiederverwendungsbedingungen dokumentieren
- Institutionelle Zusammenarbeit: Prov-JSON ist ein W3C-Standard, daher sind Provenienz-Diagramme verschiedener Institutionen kompatibel
Prov-JSON gegen Ro-Crate
Es ist nützlich, Prov-JSON von Ro-Crate zu unterscheiden, da beide in Reproduzierbarkeitsdiskussionen erscheinen:
| Aspekt | Ro-Crate | prov-json |
|---|---|---|
| Zweck | Paketformat für Rich-Metadaten | Datenformat für Provenienzdiagramme |
| Umfang | Ganzer Datensatz + zugehörige Ressourcen | Ausführungslinie und Abhängigkeiten |
| Format | json-ld | JSON (PROV-Standard) |
| Interoperabilität | Eigenständiges Paket | Graph-basiert, abfragefähig |
| Beziehung | Komplementär, nicht konkurrierend |
Sie befassen sich mit verschiedenen Reproduzierbarkeitsschichten. Ro-Crate packt Ihr Dataset mit Metadaten. Prov-JSON verfolgt die Berechnungslinie der Erstellung dieses Datensatzes. Die Verwendung beider zusammen bietet die volle Reproduzierbarkeit: „Hier sind die Daten“ (Ro-Crate) plus „Hier ist, wie es produziert wurde“ (prov-json).
Wann verwenden Sie DVC vs DataLad vs. Prov-kompatible Bibliotheken
Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken hängt von Ihren Workflow-Mustern ab:
| Kriterium | DVC | datalad | Prov-Bibliotheken |
|---|---|---|---|
| Hauptanwendungsfall | Pipeline-orientierte Experimente | Langfristige Datenkuration | Maschinell umsetzbare Provenienz |
| Datengröße | Große Dateien (Modelle, Simulationen) | Große verteilte Datensätze | N/A (metadatenorientiert) |
| Ausführungsmodell | Bühnenbasierte Pipeline (dvc repro) |
Befehlsbasiert (datalad run) |
Dekorateur |
| HPC-Integration | srun dvc repro |
Native Git-Anhang + SSH | konfigurierbar |
| Provenienzausgabe | .dvc Dateien + Git-Verlauf |
Git-Annex-Symlinks + Git-Log | Prov-JSON-Diagramm |
| am besten für | Material-Science-Pipelines, Parameter-Sweeps | Langfristige Repository-Kuration, Einhaltung der Gebote | Faire Daten, institutionelle Provenienz |
DVC ist genau das Richtige für Sie, wenn:
- Ihr Workflow hat mehrere abhängige Phasen (Entspannung → Eigenschaftsberechnung → Visualisierung)
- Sie benötigen Parameter-Sweeps mit automatischer Nachlauf
- Sie möchten verfolgen, welche Parameterkombination das Ergebnis mit der niedrigsten Energie erzeugt
Datalad ist genau das Richtige für Sie, wenn:
- Sie kuratieren ein langfristiges Dataset-Repository
- Sie benötigen Git-Annex-Symlinks für die effiziente Handhabung von Großdateien
- Sie arbeiten mit verteilten Datensätzen über Institutionen hinweg
- Sie benötigen die Einhaltung von Geboten (häufig in der Neuroimaging)
Pro-konforme Bibliotheken sind für Sie richtig, wenn:
- Sie benötigen maschinell umsetzbare Provenienz für faire Einhaltung
- Sie möchten ein abfragefähiges Provenienzdiagramm für die Datenabstammung
- Sie arbeiten in verschiedenen Institutionen mit verschiedenen Provenienzsystemen zusammen
- Sie veröffentlichen in einem fairen Daten-Repository
Zusammenstellen – ein praktischer Workflow
Hier ist ein praktisches Workflow-Muster, das alle oben genannten Konzepte kombiniert:
# 1. Initialize the repository
git init
dvc init
# 2. Add the data
dvc add data/raw_crystal_structure.xyz
# 3. Run the pipeline
dvc repro
# 4. Check the results
dvc metrics show results/energies.txt
# 5. Run experiments with different parameters
dvc exp run -S sim.tolerance=1e-8 --set-param sim.cutoff_energy=550
# 6. Push data and experiments to remote
dvc push
dvc exp push
git push origin main
# 7. (Optional) Generate PROV-JSON provenance
python src/provenance.py --output provenance.json
Dieses Muster stellt sicher, dass jedes Simulationsergebnis auf seine genaue Datenversion, das Code-Commit und die Parameterdatei zurückgeführt werden kann. Die Prov-JSON-Ausgabe (Schritt 7) fügt eine maschinenaktionsfähige Provenienzschicht auf der DVC-Pipeline hinzu.
Häufige Fehler – was zu vermeiden
Fehler 1: Alles versionieren – Führen Sie nicht dvc add in jeder Ausgabedatei aus. Verfolgen Sie nur Dateien, die in nachfolgende Phasen eingegeben werden oder die Endergebnisse darstellen. Zwischendateien (wie Raw Force Arrays) sollten in git bleiben oder vollständig ausgeschlossen werden. Überaddieren erzeugt Pipeline-Lärm.
Fehler 2: Hardcoding-Pfade: Verwenden Sie in dvc.yaml keine absoluten Pfade. Verwenden Sie relative Pfade, damit die Pipeline auf verschiedenen Computern und Clusterkonfigurationen funktioniert.
Fehler 3: Datentypen mischen: Geben Sie keine Simulationsparameter und modellieren Sie Prüfpunkte in derselben .dvc-Datei. Halten Sie Datentypen getrennt, um Cache-Konflikte zu vermeiden.
Fehler 4: Provenienz ignorieren – DVC-Dateien allein reichen nicht für eine faire Einhaltung aus. Wenn Ihre Institution Provenienzdiagramme benötigt, koppeln Sie DVC mit Prov-JSON-Ausgabe (Yprov4ML) oder Ro-Crate-Verpackungen.
Fehler 5: Vergessen von params.yaml — Wenn Sie in Ihren Skripten Hardcode-Parameter in Ihren Skripten vergeben, anstatt sie in params.yaml zu isolieren, wird das Parameter-Tracking von DVC nutzlos. Verwenden Sie für Simulationsparameter immer params.yaml.
Zusammenfassung
DVC wandelt wissenschaftliche Workflows aus fragilen, speicherabhängigen Prozessen in deterministische, abhängigkeitsbewusste Pipelines um. Die wichtigste Erkenntnis ist, dass dvc.yaml Pipeline-Dateien und die Parameterisolation params.yaml „versionierte Reproduzierbarkeit“ erstellen – die Fähigkeit, nicht nur ein Ergebnis zu rekonstruieren, sondern auch den exakten experimentellen Status (Datenversion + Code-Commit + Parameterdatei), der es erzeugt hat. Dies geht über Container hinaus (die Code-Umgebungen einfrieren) und über Git hinaus (die keine großen Datensätze verarbeiten können).
Für die HPC-Integration ermöglicht der srun-Wrapper von Slurm die Ausführung einer Cluster-nativen Pipeline ohne manuellen Eingriff. Für die Provenienz bildet sich W3C Prov-JSON (Yprov4ML) als interoperables Format, das zu Ro-Crate-Verpackungen komplementiert wird und die maschinenschaltbare Datenlinie ermöglicht, die den Anforderungen der fairen Einhaltung genügt.
Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken hängt von Ihren Workflow-Mustern ab: DVC für pipeline-orientierte Experimente, DataLad für die Langzeit-Datenkuration und Prov-Bibliotheken für maschinell umsetzbare Provenienzdiagramme. Die meisten Simulationsteams profitieren von der Verwendung von DVC für die Pipeline-Ausführung und Prov-JSON für die Provenienzverfolgung – die beiden Tools sind komplementär und konkurrieren nicht.
Verwandte Anleitungen
- Reproduzierbarkeit jenseits von Containern — Deckt DVC-Grundlagen, Ro-Crate-Provenienzverpackungen und containerbasierte Reproduzierbarkeitsmuster ab
- Verwalten von PDE-Problemen im großen Maßstab — Erörtert das Management von Clusterressourcen und HPC Workflows
- Verifikation vs. Validierung in wissenschaftlichen Simulationen — Erklärt den breiteren Kontext der Reproduzierbarkeit für Simulationsergebnisse</fs_write_file>
</tool_call>
<tool_call>
<function=fs_write_file>
< Parameter=Content>
Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows
Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-Änderungen zu verfolgen – Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche Spezifische Kombination von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis geführt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von einer reproduzierbaren Simulationspipeline.
Das am weitesten verbreitete Tool dafür ist DVC (Data Version Control), das das Versionsmodell von Git erweitert, um große Datensätze und Pipeline-Stufen zu verarbeiten. Dieser Artikel behandelt die praktische DVC-Implementierung für wissenschaftliche Workflows – Pipeline-Konstruktion mit dvc.yaml, Parameterisolierung mit params.yaml, HPC/Slurm-Integration und aufkommende Provenienz-Tracking von W3C Prov-JSON – so können Sie deterministische Simulationskampagnen erstellen, die das Team überleben Umsatz, Hardware-Migration und jahrelange Projektlebenszyklen.
Schlüssel zum Mitnehmen
- Der Kernwert von DVC: Pipeline-Dateien (
dvc.yaml) machen Simulationen abhängigkeitsbewusst, sodassdvc repronur die Änderungen erneut ausführt. - Versionsreproduzierbarkeit: DVC verknüpft Daten-Snapshots (
.dvcDateien), Code-Commits (Git) und Parameterdateien (params.yaml) zu reproduzierbaren Experimentiereinheiten - HPC-Integration: Slurm-Batchplanung umschließt DVC für die Ausführung von Cluster-Native Pipeline ohne manuellen Eingriff
- Provenance Standards: W3C Prov-JSON (YProv4ML) tritt als interoperables Format auf, das zu Ro-Crate-Verpackungen ergänzt
- DVC vs Datalad: Wählen Sie DVC für Pipeline-orientierte Experimente; Wählen Sie DataLad für langfristige Datenkuration und verteilte Datensätze
Warum die Standardversionierung für Simulationsworkflows fehlschlägt
Git eignet sich hervorragend zum Tracking von Code-Änderungen. Es ist schrecklich, Datenänderungen zu verfolgen.
Wenn Sie eine DFT-Relaxationsberechnung ausführen, kann Git die resultierende .xyz-Kristallstrukturdatei (oft zehn MB) nicht speichern. Sie können es auf ein freigegebenes Laufwerk kopieren oder seinen SHA-256-Hash an eine Textdatei anhängen oder sich auf den Speicher verlassen. Alle drei Ansätze werden unterbrochen, wenn sich die Datenquelle ändert, wenn Sie sie mit Mitarbeitern teilen müssen, die keinen Zugriff auf das freigegebene Laufwerk haben, oder wenn Sie sechs Monate später wiederkommen und vergessen, welcher Parametersatz die Struktur mit der niedrigsten Energie erzeugt hat.
Datenversionstools lösen dies durch die Entkopplung von Datenverfolgung von Code-Tracking. Sie speichern aktuelle Dateien im Remote-Speicher (Google Drive, S3, ein freigegebenes NAS oder sogar ein anderes Git-Repository) und registrieren leichte Zeigerdateien im Git-Repository. Die Zeigerdateien – in der Regel kleine .dvc-Dateien oder Git-Annex-Symlink-Referenzen – enthalten Metadaten (Checksum, Remote-Standort, Versions-Tag), ohne die tatsächlichen Daten zu duplizieren.
Diese Trennung ist für Simulations-Workflows wichtig, da das Datenvolumen unabhängig vom Codevolumen skaliert wird. Eine einzelne Simulationskampagne kann Tausende von Trajektoriendateien erzeugen, während die Python-Skripte, die sie erzeugen, in einigen hundert Zeilen bleiben.
Die Pipeline-Lücke
Die meisten Forscher beginnen mit der Ad-hoc-Datenverfolgung: Ein Bash-Skript, das Berechnungen in der Reihenfolge ausführt, die Ergebnisse in ein Verzeichnis results/ kopiert und die endgültigen Zahlen in ein Google Sheet eingefügt werden. Das funktioniert für kleine Projekte. Es bricht zusammen, wenn:
- Neulauf mit unterschiedlichen Parametern – Sie müssen sich merken, welche
params.yaml-Datei verwendet wurde, und nur die geänderten Phasen erneut ausführen - Debugging-Fehler – Sie müssen wissen, ob der Fehler auf Datenbeschädigung, Code-Änderungen oder Parameterfehlanpassungen zurückzuführen ist
- Team Handoff – Ein neuer Schüler kann die Pipeline nicht aus einem
bash-Skript und einem Ordner mit verwaisten Dateien rekonstruieren
Die DVC-Pipeline-Definitionsdatei (dvc.yaml) schließt diese Lücke, indem sie Phasen mit expliziten Abhängigkeiten und Ausgaben deklariert. Jede Phase wird nur dann erneut ausgeführt, wenn sich die Abhängigkeiten ändern (dvc repro <stage>), wodurch Simulationskampagnen beim erneuten Ausführen von Berechnungen mit unterschiedlichen Parametern dramatisch effizienter werden.
DVC-Pipeline-Konstruktion für wissenschaftliche Workflows
Eine DVC-Pipeline-Datei ist ein deklaratives YAML-Dokument, das die Abhängigkeit Ihrer Simulationsschritte voneinander abbildet. Hier ist ein konkretes Beispiel für einen Workflow für Computational Materials Science:
# dvc.yaml — DFT relaxation and energy calculation pipeline
stages:
relax:
cmd: python src/relax.py
deps:
- data/raw_crystal_structure.xyz
- src/relax.py
params:
- params.yaml
outs:
- results/relaxed_structure.xyz
energy:
cmd: python src/energy.py
deps:
- results/relaxed_structure.xyz
- src/energy.py
params:
- params.yaml
outs:
- results/energies.txt
metrics:
- results/energies.txt
visualize:
cmd: python src/plot.py
deps:
- results/energies.txt
- src/plot.py
outs:
- figures/energy_plot.png
Jede Etappe erklärt:
cmd: Der Befehl, der die Ausgaben dieser Stufe generiertdeps: Dateien, die diese Phase, wenn sie geändert werden, auslösenparams: Parameterdateien, die bei einer erneuten Ausführung dieser Phase auslösenouts: Dateien, die in dieser Phase erstellt wurden (verfolgen als Datenversionen)metrics: Dateien, die DVC zum Experimentieren numerisch verfolgt
Warum params.yaml wichtig ist
Die Datei params.yaml isoliert Simulationsparameter aus Ausführungsskripten. Dies ist entscheidend für materialwissenschaftliche Workflows, bei denen derselbe Simulationscode hunderte Male mit unterschiedlichen Parametern ausgeführt wird:
# params.yaml
simulator:
cutoff_energy: 500 # eV
kpoints: [8, 8, 8]
tolerance: 1e-6
optimization:
max_steps: 200
algorithm: ionic
Wenn Sie tolerance von 1e-6 in 1e-8 ändern und dvc repro ausführen, erkennt DVC die Änderung von params.yaml und führt jede davon abhängige Phase erneut aus. Die resultierende Datei relaxed_structure.xyz erhält ein neues Versions-Tag. Die alte Version bleibt im Cache verfügbar – Sie verlieren keine historischen Läufe.
Für Parameter-Sweeps können Sie --set-param verwenden, um Werte zu überschreiben, ohne die Datei zu ändern:
dvc exp run --set-param sim.tolerance=1e-8 --set-param sim.cutoff_energy=450
Dadurch wird ein neuer Experimentzweig erstellt, der sowohl die ursprünglichen als auch die geänderten Läufe in Ihrem Pipeline-Verlauf beibehält.
Versionierte Reproduzierbarkeit – der konzeptionelle Beitrag von DVC
Der Blog von DVC (Dezember 2021) führte die „versionierte Reproduzierbarkeit“ als die Fähigkeit ein, nicht nur ein Ergebnis, sondern auch den Exact experimental state nachzubilden, der es erzeugt hat. Dies unterscheidet DVC von der generischen Versionierung:
- Standardversionierung Verfolgen Sie Änderungen an Dateien im Laufe der Zeit (Git-Zweck)
- Versionsreproduzierbarkeit Verfolgen Sie, welche bestimmte Datenversion, Code-Commit und Parameterdateikombination ein bestimmtes Ergebnis erzeugt hat (DVC-Zweck)
DVC erreicht dies durch die Verknüpfung von drei unabhängig versionierten Artefakten:
| Artefakt | Versionierungssystem | Was es verfolgt |
|---|---|---|
.dvc Zeigerdateien |
DVC | Datendateiversion + Remote-Standort + Prüfsumme |
| Git verpflichtet | Git | Codeversion + Commit-Nachricht + Diff |
params.yaml |
Git | Parameterdateiversion + Änderungen auf Feldebene |
Die Kombination dieser drei schafft eine reproduzierbare Einheit – ein „versioniertes Experiment“, das isoliert rekonstruiert werden kann. Dies ist für die Simulation von Bedeutung, da Experimente iterativ verfeinert werden. Die Forscher müssen wissen, was funktioniert hat, und es reproduzieren können, ohne jeden Zwischenschritt erneut ausführen zu können.
Praktische Implikationen
Wenn ein Prüfer nach den Daten hinter einer veröffentlichten Figur fragt, können Sie Folgendes angeben:
- Der Git-Commit-Hash (Code-Version)
- Die Referenzdatei-Referenz
.dvc(Datenversion) - Die Datei
params.yamlbei diesem Commit (Parameterversion)
Zusammen reichen diese drei Artefakte aus, um das Ergebnis auf jeder Maschine zu reproduzieren. Dies ist der Goldstandard für die Reproduzierbarkeit der Simulation – weit über Container (die Codeumgebungen einfrieren) oder nackte Git-Repositories (die keine großen Daten verarbeiten können).
Versuchswarteschlange und Management
Das Experiment-Management (dvc exp) von DVC erweitert das Pipeline-Modell, um gleichzeitige und in der Warteschlange gestellte Experimente zu unterstützen:
# Run a single experiment with custom parameters
dvc exp run -S sim.tolerance=1e-8
# Queue multiple experiments
dvc exp run --queue -S sim.tolerance=1e-8
dvc exp run --queue -S sim.tolerance=1e-6
dvc exp run --queue -S sim.tolerance=1e-5
# Execute queued experiments
dvc exp run
Das Flag --queue verzögert die Ausführung, sodass Sie mehrere Experimente vorbereiten und diese nacheinander ausführen können. Dies ist wertvoll für Computerexperimente, die stundenlang oder tagelang ausgeführt werden. Sie können einen Parameter-Sweep über Nacht in die Warteschlange stellen, ohne jeden Lauf manuell zu starten.
Für den Experimentvergleich bietet DVClive Echtzeit-Metrik-Tracking:
# src/metrics.py — DVCLive integration
from dvclive import Live
with Live() as live:
for step in range(n_iterations):
result = run_step(step)
live.step = step
live.log("energy", result["total_energy"])
live.log("forces", result["max_force"])
Dies erzeugt ein interaktives Vergleichs-Dashboard, in dem Sie sehen können, wie sich Energie und Kräfte bei Parameter-Sweeps entwickeln.
Ausführen von DVC-Pipelines auf HPC-Clustern
Die meisten Computerwissenschaftler betreiben keine Pipelines auf Laptops. Sie führen sie auf Clustern mit Slurm-, PBS- oder LSF-Schedulern aus. DVC lässt sich über den srun-Wrapper in Slurm integrieren und ermöglicht die Ausführung von generativen Pipeline-Ausführungen:
# Run a single pipeline stage with SLURM resource allocation
srun dvc repro -n relax --job slurm-job.sh
# Run all pipeline stages on the cluster
srun dvc repro
Das Flag --job weist DVC an, jede Phase über den Job-Scheduler von Slurm auszuführen und automatisch zu bearbeiten:
- Clusterspezifische Ressourcenzuordnung (Speicher, CPU, GPU-Knoten)
- Batch-Modus-Ausführung ohne manuellen Eingriff
- Automatische Jobwarteschlange für Pipeline-Stufen
- Integration mit clusterspezifischen Dateisystemen und Speicher (LUSTRE, GPFS, BEEGFS)
ARXIV 2505.06558v2 (September 2025) zeigt diese Integration für materialwissenschaftliche Workflows mit DFT-Berechnungen auf HPC-Clustern. Der entscheidende Vorteil ist, dass dvc repro Cluster-fähig wird. Wenn eine Phase fehlschlägt oder sich ihre Abhängigkeiten ändern, übernimmt Slurm die Ressourcenzuweisung, um nur die erforderlichen Phasen erneut auszuführen.
Überlegungen zum Clusterspeicher
Der Remote-Speicher von DVC funktioniert gut mit Cluster-Dateisystemen. Sie können DVC so konfigurieren, dass das Lüster- oder GPFS-Dateisystem des Clusters als DVC-Remote verwendet wird:
# Configure a cluster storage remote
dvc remote modify cluster_storage token_url "https://cluster-storage.example.com"
Dies vermeidet den Aufwand beim Kopieren von Daten in den externen Cloud-Speicher und hält die Pipeline innerhalb der Speicherhierarchie des Clusters eigen.
W3C Prov-JSON Provenienz-Tracking
Während DVC Pipeline-Stufen und Datenversionen verfolgt, erzeugt es nativ kein maschinell umsetzbares Provenienzdiagramm. Dafür benötigen Sie einen Provenienzstandard – und das aufkommende Format ist W3C Prov-JSON.
Yprov4ML (ArXiv Juli 2025) implementiert die W3C Proven-JSON-Provenienz mit minimalen Code-Modifikationen. Es erfasst:
- Wer hat das Experiment ausgeführt (Benutzeridentität)
- Was Daten und Code wurden verwendet (Quelle Provenienz)
- Wie Das Experiment lief (Execution Provenienz)
- Warum (optionale Motivation, gebunden an Forschungsziele)
Die Ausgabe ist ein Prov-JSON-Diagramm – ein gerichteter Graph, in dem Knoten Entitäten (Dateien, Parameter, Code-Commits) und Kanten darstellen (abgeleitet von, erzeugt von, erstellt, verwendet von By). Dieses Format ermöglicht:
- Interoperabilität über Provenienzsysteme: Prov-JSON ist maschinenlesbar und kann mit SPARQL- oder Graph-Datenbanken abgefragt werden
- Faire Daten-Konformität: Prov-JSON-Diagramme erfüllen faire Prinzipien, indem sie die Datenlinien und die Wiederverwendungsbedingungen dokumentieren
- Institutionelle Zusammenarbeit: Prov-JSON ist ein W3C-Standard, daher sind Provenienz-Diagramme verschiedener Institutionen kompatibel
Prov-JSON gegen Ro-Crate
Es ist nützlich, Prov-JSON von Ro-Crate zu unterscheiden, da beide in Reproduzierbarkeitsdiskussionen erscheinen:
| Aspekt | Ro-Crate | prov-json |
|---|---|---|
| Zweck | Paketformat für Rich-Metadaten | Datenformat für Provenienzdiagramme |
| Umfang | Ganzer Datensatz + zugehörige Ressourcen | Ausführungslinie und Abhängigkeiten |
| Format | json-ld | JSON (PROV-Standard) |
| Interoperabilität | Eigenständiges Paket | Graph-basiert, abfragefähig |
| Beziehung | Komplementär, nicht konkurrierend |
Sie befassen sich mit verschiedenen Reproduzierbarkeitsschichten. Ro-Crate packt Ihr Dataset mit Metadaten. Prov-JSON verfolgt die Berechnungslinie der Erstellung dieses Datensatzes. Die Verwendung beider zusammen bietet die volle Reproduzierbarkeit: „Hier sind die Daten“ (Ro-Crate) plus „Hier ist, wie es produziert wurde“ (prov-json).
Wann verwenden Sie DVC vs DataLad vs. Prov-kompatible Bibliotheken
Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken hängt von Ihren Workflow-Mustern ab:
| Kriterium | DVC | datalad | Prov-Bibliotheken |
|---|---|---|---|
| Hauptanwendungsfall | Pipeline-orientierte Experimente | Langfristige Datenkuration | Maschinell umsetzbare Provenienz |
| Datengröße | Große Dateien (Modelle, Simulationen) | Große verteilte Datensätze | N/A (metadatenorientiert) |
| Ausführungsmodell | Bühnenbasierte Pipeline (dvc repro) |
Befehlsbasiert (datalad run) |
Dekorateur |
| HPC-Integration | srun dvc repro |
Native Git-Anhang + SSH | konfigurierbar |
| Provenienzausgabe | .dvc Dateien + Git-Verlauf |
Git-Annex-Symlinks + Git-Log | Prov-JSON-Diagramm |
| am besten für | Material-Science-Pipelines, Parameter-Sweeps | Langfristige Repository-Kuration, Einhaltung der Gebote | Faire Daten, institutionelle Provenienz |
DVC ist genau das Richtige für Sie, wenn:
- Ihr Workflow hat mehrere abhängige Phasen (Entspannung → Eigenschaftsberechnung → Visualisierung)
- Sie benötigen Parameter-Sweeps mit automatischer Nachlauf
- Sie möchten verfolgen, welche Parameterkombination das Ergebnis mit der niedrigsten Energie erzeugt
Datalad ist genau das Richtige für Sie, wenn:
- Sie kuratieren ein langfristiges Dataset-Repository
- Sie benötigen Git-Annex-Symlinks für die effiziente Handhabung von Großdateien
- Sie arbeiten mit verteilten Datensätzen über Institutionen hinweg
- Sie benötigen die Einhaltung von Geboten (häufig in der Neuroimaging)
Pro-konforme Bibliotheken sind für Sie richtig, wenn:
- Sie benötigen maschinell umsetzbare Provenienz für faire Einhaltung
- Sie möchten ein abfragefähiges Provenienzdiagramm für die Datenabstammung
- Sie arbeiten in verschiedenen Institutionen mit verschiedenen Provenienzsystemen zusammen
- Sie veröffentlichen in einem fairen Daten-Repository
Zusammenstellen – ein praktischer Workflow
Hier ist ein praktisches Workflow-Muster, das alle oben genannten Konzepte kombiniert:
# 1. Initialize the repository
git init
dvc init
# 2. Add the data
dvc add data/raw_crystal_structure.xyz
# 3. Run the pipeline
dvc repro
# 4. Check the results
dvc metrics show results/energies.txt
# 5. Run experiments with different parameters
dvc exp run -S sim.tolerance=1e-8 --set-param sim.cutoff_energy=550
# 6. Push data and experiments to remote
dvc push
dvc exp push
git push origin main
# 7. (Optional) Generate PROV-JSON provenance
python src/provenance.py --output provenance.json
Dieses Muster stellt sicher, dass jedes Simulationsergebnis auf seine genaue Datenversion, das Code-Commit und die Parameterdatei zurückgeführt werden kann. Die Prov-JSON-Ausgabe (Schritt 7) fügt eine maschinenaktionsfähige Provenienzschicht auf der DVC-Pipeline hinzu.
Häufige Fehler – was zu vermeiden
Fehler 1: Alles versionieren – Führen Sie nicht dvc add in jeder Ausgabedatei aus. Verfolgen Sie nur Dateien, die in nachfolgende Phasen eingegeben werden oder die Endergebnisse darstellen. Zwischendateien (wie Raw Force Arrays) sollten in git bleiben oder vollständig ausgeschlossen werden. Überaddieren erzeugt Pipeline-Lärm.
Fehler 2: Hardcoding-Pfade: Verwenden Sie in dvc.yaml keine absoluten Pfade. Verwenden Sie relative Pfade, damit die Pipeline auf verschiedenen Computern und Clusterkonfigurationen funktioniert.
Fehler 3: Datentypen mischen: Geben Sie keine Simulationsparameter und modellieren Sie Prüfpunkte in derselben .dvc-Datei. Halten Sie Datentypen getrennt, um Cache-Konflikte zu vermeiden.
Fehler 4: Provenienz ignorieren – DVC-Dateien allein reichen nicht für eine faire Einhaltung aus. Wenn Ihre Institution Provenienzdiagramme benötigt, koppeln Sie DVC mit Prov-JSON-Ausgabe (Yprov4ML) oder Ro-Crate-Verpackungen.
Fehler 5: Vergessen von params.yaml — Wenn Sie in Ihren Skripten Hardcode-Parameter in Ihren Skripten vergeben, anstatt sie in params.yaml zu isolieren, wird das Parameter-Tracking von DVC nutzlos. Verwenden Sie für Simulationsparameter immer params.yaml.
Zusammenfassung
DVC wandelt wissenschaftliche Workflows aus fragilen, speicherabhängigen Prozessen in deterministische, abhängigkeitsbewusste Pipelines um. Die wichtigste Erkenntnis ist, dass dvc.yaml Pipeline-Dateien und die Parameterisolation params.yaml „versionierte Reproduzierbarkeit“ erstellen – die Fähigkeit, nicht nur ein Ergebnis zu rekonstruieren, sondern auch den exakten experimentellen Status (Datenversion + Code-Commit + Parameterdatei), der es erzeugt hat. Dies geht über Container hinaus (die Code-Umgebungen einfrieren) und über Git hinaus (die keine großen Datensätze verarbeiten können).
Für die HPC-Integration ermöglicht der srun-Wrapper von Slurm die Ausführung einer Cluster-nativen Pipeline ohne manuellen Eingriff. Für die Provenienz bildet sich W3C Prov-JSON (Yprov4ML) als interoperables Format, das zu Ro-Crate-Verpackungen komplementiert wird und die maschinenschaltbare Datenlinie ermöglicht, die den Anforderungen der fairen Einhaltung genügt.
Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken hängt von Ihren Workflow-Mustern ab: DVC für pipeline-orientierte Experimente, DataLad für die Langzeit-Datenkuration und Prov-Bibliotheken für maschinell umsetzbare Provenienzdiagramme. Die meisten Simulationsteams profitieren von der Verwendung von DVC für die Pipeline-Ausführung und Prov-JSON für die Provenienzverfolgung – die beiden Tools sind komplementär und konkurrieren nicht.
Verwandte Anleitungen
- Reproduzierbarkeit jenseits von Containern — Deckt DVC-Grundlagen, Ro-Crate-Provenienzverpackungen und containerbasierte Reproduzierbarkeitsmuster ab
- Verwalten von PDE-Problemen im großen Maßstab — Erörtert das Management von Clusterressourcen und HPC Workflows
- Verifikation vs. Validierung in wissenschaftlichen Simulationen — Erklärt den breiteren Kontext der Reproduzierbarkeit für Simulationsergebnisse