{"id":1116,"date":"2026-08-19T09:48:33","date_gmt":"2026-08-19T09:48:33","guid":{"rendered":"https:\/\/matforge.org\/?p=1116","raw":"https:\/\/matforge.org\/?p=1116"},"modified":"2026-08-19T09:48:33","modified_gmt":"2026-08-19T09:48:33","slug":"python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows","status":"publish","type":"post","link":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/","title":{"rendered":"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows","raw":"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 16<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><h1>Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows<\/h1>\n<p>Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-\u00c4nderungen zu verfolgen &#8211; Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche <strong>Spezifische Kombination<\/strong> von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis gef\u00fchrt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von einer reproduzierbaren Simulationspipeline.<\/p>\n<p>Das am weitesten verbreitete Tool daf\u00fcr ist DVC (Data Version Control), das das Versionsmodell von Git erweitert, um gro\u00dfe Datens\u00e4tze und Pipeline-Stufen zu verarbeiten. Dieser Artikel behandelt die praktische DVC-Implementierung f\u00fcr wissenschaftliche Workflows \u2013 Pipeline-Konstruktion mit <code>dvc.yaml<\/code>, Parameterisolierung mit <code>params.yaml<\/code>, HPC\/Slurm-Integration und aufkommende Provenienz-Tracking von W3C Prov-JSON \u2013 so k\u00f6nnen Sie deterministische Simulationskampagnen erstellen, die das Team \u00fcberleben Umsatz, Hardware-Migration und jahrelange Projektlebenszyklen.<\/p>\n<h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li><strong>Der Kernwert von DVC<\/strong>: Pipeline-Dateien (<code>dvc.yaml<\/code>) machen Simulationen abh\u00e4ngigkeitsbewusst, sodass <code>dvc repro<\/code> nur die \u00c4nderungen erneut ausf\u00fchrt.<\/li>\n<li><strong>Versionsreproduzierbarkeit<\/strong>: DVC verkn\u00fcpft Daten-Snapshots (<code>.dvc<\/code> Dateien), Code-Commits (Git) und Parameterdateien (<code>params.yaml<\/code>) zu reproduzierbaren Experimentiereinheiten<\/li>\n<li><strong>HPC-Integration<\/strong>: Slurm-Batchplanung umschlie\u00dft DVC f\u00fcr die Ausf\u00fchrung von Cluster-Native Pipeline ohne manuellen Eingriff<\/li>\n<li><strong>Provenance Standards<\/strong>: W3C Prov-JSON (YProv4ML) tritt als interoperables Format auf, das zu Ro-Crate-Verpackungen erg\u00e4nzt<\/li>\n<li><strong>DVC vs Datalad<\/strong>: W\u00e4hlen Sie DVC f\u00fcr Pipeline-orientierte Experimente; W\u00e4hlen Sie DataLad f\u00fcr langfristige Datenkuration und verteilte Datens\u00e4tze<\/li>\n<\/ul>\n<h2>Warum die Standardversionierung f\u00fcr Simulationsworkflows fehlschl\u00e4gt<\/h2>\n<p>Git eignet sich hervorragend zum Tracking von Code-\u00c4nderungen. Es ist schrecklich, Daten\u00e4nderungen zu verfolgen.<\/p>\n<p>Wenn Sie eine DFT-Relaxationsberechnung ausf\u00fchren, kann Git die resultierende <code>.xyz<\/code>-Kristallstrukturdatei (oft zehn MB) nicht speichern. Sie k\u00f6nnen es auf ein freigegebenes Laufwerk kopieren oder seinen SHA-256-Hash an eine Textdatei anh\u00e4ngen oder sich auf den Speicher verlassen. Alle drei Ans\u00e4tze werden unterbrochen, wenn sich die Datenquelle \u00e4ndert, wenn Sie sie mit Mitarbeitern teilen m\u00fcssen, die keinen Zugriff auf das freigegebene Laufwerk haben, oder wenn Sie sechs Monate sp\u00e4ter wiederkommen und vergessen, welcher Parametersatz die Struktur mit der niedrigsten Energie erzeugt hat.<\/p>\n<p>Datenversionstools l\u00f6sen dies durch die Entkopplung von <strong>Datenverfolgung<\/strong> von <strong>Code-Tracking<\/strong>. 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 &#8211; in der Regel kleine <code>.dvc<\/code>-Dateien oder Git-Annex-Symlink-Referenzen \u2013 enthalten Metadaten (Checksum, Remote-Standort, Versions-Tag), ohne die tats\u00e4chlichen Daten zu duplizieren.<\/p>\n<p>Diese Trennung ist f\u00fcr Simulations-Workflows wichtig, da das Datenvolumen unabh\u00e4ngig vom Codevolumen skaliert wird. Eine einzelne Simulationskampagne kann Tausende von Trajektoriendateien erzeugen, w\u00e4hrend die Python-Skripte, die sie erzeugen, in einigen hundert Zeilen bleiben.<\/p>\n<h3>Die Pipeline-L\u00fccke<\/h3>\n<p>Die meisten Forscher beginnen mit der Ad-hoc-Datenverfolgung: Ein Bash-Skript, das Berechnungen in der Reihenfolge ausf\u00fchrt, die Ergebnisse in ein Verzeichnis <code>results\/<\/code> kopiert und die endg\u00fcltigen Zahlen in ein Google Sheet eingef\u00fcgt werden. Das funktioniert f\u00fcr kleine Projekte. Es bricht zusammen, wenn:<\/p>\n<ol>\n<li><strong>Neulauf mit unterschiedlichen Parametern<\/strong> \u2013 Sie m\u00fcssen sich merken, welche <code>params.yaml<\/code>-Datei verwendet wurde, und nur die ge\u00e4nderten Phasen erneut ausf\u00fchren<\/li>\n<li><strong>Debugging-Fehler<\/strong> \u2013 Sie m\u00fcssen wissen, ob der Fehler auf Datenbesch\u00e4digung, Code-\u00c4nderungen oder Parameterfehlanpassungen zur\u00fcckzuf\u00fchren ist<\/li>\n<li><strong>Team Handoff<\/strong> \u2013 Ein neuer Sch\u00fcler kann die Pipeline nicht aus einem <code>bash<\/code>-Skript und einem Ordner mit verwaisten Dateien rekonstruieren<\/li>\n<\/ol>\n<p>Die DVC-Pipeline-Definitionsdatei (<code>dvc.yaml<\/code>) schlie\u00dft diese L\u00fccke, indem sie Phasen mit expliziten Abh\u00e4ngigkeiten und Ausgaben deklariert. Jede Phase wird nur dann erneut ausgef\u00fchrt, wenn sich die Abh\u00e4ngigkeiten \u00e4ndern (<code>dvc repro &lt;stage&gt;<\/code>), wodurch Simulationskampagnen beim erneuten Ausf\u00fchren von Berechnungen mit unterschiedlichen Parametern dramatisch effizienter werden.<\/p>\n<h2>DVC-Pipeline-Konstruktion f\u00fcr wissenschaftliche Workflows<\/h2>\n<p>Eine DVC-Pipeline-Datei ist ein deklaratives YAML-Dokument, das die Abh\u00e4ngigkeit Ihrer Simulationsschritte voneinander abbildet. Hier ist ein konkretes Beispiel f\u00fcr einen Workflow f\u00fcr Computational Materials Science:<\/p>\n<pre><code class=\"language-yaml\"># dvc.yaml \u2014 DFT relaxation and energy calculation pipeline\n\nstages:\n  relax:\n    cmd: python src\/relax.py\n    deps:\n    - data\/raw_crystal_structure.xyz\n    - src\/relax.py\n    params:\n    - params.yaml\n    outs:\n    - results\/relaxed_structure.xyz\n\n  energy:\n    cmd: python src\/energy.py\n    deps:\n    - results\/relaxed_structure.xyz\n    - src\/energy.py\n    params:\n    - params.yaml\n    outs:\n    - results\/energies.txt\n    metrics:\n    - results\/energies.txt\n\n  visualize:\n    cmd: python src\/plot.py\n    deps:\n    - results\/energies.txt\n    - src\/plot.py\n    outs:\n    - figures\/energy_plot.png\n<\/code><\/pre>\n<p>Jede Etappe erkl\u00e4rt:<\/p>\n<ul>\n<li><strong><code>cmd<\/code><\/strong>: Der Befehl, der die Ausgaben dieser Stufe generiert<\/li>\n<li><strong><code>deps<\/code><\/strong>: Dateien, die diese Phase, wenn sie ge\u00e4ndert werden, ausl\u00f6sen<\/li>\n<li><strong><code>params<\/code><\/strong>: Parameterdateien, die bei einer erneuten Ausf\u00fchrung dieser Phase ausl\u00f6sen<\/li>\n<li><strong><code>outs<\/code><\/strong>: Dateien, die in dieser Phase erstellt wurden (verfolgen als Datenversionen)<\/li>\n<li><strong><code>metrics<\/code><\/strong>: Dateien, die DVC zum Experimentieren numerisch verfolgt<\/li>\n<\/ul>\n<h3>Warum <code>params.yaml<\/code> wichtig ist<\/h3>\n<p>Die Datei <code>params.yaml<\/code> isoliert Simulationsparameter aus Ausf\u00fchrungsskripten. Dies ist entscheidend f\u00fcr materialwissenschaftliche Workflows, bei denen derselbe Simulationscode hunderte Male mit unterschiedlichen Parametern ausgef\u00fchrt wird:<\/p>\n<pre><code class=\"language-yaml\"># params.yaml\nsimulator:\n  cutoff_energy: 500  # eV\n  kpoints: [8, 8, 8]\n  tolerance: 1e-6\n  \noptimization:\n  max_steps: 200\n  algorithm: ionic\n<\/code><\/pre>\n<p>Wenn Sie <code>tolerance<\/code> von <code>1e-6<\/code> in <code>1e-8<\/code> \u00e4ndern und <code>dvc repro<\/code> ausf\u00fchren, erkennt DVC die \u00c4nderung von <code>params.yaml<\/code> und f\u00fchrt jede davon abh\u00e4ngige Phase erneut aus. Die resultierende Datei <code>relaxed_structure.xyz<\/code> erh\u00e4lt ein neues Versions-Tag. Die alte Version bleibt im Cache verf\u00fcgbar &#8211; Sie verlieren keine historischen L\u00e4ufe.<\/p>\n<p>F\u00fcr Parameter-Sweeps k\u00f6nnen Sie <code>--set-param<\/code> verwenden, um Werte zu \u00fcberschreiben, ohne die Datei zu \u00e4ndern:<\/p>\n<pre><code class=\"language-bash\">dvc exp run --set-param sim.tolerance=1e-8 --set-param sim.cutoff_energy=450\n<\/code><\/pre>\n<p>Dadurch wird ein neuer Experimentzweig erstellt, der sowohl die urspr\u00fcnglichen als auch die ge\u00e4nderten L\u00e4ufe in Ihrem Pipeline-Verlauf beibeh\u00e4lt.<\/p>\n<h2>Versionierte Reproduzierbarkeit \u2013 der konzeptionelle Beitrag von DVC<\/h2>\n<p>Der Blog von DVC (Dezember 2021) f\u00fchrte die &#8222;versionierte Reproduzierbarkeit&#8220; als die F\u00e4higkeit ein, nicht nur ein Ergebnis, sondern auch den <strong>Exact experimental state<\/strong> nachzubilden, der es erzeugt hat. Dies unterscheidet DVC von der generischen Versionierung:<\/p>\n<ul>\n<li><strong>Standardversionierung<\/strong> Verfolgen Sie \u00c4nderungen an Dateien im Laufe der Zeit (Git-Zweck)<\/li>\n<li><strong>Versionsreproduzierbarkeit<\/strong> Verfolgen Sie, welche bestimmte Datenversion, Code-Commit und Parameterdateikombination ein bestimmtes Ergebnis erzeugt hat (DVC-Zweck)<\/li>\n<\/ul>\n<p>DVC erreicht dies durch die Verkn\u00fcpfung von drei unabh\u00e4ngig versionierten Artefakten:<\/p>\n<table>\n<thead>\n<tr>\n<th>Artefakt<\/th>\n<th>Versionierungssystem<\/th>\n<th>Was es verfolgt<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>.dvc<\/code>&nbsp;Zeigerdateien<\/td>\n<td>DVC<\/td>\n<td>Datendateiversion + Remote-Standort + Pr\u00fcfsumme<\/td>\n<\/tr>\n<tr>\n<td>Git verpflichtet<\/td>\n<td>Git<\/td>\n<td>Codeversion + Commit-Nachricht + Diff<\/td>\n<\/tr>\n<tr>\n<td><code>params.yaml<\/code><\/td>\n<td>Git<\/td>\n<td>Parameterdateiversion + \u00c4nderungen auf Feldebene<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Die Kombination dieser drei schafft eine reproduzierbare Einheit &#8211; ein &#8222;versioniertes Experiment&#8220;, das isoliert rekonstruiert werden kann. Dies ist f\u00fcr die Simulation von Bedeutung, da Experimente iterativ verfeinert werden. Die Forscher m\u00fcssen wissen, was funktioniert hat, und es reproduzieren k\u00f6nnen, ohne jeden Zwischenschritt erneut ausf\u00fchren zu k\u00f6nnen.<\/p>\n<h3>Praktische Implikationen<\/h3>\n<p>Wenn ein Pr\u00fcfer nach den Daten hinter einer ver\u00f6ffentlichten Figur fragt, k\u00f6nnen Sie Folgendes angeben:<\/p>\n<ol>\n<li>Der Git-Commit-Hash (Code-Version)<\/li>\n<li>Die Referenzdatei-Referenz <code>.dvc<\/code> (Datenversion)<\/li>\n<li>Die Datei <code>params.yaml<\/code> bei diesem Commit (Parameterversion)<\/li>\n<\/ol>\n<p>Zusammen reichen diese drei Artefakte aus, um das Ergebnis auf jeder Maschine zu reproduzieren. Dies ist der Goldstandard f\u00fcr die Reproduzierbarkeit der Simulation &#8211; weit \u00fcber Container (die Codeumgebungen einfrieren) oder nackte Git-Repositories (die keine gro\u00dfen Daten verarbeiten k\u00f6nnen).<\/p>\n<h2>Versuchswarteschlange und Management<\/h2>\n<p>Das Experiment-Management (<code>dvc exp<\/code>) von DVC erweitert das Pipeline-Modell, um gleichzeitige und in der Warteschlange gestellte Experimente zu unterst\u00fctzen:<\/p>\n<pre><code class=\"language-bash\"># Run a single experiment with custom parameters\ndvc exp run -S sim.tolerance=1e-8\n\n# Queue multiple experiments\ndvc exp run --queue -S sim.tolerance=1e-8\ndvc exp run --queue -S sim.tolerance=1e-6\ndvc exp run --queue -S sim.tolerance=1e-5\n\n# Execute queued experiments\ndvc exp run\n<\/code><\/pre>\n<p>Das Flag <code>--queue<\/code> verz\u00f6gert die Ausf\u00fchrung, sodass Sie mehrere Experimente vorbereiten und diese nacheinander ausf\u00fchren k\u00f6nnen. Dies ist wertvoll f\u00fcr Computerexperimente, die stundenlang oder tagelang ausgef\u00fchrt werden. Sie k\u00f6nnen einen Parameter-Sweep \u00fcber Nacht in die Warteschlange stellen, ohne jeden Lauf manuell zu starten.<\/p>\n<p>F\u00fcr den Experimentvergleich bietet DVClive Echtzeit-Metrik-Tracking:<\/p>\n<pre><code class=\"language-python\"># src\/metrics.py \u2014 DVCLive integration\nfrom dvclive import Live\n\nwith Live() as live:\n    for step in range(n_iterations):\n        result = run_step(step)\n        live.step = step\n        live.log(\"energy\", result[\"total_energy\"])\n        live.log(\"forces\", result[\"max_force\"])\n<\/code><\/pre>\n<p>Dies erzeugt ein interaktives Vergleichs-Dashboard, in dem Sie sehen k\u00f6nnen, wie sich Energie und Kr\u00e4fte bei Parameter-Sweeps entwickeln.<\/p>\n<h2>Ausf\u00fchren von DVC-Pipelines auf HPC-Clustern<\/h2>\n<p>Die meisten Computerwissenschaftler betreiben keine Pipelines auf Laptops. Sie f\u00fchren sie auf Clustern mit Slurm-, PBS- oder LSF-Schedulern aus. DVC l\u00e4sst sich \u00fcber den <code>srun<\/code>-Wrapper in Slurm integrieren und erm\u00f6glicht die Ausf\u00fchrung von generativen Pipeline-Ausf\u00fchrungen:<\/p>\n<pre><code class=\"language-bash\"># Run a single pipeline stage with SLURM resource allocation\nsrun dvc repro -n relax --job slurm-job.sh\n\n# Run all pipeline stages on the cluster\nsrun dvc repro\n<\/code><\/pre>\n<p>Das Flag <code>--job<\/code> weist DVC an, jede Phase \u00fcber den Job-Scheduler von Slurm auszuf\u00fchren und automatisch zu bearbeiten:<\/p>\n<ul>\n<li>Clusterspezifische Ressourcenzuordnung (Speicher, CPU, GPU-Knoten)<\/li>\n<li>Batch-Modus-Ausf\u00fchrung ohne manuellen Eingriff<\/li>\n<li>Automatische Jobwarteschlange f\u00fcr Pipeline-Stufen<\/li>\n<li>Integration mit clusterspezifischen Dateisystemen und Speicher (LUSTRE, GPFS, BEEGFS)<\/li>\n<\/ul>\n<p>ARXIV 2505.06558v2 (September 2025) zeigt diese Integration f\u00fcr materialwissenschaftliche Workflows mit DFT-Berechnungen auf HPC-Clustern. Der entscheidende Vorteil ist, dass <code>dvc repro<\/code> Cluster-f\u00e4hig wird. Wenn eine Phase fehlschl\u00e4gt oder sich ihre Abh\u00e4ngigkeiten \u00e4ndern, \u00fcbernimmt Slurm die Ressourcenzuweisung, um nur die erforderlichen Phasen erneut auszuf\u00fchren.<\/p>\n<h3>\u00dcberlegungen zum Clusterspeicher<\/h3>\n<p>Der Remote-Speicher von DVC funktioniert gut mit Cluster-Dateisystemen. Sie k\u00f6nnen DVC so konfigurieren, dass das L\u00fcster- oder GPFS-Dateisystem des Clusters als DVC-Remote verwendet wird:<\/p>\n<pre><code class=\"language-bash\"># Configure a cluster storage remote\ndvc remote modify cluster_storage token_url \"https:\/\/cluster-storage.example.com\"\n<\/code><\/pre>\n<p>Dies vermeidet den Aufwand beim Kopieren von Daten in den externen Cloud-Speicher und h\u00e4lt die Pipeline innerhalb der Speicherhierarchie des Clusters eigen.<\/p>\n<h2>W3C Prov-JSON Provenienz-Tracking<\/h2>\n<p>W\u00e4hrend DVC Pipeline-Stufen und Datenversionen verfolgt, erzeugt es nativ kein maschinell umsetzbares Provenienzdiagramm. Daf\u00fcr ben\u00f6tigen Sie einen Provenienzstandard &#8211; und das aufkommende Format ist W3C Prov-JSON.<\/p>\n<p>Yprov4ML (ArXiv Juli 2025) implementiert die W3C Proven-JSON-Provenienz mit minimalen Code-Modifikationen. Es erfasst:<\/p>\n<ul>\n<li><strong>Wer<\/strong> hat das Experiment ausgef\u00fchrt (Benutzeridentit\u00e4t)<\/li>\n<li><strong>Was<\/strong> Daten und Code wurden verwendet (Quelle Provenienz)<\/li>\n<li><strong>Wie<\/strong> Das Experiment lief (Execution Provenienz)<\/li>\n<li><strong>Warum<\/strong> (optionale Motivation, gebunden an Forschungsziele)<\/li>\n<\/ul>\n<p>Die Ausgabe ist ein Prov-JSON-Diagramm &#8211; ein gerichteter Graph, in dem Knoten Entit\u00e4ten (Dateien, Parameter, Code-Commits) und Kanten darstellen (abgeleitet von, erzeugt von, erstellt, verwendet von By). Dieses Format erm\u00f6glicht:<\/p>\n<ul>\n<li><strong>Interoperabilit\u00e4t \u00fcber Provenienzsysteme<\/strong>: Prov-JSON ist maschinenlesbar und kann mit SPARQL- oder Graph-Datenbanken abgefragt werden<\/li>\n<li><strong>Faire Daten-Konformit\u00e4t<\/strong>: Prov-JSON-Diagramme erf\u00fcllen faire Prinzipien, indem sie die Datenlinien und die Wiederverwendungsbedingungen dokumentieren<\/li>\n<li><strong>Institutionelle Zusammenarbeit<\/strong>: Prov-JSON ist ein W3C-Standard, daher sind Provenienz-Diagramme verschiedener Institutionen kompatibel<\/li>\n<\/ul>\n<h3>Prov-JSON gegen Ro-Crate<\/h3>\n<p>Es ist n\u00fctzlich, Prov-JSON von Ro-Crate zu unterscheiden, da beide in Reproduzierbarkeitsdiskussionen erscheinen:<\/p>\n<table>\n<thead>\n<tr>\n<th>Aspekt<\/th>\n<th>Ro-Crate<\/th>\n<th>prov-json<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Zweck<\/td>\n<td>Paketformat f\u00fcr Rich-Metadaten<\/td>\n<td>Datenformat f\u00fcr Provenienzdiagramme<\/td>\n<\/tr>\n<tr>\n<td>Umfang<\/td>\n<td>Ganzer Datensatz + zugeh\u00f6rige Ressourcen<\/td>\n<td>Ausf\u00fchrungslinie und Abh\u00e4ngigkeiten<\/td>\n<\/tr>\n<tr>\n<td>Format<\/td>\n<td>json-ld<\/td>\n<td>JSON (PROV-Standard)<\/td>\n<\/tr>\n<tr>\n<td>Interoperabilit\u00e4t<\/td>\n<td>Eigenst\u00e4ndiges Paket<\/td>\n<td>Graph-basiert, abfragef\u00e4hig<\/td>\n<\/tr>\n<tr>\n<td>Beziehung<\/td>\n<td>Komplement\u00e4r, nicht konkurrierend<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>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: &#8222;Hier sind die Daten&#8220; (Ro-Crate) plus &#8222;Hier ist, wie es produziert wurde&#8220; (prov-json).<\/p>\n<h2>Wann verwenden Sie DVC vs DataLad vs. Prov-kompatible Bibliotheken<\/h2>\n<p>Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken h\u00e4ngt von Ihren Workflow-Mustern ab:<\/p>\n<table>\n<thead>\n<tr>\n<th>Kriterium<\/th>\n<th>DVC<\/th>\n<th>datalad<\/th>\n<th>Prov-Bibliotheken<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Hauptanwendungsfall<\/td>\n<td>Pipeline-orientierte Experimente<\/td>\n<td>Langfristige Datenkuration<\/td>\n<td>Maschinell umsetzbare Provenienz<\/td>\n<\/tr>\n<tr>\n<td>Datengr\u00f6\u00dfe<\/td>\n<td>Gro\u00dfe Dateien (Modelle, Simulationen)<\/td>\n<td>Gro\u00dfe verteilte Datens\u00e4tze<\/td>\n<td>N\/A (metadatenorientiert)<\/td>\n<\/tr>\n<tr>\n<td>Ausf\u00fchrungsmodell<\/td>\n<td>B\u00fchnenbasierte Pipeline (<code>dvc repro<\/code>)<\/td>\n<td>Befehlsbasiert (<code>datalad run<\/code>)<\/td>\n<td>Dekorateur<\/td>\n<\/tr>\n<tr>\n<td>HPC-Integration<\/td>\n<td><code>srun dvc repro<\/code><\/td>\n<td>Native Git-Anhang + SSH<\/td>\n<td>konfigurierbar<\/td>\n<\/tr>\n<tr>\n<td>Provenienzausgabe<\/td>\n<td><code>.dvc<\/code> Dateien + Git-Verlauf<\/td>\n<td>Git-Annex-Symlinks + Git-Log<\/td>\n<td>Prov-JSON-Diagramm<\/td>\n<\/tr>\n<tr>\n<td>am besten f\u00fcr<\/td>\n<td>Material-Science-Pipelines, Parameter-Sweeps<\/td>\n<td>Langfristige Repository-Kuration, Einhaltung der Gebote<\/td>\n<td>Faire Daten, institutionelle Provenienz<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>DVC ist genau das Richtige f\u00fcr Sie, wenn:<\/h3>\n<ul>\n<li>Ihr Workflow hat mehrere abh\u00e4ngige Phasen (Entspannung \u2192 Eigenschaftsberechnung \u2192 Visualisierung)<\/li>\n<li>Sie ben\u00f6tigen Parameter-Sweeps mit automatischer Nachlauf<\/li>\n<li>Sie m\u00f6chten verfolgen, welche Parameterkombination das Ergebnis mit der niedrigsten Energie erzeugt<\/li>\n<\/ul>\n<h3>Datalad ist genau das Richtige f\u00fcr Sie, wenn:<\/h3>\n<ul>\n<li>Sie kuratieren ein langfristiges Dataset-Repository<\/li>\n<li>Sie ben\u00f6tigen Git-Annex-Symlinks f\u00fcr die effiziente Handhabung von Gro\u00dfdateien<\/li>\n<li>Sie arbeiten mit verteilten Datens\u00e4tzen \u00fcber Institutionen hinweg<\/li>\n<li>Sie ben\u00f6tigen die Einhaltung von Geboten (h\u00e4ufig in der Neuroimaging)<\/li>\n<\/ul>\n<h3>Pro-konforme Bibliotheken sind f\u00fcr Sie richtig, wenn:<\/h3>\n<ul>\n<li>Sie ben\u00f6tigen maschinell umsetzbare Provenienz f\u00fcr faire Einhaltung<\/li>\n<li>Sie m\u00f6chten ein abfragef\u00e4higes Provenienzdiagramm f\u00fcr die Datenabstammung<\/li>\n<li>Sie arbeiten in verschiedenen Institutionen mit verschiedenen Provenienzsystemen zusammen<\/li>\n<li>Sie ver\u00f6ffentlichen in einem fairen Daten-Repository<\/li>\n<\/ul>\n<h2>Zusammenstellen \u2013 ein praktischer Workflow<\/h2>\n<p>Hier ist ein praktisches Workflow-Muster, das alle oben genannten Konzepte kombiniert:<\/p>\n<pre><code class=\"language-bash\"># 1. Initialize the repository\ngit init\ndvc init\n\n# 2. Add the data\ndvc add data\/raw_crystal_structure.xyz\n\n# 3. Run the pipeline\ndvc repro\n\n# 4. Check the results\ndvc metrics show results\/energies.txt\n\n# 5. Run experiments with different parameters\ndvc exp run -S sim.tolerance=1e-8 --set-param sim.cutoff_energy=550\n\n# 6. Push data and experiments to remote\ndvc push\ndvc exp push\ngit push origin main\n\n# 7. (Optional) Generate PROV-JSON provenance\npython src\/provenance.py --output provenance.json\n<\/code><\/pre>\n<p>Dieses Muster stellt sicher, dass jedes Simulationsergebnis auf seine genaue Datenversion, das Code-Commit und die Parameterdatei zur\u00fcckgef\u00fchrt werden kann. Die Prov-JSON-Ausgabe (Schritt 7) f\u00fcgt eine maschinenaktionsf\u00e4hige Provenienzschicht auf der DVC-Pipeline hinzu.<\/p>\n<h2>H\u00e4ufige Fehler &#8211; was zu vermeiden<\/h2>\n<p><strong>Fehler 1: Alles versionieren<\/strong> \u2013 F\u00fchren Sie nicht <code>dvc add<\/code> 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\u00e4ndig ausgeschlossen werden. \u00dcberaddieren erzeugt Pipeline-L\u00e4rm.<\/p>\n<p><strong>Fehler 2: Hardcoding-Pfade<\/strong>: Verwenden Sie in <code>dvc.yaml<\/code> keine absoluten Pfade. Verwenden Sie relative Pfade, damit die Pipeline auf verschiedenen Computern und Clusterkonfigurationen funktioniert.<\/p>\n<p><strong>Fehler&nbsp;3: Datentypen mischen<\/strong>: Geben Sie keine Simulationsparameter und modellieren Sie Pr\u00fcfpunkte in derselben <code>.dvc<\/code>-Datei. Halten Sie Datentypen getrennt, um Cache-Konflikte zu vermeiden.<\/p>\n<p><strong>Fehler 4: Provenienz ignorieren<\/strong> \u2013 DVC-Dateien allein reichen nicht f\u00fcr eine faire Einhaltung aus. Wenn Ihre Institution Provenienzdiagramme ben\u00f6tigt, koppeln Sie DVC mit Prov-JSON-Ausgabe (Yprov4ML) oder Ro-Crate-Verpackungen.<\/p>\n<p><strong>Fehler 5: Vergessen von <code>params.yaml<\/code><\/strong> \u2014 Wenn Sie in Ihren Skripten Hardcode-Parameter in Ihren Skripten vergeben, anstatt sie in <code>params.yaml<\/code> zu isolieren, wird das Parameter-Tracking von DVC nutzlos. Verwenden Sie f\u00fcr Simulationsparameter immer <code>params.yaml<\/code>.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>DVC wandelt wissenschaftliche Workflows aus fragilen, speicherabh\u00e4ngigen Prozessen in deterministische, abh\u00e4ngigkeitsbewusste Pipelines um. Die wichtigste Erkenntnis ist, dass <code>dvc.yaml<\/code> Pipeline-Dateien und die Parameterisolation <code>params.yaml<\/code> &#8222;versionierte Reproduzierbarkeit&#8220; erstellen &#8211; die F\u00e4higkeit, nicht nur ein Ergebnis zu rekonstruieren, sondern auch den exakten experimentellen Status (Datenversion + Code-Commit + Parameterdatei), der es erzeugt hat. Dies geht \u00fcber Container hinaus (die Code-Umgebungen einfrieren) und \u00fcber Git hinaus (die keine gro\u00dfen Datens\u00e4tze verarbeiten k\u00f6nnen).<\/p>\n<p>F\u00fcr die HPC-Integration erm\u00f6glicht der <code>srun<\/code>-Wrapper von Slurm die Ausf\u00fchrung einer Cluster-nativen Pipeline ohne manuellen Eingriff. F\u00fcr die Provenienz bildet sich W3C Prov-JSON (Yprov4ML) als interoperables Format, das zu Ro-Crate-Verpackungen komplementiert wird und die maschinenschaltbare Datenlinie erm\u00f6glicht, die den Anforderungen der fairen Einhaltung gen\u00fcgt.<\/p>\n<p>Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken h\u00e4ngt von Ihren Workflow-Mustern ab: DVC f\u00fcr pipeline-orientierte Experimente, DataLad f\u00fcr die Langzeit-Datenkuration und Prov-Bibliotheken f\u00fcr maschinell umsetzbare Provenienzdiagramme. Die meisten Simulationsteams profitieren von der Verwendung von DVC f\u00fcr die Pipeline-Ausf\u00fchrung und Prov-JSON f\u00fcr die Provenienzverfolgung \u2013 die beiden Tools sind komplement\u00e4r und konkurrieren nicht.<\/p>\n<hr>\n<h2>Verwandte Anleitungen<\/h2>\n<ul>\n<li><a href=\"\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/\">Reproduzierbarkeit jenseits von Containern<\/a> \u2014 Deckt DVC-Grundlagen, Ro-Crate-Provenienzverpackungen und containerbasierte Reproduzierbarkeitsmuster ab<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Verwalten von PDE-Problemen im gro\u00dfen Ma\u00dfstab<\/a> \u2014 Er\u00f6rtert das Management von Clusterressourcen und HPC Workflows<\/li>\n<li><a href=\"https:\/\/matforge.org\/verification-vs-validation-in-scientific-simulations-a-practical-guide\/\">Verifikation vs. Validierung in wissenschaftlichen Simulationen<\/a> \u2014 Erkl\u00e4rt den breiteren Kontext der Reproduzierbarkeit f\u00fcr Simulationsergebnisse&lt;\/fs_write_file&gt;<br \/>&lt;\/tool_call&gt;<\/li>\n<\/ul>\n<p>&lt;tool_call&gt;<br \/>&lt;function=fs_write_file&gt;<br \/>&lt; Parameter=Content&gt;<\/p>\n<h1>Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows<\/h1>\n<p>Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-\u00c4nderungen zu verfolgen &#8211; Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche <strong>Spezifische Kombination<\/strong> von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis gef\u00fchrt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von einer reproduzierbaren Simulationspipeline.<\/p>\n<p>Das am weitesten verbreitete Tool daf\u00fcr ist DVC (Data Version Control), das das Versionsmodell von Git erweitert, um gro\u00dfe Datens\u00e4tze und Pipeline-Stufen zu verarbeiten. Dieser Artikel behandelt die praktische DVC-Implementierung f\u00fcr wissenschaftliche Workflows \u2013 Pipeline-Konstruktion mit <code>dvc.yaml<\/code>, Parameterisolierung mit <code>params.yaml<\/code>, HPC\/Slurm-Integration und aufkommende Provenienz-Tracking von W3C Prov-JSON \u2013 so k\u00f6nnen Sie deterministische Simulationskampagnen erstellen, die das Team \u00fcberleben Umsatz, Hardware-Migration und jahrelange Projektlebenszyklen.<\/p>\n<h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li><strong>Der Kernwert von DVC<\/strong>: Pipeline-Dateien (<code>dvc.yaml<\/code>) machen Simulationen abh\u00e4ngigkeitsbewusst, sodass <code>dvc repro<\/code> nur die \u00c4nderungen erneut ausf\u00fchrt.<\/li>\n<li><strong>Versionsreproduzierbarkeit<\/strong>: DVC verkn\u00fcpft Daten-Snapshots (<code>.dvc<\/code> Dateien), Code-Commits (Git) und Parameterdateien (<code>params.yaml<\/code>) zu reproduzierbaren Experimentiereinheiten<\/li>\n<li><strong>HPC-Integration<\/strong>: Slurm-Batchplanung umschlie\u00dft DVC f\u00fcr die Ausf\u00fchrung von Cluster-Native Pipeline ohne manuellen Eingriff<\/li>\n<li><strong>Provenance Standards<\/strong>: W3C Prov-JSON (YProv4ML) tritt als interoperables Format auf, das zu Ro-Crate-Verpackungen erg\u00e4nzt<\/li>\n<li><strong>DVC vs Datalad<\/strong>: W\u00e4hlen Sie DVC f\u00fcr Pipeline-orientierte Experimente; W\u00e4hlen Sie DataLad f\u00fcr langfristige Datenkuration und verteilte Datens\u00e4tze<\/li>\n<\/ul>\n<h2>Warum die Standardversionierung f\u00fcr Simulationsworkflows fehlschl\u00e4gt<\/h2>\n<p>Git eignet sich hervorragend zum Tracking von Code-\u00c4nderungen. Es ist schrecklich, Daten\u00e4nderungen zu verfolgen.<\/p>\n<p>Wenn Sie eine DFT-Relaxationsberechnung ausf\u00fchren, kann Git die resultierende <code>.xyz<\/code>-Kristallstrukturdatei (oft zehn MB) nicht speichern. Sie k\u00f6nnen es auf ein freigegebenes Laufwerk kopieren oder seinen SHA-256-Hash an eine Textdatei anh\u00e4ngen oder sich auf den Speicher verlassen. Alle drei Ans\u00e4tze werden unterbrochen, wenn sich die Datenquelle \u00e4ndert, wenn Sie sie mit Mitarbeitern teilen m\u00fcssen, die keinen Zugriff auf das freigegebene Laufwerk haben, oder wenn Sie sechs Monate sp\u00e4ter wiederkommen und vergessen, welcher Parametersatz die Struktur mit der niedrigsten Energie erzeugt hat.<\/p>\n<p>Datenversionstools l\u00f6sen dies durch die Entkopplung von <strong>Datenverfolgung<\/strong> von <strong>Code-Tracking<\/strong>. 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 &#8211; in der Regel kleine <code>.dvc<\/code>-Dateien oder Git-Annex-Symlink-Referenzen \u2013 enthalten Metadaten (Checksum, Remote-Standort, Versions-Tag), ohne die tats\u00e4chlichen Daten zu duplizieren.<\/p>\n<p>Diese Trennung ist f\u00fcr Simulations-Workflows wichtig, da das Datenvolumen unabh\u00e4ngig vom Codevolumen skaliert wird. Eine einzelne Simulationskampagne kann Tausende von Trajektoriendateien erzeugen, w\u00e4hrend die Python-Skripte, die sie erzeugen, in einigen hundert Zeilen bleiben.<\/p>\n<h3>Die Pipeline-L\u00fccke<\/h3>\n<p>Die meisten Forscher beginnen mit der Ad-hoc-Datenverfolgung: Ein Bash-Skript, das Berechnungen in der Reihenfolge ausf\u00fchrt, die Ergebnisse in ein Verzeichnis <code>results\/<\/code> kopiert und die endg\u00fcltigen Zahlen in ein Google Sheet eingef\u00fcgt werden. Das funktioniert f\u00fcr kleine Projekte. Es bricht zusammen, wenn:<\/p>\n<ol>\n<li><strong>Neulauf mit unterschiedlichen Parametern<\/strong> \u2013 Sie m\u00fcssen sich merken, welche <code>params.yaml<\/code>-Datei verwendet wurde, und nur die ge\u00e4nderten Phasen erneut ausf\u00fchren<\/li>\n<li><strong>Debugging-Fehler<\/strong> \u2013 Sie m\u00fcssen wissen, ob der Fehler auf Datenbesch\u00e4digung, Code-\u00c4nderungen oder Parameterfehlanpassungen zur\u00fcckzuf\u00fchren ist<\/li>\n<li><strong>Team Handoff<\/strong> \u2013 Ein neuer Sch\u00fcler kann die Pipeline nicht aus einem <code>bash<\/code>-Skript und einem Ordner mit verwaisten Dateien rekonstruieren<\/li>\n<\/ol>\n<p>Die DVC-Pipeline-Definitionsdatei (<code>dvc.yaml<\/code>) schlie\u00dft diese L\u00fccke, indem sie Phasen mit expliziten Abh\u00e4ngigkeiten und Ausgaben deklariert. Jede Phase wird nur dann erneut ausgef\u00fchrt, wenn sich die Abh\u00e4ngigkeiten \u00e4ndern (<code>dvc repro &lt;stage&gt;<\/code>), wodurch Simulationskampagnen beim erneuten Ausf\u00fchren von Berechnungen mit unterschiedlichen Parametern dramatisch effizienter werden.<\/p>\n<h2>DVC-Pipeline-Konstruktion f\u00fcr wissenschaftliche Workflows<\/h2>\n<p>Eine DVC-Pipeline-Datei ist ein deklaratives YAML-Dokument, das die Abh\u00e4ngigkeit Ihrer Simulationsschritte voneinander abbildet. Hier ist ein konkretes Beispiel f\u00fcr einen Workflow f\u00fcr Computational Materials Science:<\/p>\n<pre><code class=\"language-yaml\"># dvc.yaml \u2014 DFT relaxation and energy calculation pipeline\n\nstages:\n  relax:\n    cmd: python src\/relax.py\n    deps:\n    - data\/raw_crystal_structure.xyz\n    - src\/relax.py\n    params:\n    - params.yaml\n    outs:\n    - results\/relaxed_structure.xyz\n\n  energy:\n    cmd: python src\/energy.py\n    deps:\n    - results\/relaxed_structure.xyz\n    - src\/energy.py\n    params:\n    - params.yaml\n    outs:\n    - results\/energies.txt\n    metrics:\n    - results\/energies.txt\n\n  visualize:\n    cmd: python src\/plot.py\n    deps:\n    - results\/energies.txt\n    - src\/plot.py\n    outs:\n    - figures\/energy_plot.png\n<\/code><\/pre>\n<p>Jede Etappe erkl\u00e4rt:<\/p>\n<ul>\n<li><strong><code>cmd<\/code><\/strong>: Der Befehl, der die Ausgaben dieser Stufe generiert<\/li>\n<li><strong><code>deps<\/code><\/strong>: Dateien, die diese Phase, wenn sie ge\u00e4ndert werden, ausl\u00f6sen<\/li>\n<li><strong><code>params<\/code><\/strong>: Parameterdateien, die bei einer erneuten Ausf\u00fchrung dieser Phase ausl\u00f6sen<\/li>\n<li><strong><code>outs<\/code><\/strong>: Dateien, die in dieser Phase erstellt wurden (verfolgen als Datenversionen)<\/li>\n<li><strong><code>metrics<\/code><\/strong>: Dateien, die DVC zum Experimentieren numerisch verfolgt<\/li>\n<\/ul>\n<h3>Warum <code>params.yaml<\/code> wichtig ist<\/h3>\n<p>Die Datei <code>params.yaml<\/code> isoliert Simulationsparameter aus Ausf\u00fchrungsskripten. Dies ist entscheidend f\u00fcr materialwissenschaftliche Workflows, bei denen derselbe Simulationscode hunderte Male mit unterschiedlichen Parametern ausgef\u00fchrt wird:<\/p>\n<pre><code class=\"language-yaml\"># params.yaml\nsimulator:\n  cutoff_energy: 500  # eV\n  kpoints: [8, 8, 8]\n  tolerance: 1e-6\n  \noptimization:\n  max_steps: 200\n  algorithm: ionic\n<\/code><\/pre>\n<p>Wenn Sie <code>tolerance<\/code> von <code>1e-6<\/code> in <code>1e-8<\/code> \u00e4ndern und <code>dvc repro<\/code> ausf\u00fchren, erkennt DVC die \u00c4nderung von <code>params.yaml<\/code> und f\u00fchrt jede davon abh\u00e4ngige Phase erneut aus. Die resultierende Datei <code>relaxed_structure.xyz<\/code> erh\u00e4lt ein neues Versions-Tag. Die alte Version bleibt im Cache verf\u00fcgbar &#8211; Sie verlieren keine historischen L\u00e4ufe.<\/p>\n<p>F\u00fcr Parameter-Sweeps k\u00f6nnen Sie <code>--set-param<\/code> verwenden, um Werte zu \u00fcberschreiben, ohne die Datei zu \u00e4ndern:<\/p>\n<pre><code class=\"language-bash\">dvc exp run --set-param sim.tolerance=1e-8 --set-param sim.cutoff_energy=450\n<\/code><\/pre>\n<p>Dadurch wird ein neuer Experimentzweig erstellt, der sowohl die urspr\u00fcnglichen als auch die ge\u00e4nderten L\u00e4ufe in Ihrem Pipeline-Verlauf beibeh\u00e4lt.<\/p>\n<h2>Versionierte Reproduzierbarkeit \u2013 der konzeptionelle Beitrag von DVC<\/h2>\n<p>Der Blog von DVC (Dezember 2021) f\u00fchrte die &#8222;versionierte Reproduzierbarkeit&#8220; als die F\u00e4higkeit ein, nicht nur ein Ergebnis, sondern auch den <strong>Exact experimental state<\/strong> nachzubilden, der es erzeugt hat. Dies unterscheidet DVC von der generischen Versionierung:<\/p>\n<ul>\n<li><strong>Standardversionierung<\/strong> Verfolgen Sie \u00c4nderungen an Dateien im Laufe der Zeit (Git-Zweck)<\/li>\n<li><strong>Versionsreproduzierbarkeit<\/strong> Verfolgen Sie, welche bestimmte Datenversion, Code-Commit und Parameterdateikombination ein bestimmtes Ergebnis erzeugt hat (DVC-Zweck)<\/li>\n<\/ul>\n<p>DVC erreicht dies durch die Verkn\u00fcpfung von drei unabh\u00e4ngig versionierten Artefakten:<\/p>\n<table>\n<thead>\n<tr>\n<th>Artefakt<\/th>\n<th>Versionierungssystem<\/th>\n<th>Was es verfolgt<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>.dvc<\/code>&nbsp;Zeigerdateien<\/td>\n<td>DVC<\/td>\n<td>Datendateiversion + Remote-Standort + Pr\u00fcfsumme<\/td>\n<\/tr>\n<tr>\n<td>Git verpflichtet<\/td>\n<td>Git<\/td>\n<td>Codeversion + Commit-Nachricht + Diff<\/td>\n<\/tr>\n<tr>\n<td><code>params.yaml<\/code><\/td>\n<td>Git<\/td>\n<td>Parameterdateiversion + \u00c4nderungen auf Feldebene<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Die Kombination dieser drei schafft eine reproduzierbare Einheit &#8211; ein &#8222;versioniertes Experiment&#8220;, das isoliert rekonstruiert werden kann. Dies ist f\u00fcr die Simulation von Bedeutung, da Experimente iterativ verfeinert werden. Die Forscher m\u00fcssen wissen, was funktioniert hat, und es reproduzieren k\u00f6nnen, ohne jeden Zwischenschritt erneut ausf\u00fchren zu k\u00f6nnen.<\/p>\n<h3>Praktische Implikationen<\/h3>\n<p>Wenn ein Pr\u00fcfer nach den Daten hinter einer ver\u00f6ffentlichten Figur fragt, k\u00f6nnen Sie Folgendes angeben:<\/p>\n<ol>\n<li>Der Git-Commit-Hash (Code-Version)<\/li>\n<li>Die Referenzdatei-Referenz <code>.dvc<\/code> (Datenversion)<\/li>\n<li>Die Datei <code>params.yaml<\/code> bei diesem Commit (Parameterversion)<\/li>\n<\/ol>\n<p>Zusammen reichen diese drei Artefakte aus, um das Ergebnis auf jeder Maschine zu reproduzieren. Dies ist der Goldstandard f\u00fcr die Reproduzierbarkeit der Simulation &#8211; weit \u00fcber Container (die Codeumgebungen einfrieren) oder nackte Git-Repositories (die keine gro\u00dfen Daten verarbeiten k\u00f6nnen).<\/p>\n<h2>Versuchswarteschlange und Management<\/h2>\n<p>Das Experiment-Management (<code>dvc exp<\/code>) von DVC erweitert das Pipeline-Modell, um gleichzeitige und in der Warteschlange gestellte Experimente zu unterst\u00fctzen:<\/p>\n<pre><code class=\"language-bash\"># Run a single experiment with custom parameters\ndvc exp run -S sim.tolerance=1e-8\n\n# Queue multiple experiments\ndvc exp run --queue -S sim.tolerance=1e-8\ndvc exp run --queue -S sim.tolerance=1e-6\ndvc exp run --queue -S sim.tolerance=1e-5\n\n# Execute queued experiments\ndvc exp run\n<\/code><\/pre>\n<p>Das Flag <code>--queue<\/code> verz\u00f6gert die Ausf\u00fchrung, sodass Sie mehrere Experimente vorbereiten und diese nacheinander ausf\u00fchren k\u00f6nnen. Dies ist wertvoll f\u00fcr Computerexperimente, die stundenlang oder tagelang ausgef\u00fchrt werden. Sie k\u00f6nnen einen Parameter-Sweep \u00fcber Nacht in die Warteschlange stellen, ohne jeden Lauf manuell zu starten.<\/p>\n<p>F\u00fcr den Experimentvergleich bietet DVClive Echtzeit-Metrik-Tracking:<\/p>\n<pre><code class=\"language-python\"># src\/metrics.py \u2014 DVCLive integration\nfrom dvclive import Live\n\nwith Live() as live:\n    for step in range(n_iterations):\n        result = run_step(step)\n        live.step = step\n        live.log(\"energy\", result[\"total_energy\"])\n        live.log(\"forces\", result[\"max_force\"])\n<\/code><\/pre>\n<p>Dies erzeugt ein interaktives Vergleichs-Dashboard, in dem Sie sehen k\u00f6nnen, wie sich Energie und Kr\u00e4fte bei Parameter-Sweeps entwickeln.<\/p>\n<h2>Ausf\u00fchren von DVC-Pipelines auf HPC-Clustern<\/h2>\n<p>Die meisten Computerwissenschaftler betreiben keine Pipelines auf Laptops. Sie f\u00fchren sie auf Clustern mit Slurm-, PBS- oder LSF-Schedulern aus. DVC l\u00e4sst sich \u00fcber den <code>srun<\/code>-Wrapper in Slurm integrieren und erm\u00f6glicht die Ausf\u00fchrung von generativen Pipeline-Ausf\u00fchrungen:<\/p>\n<pre><code class=\"language-bash\"># Run a single pipeline stage with SLURM resource allocation\nsrun dvc repro -n relax --job slurm-job.sh\n\n# Run all pipeline stages on the cluster\nsrun dvc repro\n<\/code><\/pre>\n<p>Das Flag <code>--job<\/code> weist DVC an, jede Phase \u00fcber den Job-Scheduler von Slurm auszuf\u00fchren und automatisch zu bearbeiten:<\/p>\n<ul>\n<li>Clusterspezifische Ressourcenzuordnung (Speicher, CPU, GPU-Knoten)<\/li>\n<li>Batch-Modus-Ausf\u00fchrung ohne manuellen Eingriff<\/li>\n<li>Automatische Jobwarteschlange f\u00fcr Pipeline-Stufen<\/li>\n<li>Integration mit clusterspezifischen Dateisystemen und Speicher (LUSTRE, GPFS, BEEGFS)<\/li>\n<\/ul>\n<p>ARXIV 2505.06558v2 (September 2025) zeigt diese Integration f\u00fcr materialwissenschaftliche Workflows mit DFT-Berechnungen auf HPC-Clustern. Der entscheidende Vorteil ist, dass <code>dvc repro<\/code> Cluster-f\u00e4hig wird. Wenn eine Phase fehlschl\u00e4gt oder sich ihre Abh\u00e4ngigkeiten \u00e4ndern, \u00fcbernimmt Slurm die Ressourcenzuweisung, um nur die erforderlichen Phasen erneut auszuf\u00fchren.<\/p>\n<h3>\u00dcberlegungen zum Clusterspeicher<\/h3>\n<p>Der Remote-Speicher von DVC funktioniert gut mit Cluster-Dateisystemen. Sie k\u00f6nnen DVC so konfigurieren, dass das L\u00fcster- oder GPFS-Dateisystem des Clusters als DVC-Remote verwendet wird:<\/p>\n<pre><code class=\"language-bash\"># Configure a cluster storage remote\ndvc remote modify cluster_storage token_url \"https:\/\/cluster-storage.example.com\"\n<\/code><\/pre>\n<p>Dies vermeidet den Aufwand beim Kopieren von Daten in den externen Cloud-Speicher und h\u00e4lt die Pipeline innerhalb der Speicherhierarchie des Clusters eigen.<\/p>\n<h2>W3C Prov-JSON Provenienz-Tracking<\/h2>\n<p>W\u00e4hrend DVC Pipeline-Stufen und Datenversionen verfolgt, erzeugt es nativ kein maschinell umsetzbares Provenienzdiagramm. Daf\u00fcr ben\u00f6tigen Sie einen Provenienzstandard &#8211; und das aufkommende Format ist W3C Prov-JSON.<\/p>\n<p>Yprov4ML (ArXiv Juli 2025) implementiert die W3C Proven-JSON-Provenienz mit minimalen Code-Modifikationen. Es erfasst:<\/p>\n<ul>\n<li><strong>Wer<\/strong> hat das Experiment ausgef\u00fchrt (Benutzeridentit\u00e4t)<\/li>\n<li><strong>Was<\/strong> Daten und Code wurden verwendet (Quelle Provenienz)<\/li>\n<li><strong>Wie<\/strong> Das Experiment lief (Execution Provenienz)<\/li>\n<li><strong>Warum<\/strong> (optionale Motivation, gebunden an Forschungsziele)<\/li>\n<\/ul>\n<p>Die Ausgabe ist ein Prov-JSON-Diagramm &#8211; ein gerichteter Graph, in dem Knoten Entit\u00e4ten (Dateien, Parameter, Code-Commits) und Kanten darstellen (abgeleitet von, erzeugt von, erstellt, verwendet von By). Dieses Format erm\u00f6glicht:<\/p>\n<ul>\n<li><strong>Interoperabilit\u00e4t \u00fcber Provenienzsysteme<\/strong>: Prov-JSON ist maschinenlesbar und kann mit SPARQL- oder Graph-Datenbanken abgefragt werden<\/li>\n<li><strong>Faire Daten-Konformit\u00e4t<\/strong>: Prov-JSON-Diagramme erf\u00fcllen faire Prinzipien, indem sie die Datenlinien und die Wiederverwendungsbedingungen dokumentieren<\/li>\n<li><strong>Institutionelle Zusammenarbeit<\/strong>: Prov-JSON ist ein W3C-Standard, daher sind Provenienz-Diagramme verschiedener Institutionen kompatibel<\/li>\n<\/ul>\n<h3>Prov-JSON gegen Ro-Crate<\/h3>\n<p>Es ist n\u00fctzlich, Prov-JSON von Ro-Crate zu unterscheiden, da beide in Reproduzierbarkeitsdiskussionen erscheinen:<\/p>\n<table>\n<thead>\n<tr>\n<th>Aspekt<\/th>\n<th>Ro-Crate<\/th>\n<th>prov-json<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Zweck<\/td>\n<td>Paketformat f\u00fcr Rich-Metadaten<\/td>\n<td>Datenformat f\u00fcr Provenienzdiagramme<\/td>\n<\/tr>\n<tr>\n<td>Umfang<\/td>\n<td>Ganzer Datensatz + zugeh\u00f6rige Ressourcen<\/td>\n<td>Ausf\u00fchrungslinie und Abh\u00e4ngigkeiten<\/td>\n<\/tr>\n<tr>\n<td>Format<\/td>\n<td>json-ld<\/td>\n<td>JSON (PROV-Standard)<\/td>\n<\/tr>\n<tr>\n<td>Interoperabilit\u00e4t<\/td>\n<td>Eigenst\u00e4ndiges Paket<\/td>\n<td>Graph-basiert, abfragef\u00e4hig<\/td>\n<\/tr>\n<tr>\n<td>Beziehung<\/td>\n<td>Komplement\u00e4r, nicht konkurrierend<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>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: &#8222;Hier sind die Daten&#8220; (Ro-Crate) plus &#8222;Hier ist, wie es produziert wurde&#8220; (prov-json).<\/p>\n<h2>Wann verwenden Sie DVC vs DataLad vs. Prov-kompatible Bibliotheken<\/h2>\n<p>Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken h\u00e4ngt von Ihren Workflow-Mustern ab:<\/p>\n<table>\n<thead>\n<tr>\n<th>Kriterium<\/th>\n<th>DVC<\/th>\n<th>datalad<\/th>\n<th>Prov-Bibliotheken<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Hauptanwendungsfall<\/td>\n<td>Pipeline-orientierte Experimente<\/td>\n<td>Langfristige Datenkuration<\/td>\n<td>Maschinell umsetzbare Provenienz<\/td>\n<\/tr>\n<tr>\n<td>Datengr\u00f6\u00dfe<\/td>\n<td>Gro\u00dfe Dateien (Modelle, Simulationen)<\/td>\n<td>Gro\u00dfe verteilte Datens\u00e4tze<\/td>\n<td>N\/A (metadatenorientiert)<\/td>\n<\/tr>\n<tr>\n<td>Ausf\u00fchrungsmodell<\/td>\n<td>B\u00fchnenbasierte Pipeline (<code>dvc repro<\/code>)<\/td>\n<td>Befehlsbasiert (<code>datalad run<\/code>)<\/td>\n<td>Dekorateur<\/td>\n<\/tr>\n<tr>\n<td>HPC-Integration<\/td>\n<td><code>srun dvc repro<\/code><\/td>\n<td>Native Git-Anhang + SSH<\/td>\n<td>konfigurierbar<\/td>\n<\/tr>\n<tr>\n<td>Provenienzausgabe<\/td>\n<td><code>.dvc<\/code> Dateien + Git-Verlauf<\/td>\n<td>Git-Annex-Symlinks + Git-Log<\/td>\n<td>Prov-JSON-Diagramm<\/td>\n<\/tr>\n<tr>\n<td>am besten f\u00fcr<\/td>\n<td>Material-Science-Pipelines, Parameter-Sweeps<\/td>\n<td>Langfristige Repository-Kuration, Einhaltung der Gebote<\/td>\n<td>Faire Daten, institutionelle Provenienz<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>DVC ist genau das Richtige f\u00fcr Sie, wenn:<\/h3>\n<ul>\n<li>Ihr Workflow hat mehrere abh\u00e4ngige Phasen (Entspannung \u2192 Eigenschaftsberechnung \u2192 Visualisierung)<\/li>\n<li>Sie ben\u00f6tigen Parameter-Sweeps mit automatischer Nachlauf<\/li>\n<li>Sie m\u00f6chten verfolgen, welche Parameterkombination das Ergebnis mit der niedrigsten Energie erzeugt<\/li>\n<\/ul>\n<h3>Datalad ist genau das Richtige f\u00fcr Sie, wenn:<\/h3>\n<ul>\n<li>Sie kuratieren ein langfristiges Dataset-Repository<\/li>\n<li>Sie ben\u00f6tigen Git-Annex-Symlinks f\u00fcr die effiziente Handhabung von Gro\u00dfdateien<\/li>\n<li>Sie arbeiten mit verteilten Datens\u00e4tzen \u00fcber Institutionen hinweg<\/li>\n<li>Sie ben\u00f6tigen die Einhaltung von Geboten (h\u00e4ufig in der Neuroimaging)<\/li>\n<\/ul>\n<h3>Pro-konforme Bibliotheken sind f\u00fcr Sie richtig, wenn:<\/h3>\n<ul>\n<li>Sie ben\u00f6tigen maschinell umsetzbare Provenienz f\u00fcr faire Einhaltung<\/li>\n<li>Sie m\u00f6chten ein abfragef\u00e4higes Provenienzdiagramm f\u00fcr die Datenabstammung<\/li>\n<li>Sie arbeiten in verschiedenen Institutionen mit verschiedenen Provenienzsystemen zusammen<\/li>\n<li>Sie ver\u00f6ffentlichen in einem fairen Daten-Repository<\/li>\n<\/ul>\n<h2>Zusammenstellen \u2013 ein praktischer Workflow<\/h2>\n<p>Hier ist ein praktisches Workflow-Muster, das alle oben genannten Konzepte kombiniert:<\/p>\n<pre><code class=\"language-bash\"># 1. Initialize the repository\ngit init\ndvc init\n\n# 2. Add the data\ndvc add data\/raw_crystal_structure.xyz\n\n# 3. Run the pipeline\ndvc repro\n\n# 4. Check the results\ndvc metrics show results\/energies.txt\n\n# 5. Run experiments with different parameters\ndvc exp run -S sim.tolerance=1e-8 --set-param sim.cutoff_energy=550\n\n# 6. Push data and experiments to remote\ndvc push\ndvc exp push\ngit push origin main\n\n# 7. (Optional) Generate PROV-JSON provenance\npython src\/provenance.py --output provenance.json\n<\/code><\/pre>\n<p>Dieses Muster stellt sicher, dass jedes Simulationsergebnis auf seine genaue Datenversion, das Code-Commit und die Parameterdatei zur\u00fcckgef\u00fchrt werden kann. Die Prov-JSON-Ausgabe (Schritt 7) f\u00fcgt eine maschinenaktionsf\u00e4hige Provenienzschicht auf der DVC-Pipeline hinzu.<\/p>\n<h2>H\u00e4ufige Fehler &#8211; was zu vermeiden<\/h2>\n<p><strong>Fehler 1: Alles versionieren<\/strong> \u2013 F\u00fchren Sie nicht <code>dvc add<\/code> 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\u00e4ndig ausgeschlossen werden. \u00dcberaddieren erzeugt Pipeline-L\u00e4rm.<\/p>\n<p><strong>Fehler 2: Hardcoding-Pfade<\/strong>: Verwenden Sie in <code>dvc.yaml<\/code> keine absoluten Pfade. Verwenden Sie relative Pfade, damit die Pipeline auf verschiedenen Computern und Clusterkonfigurationen funktioniert.<\/p>\n<p><strong>Fehler&nbsp;3: Datentypen mischen<\/strong>: Geben Sie keine Simulationsparameter und modellieren Sie Pr\u00fcfpunkte in derselben <code>.dvc<\/code>-Datei. Halten Sie Datentypen getrennt, um Cache-Konflikte zu vermeiden.<\/p>\n<p><strong>Fehler 4: Provenienz ignorieren<\/strong> \u2013 DVC-Dateien allein reichen nicht f\u00fcr eine faire Einhaltung aus. Wenn Ihre Institution Provenienzdiagramme ben\u00f6tigt, koppeln Sie DVC mit Prov-JSON-Ausgabe (Yprov4ML) oder Ro-Crate-Verpackungen.<\/p>\n<p><strong>Fehler 5: Vergessen von <code>params.yaml<\/code><\/strong> \u2014 Wenn Sie in Ihren Skripten Hardcode-Parameter in Ihren Skripten vergeben, anstatt sie in <code>params.yaml<\/code> zu isolieren, wird das Parameter-Tracking von DVC nutzlos. Verwenden Sie f\u00fcr Simulationsparameter immer <code>params.yaml<\/code>.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>DVC wandelt wissenschaftliche Workflows aus fragilen, speicherabh\u00e4ngigen Prozessen in deterministische, abh\u00e4ngigkeitsbewusste Pipelines um. Die wichtigste Erkenntnis ist, dass <code>dvc.yaml<\/code> Pipeline-Dateien und die Parameterisolation <code>params.yaml<\/code> &#8222;versionierte Reproduzierbarkeit&#8220; erstellen &#8211; die F\u00e4higkeit, nicht nur ein Ergebnis zu rekonstruieren, sondern auch den exakten experimentellen Status (Datenversion + Code-Commit + Parameterdatei), der es erzeugt hat. Dies geht \u00fcber Container hinaus (die Code-Umgebungen einfrieren) und \u00fcber Git hinaus (die keine gro\u00dfen Datens\u00e4tze verarbeiten k\u00f6nnen).<\/p>\n<p>F\u00fcr die HPC-Integration erm\u00f6glicht der <code>srun<\/code>-Wrapper von Slurm die Ausf\u00fchrung einer Cluster-nativen Pipeline ohne manuellen Eingriff. F\u00fcr die Provenienz bildet sich W3C Prov-JSON (Yprov4ML) als interoperables Format, das zu Ro-Crate-Verpackungen komplementiert wird und die maschinenschaltbare Datenlinie erm\u00f6glicht, die den Anforderungen der fairen Einhaltung gen\u00fcgt.<\/p>\n<p>Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken h\u00e4ngt von Ihren Workflow-Mustern ab: DVC f\u00fcr pipeline-orientierte Experimente, DataLad f\u00fcr die Langzeit-Datenkuration und Prov-Bibliotheken f\u00fcr maschinell umsetzbare Provenienzdiagramme. Die meisten Simulationsteams profitieren von der Verwendung von DVC f\u00fcr die Pipeline-Ausf\u00fchrung und Prov-JSON f\u00fcr die Provenienzverfolgung \u2013 die beiden Tools sind komplement\u00e4r und konkurrieren nicht.<\/p>\n<hr>\n<h2>Verwandte Anleitungen<\/h2>\n<ul>\n<li><a href=\"\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/\">Reproduzierbarkeit jenseits von Containern<\/a> \u2014 Deckt DVC-Grundlagen, Ro-Crate-Provenienzverpackungen und containerbasierte Reproduzierbarkeitsmuster ab<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Verwalten von PDE-Problemen im gro\u00dfen Ma\u00dfstab<\/a> \u2014 Er\u00f6rtert das Management von Clusterressourcen und HPC Workflows<\/li>\n<li><a href=\"https:\/\/matforge.org\/verification-vs-validation-in-scientific-simulations-a-practical-guide\/\">Verifikation vs. Validierung in wissenschaftlichen Simulationen<\/a> \u2014 Erkl\u00e4rt den breiteren Kontext der Reproduzierbarkeit f\u00fcr Simulationsergebnisse<\/li>\n<\/ul>\n","protected":false,"raw":"<h1>Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows<\/h1>\n<p>Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-\u00c4nderungen zu verfolgen - Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche <strong>Spezifische Kombination<\/strong> von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis gef\u00fchrt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von einer reproduzierbaren Simulationspipeline.<\/p>\n<p>Das am weitesten verbreitete Tool daf\u00fcr ist DVC (Data Version Control), das das Versionsmodell von Git erweitert, um gro\u00dfe Datens\u00e4tze und Pipeline-Stufen zu verarbeiten. Dieser Artikel behandelt die praktische DVC-Implementierung f\u00fcr wissenschaftliche Workflows \u2013 Pipeline-Konstruktion mit <code>dvc.yaml<\/code>, Parameterisolierung mit <code>params.yaml<\/code>, HPC\/Slurm-Integration und aufkommende Provenienz-Tracking von W3C Prov-JSON \u2013 so k\u00f6nnen Sie deterministische Simulationskampagnen erstellen, die das Team \u00fcberleben Umsatz, Hardware-Migration und jahrelange Projektlebenszyklen.<\/p>\n<h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li><strong>Der Kernwert von DVC<\/strong>: Pipeline-Dateien (<code>dvc.yaml<\/code>) machen Simulationen abh\u00e4ngigkeitsbewusst, sodass <code>dvc repro<\/code> nur die \u00c4nderungen erneut ausf\u00fchrt.<\/li>\n<li><strong>Versionsreproduzierbarkeit<\/strong>: DVC verkn\u00fcpft Daten-Snapshots (<code>.dvc<\/code> Dateien), Code-Commits (Git) und Parameterdateien (<code>params.yaml<\/code>) zu reproduzierbaren Experimentiereinheiten<\/li>\n<li><strong>HPC-Integration<\/strong>: Slurm-Batchplanung umschlie\u00dft DVC f\u00fcr die Ausf\u00fchrung von Cluster-Native Pipeline ohne manuellen Eingriff<\/li>\n<li><strong>Provenance Standards<\/strong>: W3C Prov-JSON (YProv4ML) tritt als interoperables Format auf, das zu Ro-Crate-Verpackungen erg\u00e4nzt<\/li>\n<li><strong>DVC vs Datalad<\/strong>: W\u00e4hlen Sie DVC f\u00fcr Pipeline-orientierte Experimente; W\u00e4hlen Sie DataLad f\u00fcr langfristige Datenkuration und verteilte Datens\u00e4tze<\/li>\n<\/ul>\n<h2>Warum die Standardversionierung f\u00fcr Simulationsworkflows fehlschl\u00e4gt<\/h2>\n<p>Git eignet sich hervorragend zum Tracking von Code-\u00c4nderungen. Es ist schrecklich, Daten\u00e4nderungen zu verfolgen.<\/p>\n<p>Wenn Sie eine DFT-Relaxationsberechnung ausf\u00fchren, kann Git die resultierende <code>.xyz<\/code>-Kristallstrukturdatei (oft zehn MB) nicht speichern. Sie k\u00f6nnen es auf ein freigegebenes Laufwerk kopieren oder seinen SHA-256-Hash an eine Textdatei anh\u00e4ngen oder sich auf den Speicher verlassen. Alle drei Ans\u00e4tze werden unterbrochen, wenn sich die Datenquelle \u00e4ndert, wenn Sie sie mit Mitarbeitern teilen m\u00fcssen, die keinen Zugriff auf das freigegebene Laufwerk haben, oder wenn Sie sechs Monate sp\u00e4ter wiederkommen und vergessen, welcher Parametersatz die Struktur mit der niedrigsten Energie erzeugt hat.<\/p>\n<p>Datenversionstools l\u00f6sen dies durch die Entkopplung von <strong>Datenverfolgung<\/strong> von <strong>Code-Tracking<\/strong>. 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 <code>.dvc<\/code>-Dateien oder Git-Annex-Symlink-Referenzen \u2013 enthalten Metadaten (Checksum, Remote-Standort, Versions-Tag), ohne die tats\u00e4chlichen Daten zu duplizieren.<\/p>\n<p>Diese Trennung ist f\u00fcr Simulations-Workflows wichtig, da das Datenvolumen unabh\u00e4ngig vom Codevolumen skaliert wird. Eine einzelne Simulationskampagne kann Tausende von Trajektoriendateien erzeugen, w\u00e4hrend die Python-Skripte, die sie erzeugen, in einigen hundert Zeilen bleiben.<\/p>\n<h3>Die Pipeline-L\u00fccke<\/h3>\n<p>Die meisten Forscher beginnen mit der Ad-hoc-Datenverfolgung: Ein Bash-Skript, das Berechnungen in der Reihenfolge ausf\u00fchrt, die Ergebnisse in ein Verzeichnis <code>results\/<\/code> kopiert und die endg\u00fcltigen Zahlen in ein Google Sheet eingef\u00fcgt werden. Das funktioniert f\u00fcr kleine Projekte. Es bricht zusammen, wenn:<\/p>\n<ol>\n<li><strong>Neulauf mit unterschiedlichen Parametern<\/strong> \u2013 Sie m\u00fcssen sich merken, welche <code>params.yaml<\/code>-Datei verwendet wurde, und nur die ge\u00e4nderten Phasen erneut ausf\u00fchren<\/li>\n<li><strong>Debugging-Fehler<\/strong> \u2013 Sie m\u00fcssen wissen, ob der Fehler auf Datenbesch\u00e4digung, Code-\u00c4nderungen oder Parameterfehlanpassungen zur\u00fcckzuf\u00fchren ist<\/li>\n<li><strong>Team Handoff<\/strong> \u2013 Ein neuer Sch\u00fcler kann die Pipeline nicht aus einem <code>bash<\/code>-Skript und einem Ordner mit verwaisten Dateien rekonstruieren<\/li>\n<\/ol>\n<p>Die DVC-Pipeline-Definitionsdatei (<code>dvc.yaml<\/code>) schlie\u00dft diese L\u00fccke, indem sie Phasen mit expliziten Abh\u00e4ngigkeiten und Ausgaben deklariert. Jede Phase wird nur dann erneut ausgef\u00fchrt, wenn sich die Abh\u00e4ngigkeiten \u00e4ndern (<code>dvc repro &lt;stage&gt;<\/code>), wodurch Simulationskampagnen beim erneuten Ausf\u00fchren von Berechnungen mit unterschiedlichen Parametern dramatisch effizienter werden.<\/p>\n<h2>DVC-Pipeline-Konstruktion f\u00fcr wissenschaftliche Workflows<\/h2>\n<p>Eine DVC-Pipeline-Datei ist ein deklaratives YAML-Dokument, das die Abh\u00e4ngigkeit Ihrer Simulationsschritte voneinander abbildet. Hier ist ein konkretes Beispiel f\u00fcr einen Workflow f\u00fcr Computational Materials Science:<\/p>\n<pre><code class=\"language-yaml\"># dvc.yaml \u2014 DFT relaxation and energy calculation pipeline\n\nstages:\n  relax:\n    cmd: python src\/relax.py\n    deps:\n    - data\/raw_crystal_structure.xyz\n    - src\/relax.py\n    params:\n    - params.yaml\n    outs:\n    - results\/relaxed_structure.xyz\n\n  energy:\n    cmd: python src\/energy.py\n    deps:\n    - results\/relaxed_structure.xyz\n    - src\/energy.py\n    params:\n    - params.yaml\n    outs:\n    - results\/energies.txt\n    metrics:\n    - results\/energies.txt\n\n  visualize:\n    cmd: python src\/plot.py\n    deps:\n    - results\/energies.txt\n    - src\/plot.py\n    outs:\n    - figures\/energy_plot.png\n<\/code><\/pre>\n<p>Jede Etappe erkl\u00e4rt:<\/p>\n<ul>\n<li><strong><code>cmd<\/code><\/strong>: Der Befehl, der die Ausgaben dieser Stufe generiert<\/li>\n<li><strong><code>deps<\/code><\/strong>: Dateien, die diese Phase, wenn sie ge\u00e4ndert werden, ausl\u00f6sen<\/li>\n<li><strong><code>params<\/code><\/strong>: Parameterdateien, die bei einer erneuten Ausf\u00fchrung dieser Phase ausl\u00f6sen<\/li>\n<li><strong><code>outs<\/code><\/strong>: Dateien, die in dieser Phase erstellt wurden (verfolgen als Datenversionen)<\/li>\n<li><strong><code>metrics<\/code><\/strong>: Dateien, die DVC zum Experimentieren numerisch verfolgt<\/li>\n<\/ul>\n<h3>Warum <code>params.yaml<\/code> wichtig ist<\/h3>\n<p>Die Datei <code>params.yaml<\/code> isoliert Simulationsparameter aus Ausf\u00fchrungsskripten. Dies ist entscheidend f\u00fcr materialwissenschaftliche Workflows, bei denen derselbe Simulationscode hunderte Male mit unterschiedlichen Parametern ausgef\u00fchrt wird:<\/p>\n<pre><code class=\"language-yaml\"># params.yaml\nsimulator:\n  cutoff_energy: 500  # eV\n  kpoints: [8, 8, 8]\n  tolerance: 1e-6\n  \noptimization:\n  max_steps: 200\n  algorithm: ionic\n<\/code><\/pre>\n<p>Wenn Sie <code>tolerance<\/code> von <code>1e-6<\/code> in <code>1e-8<\/code> \u00e4ndern und <code>dvc repro<\/code> ausf\u00fchren, erkennt DVC die \u00c4nderung von <code>params.yaml<\/code> und f\u00fchrt jede davon abh\u00e4ngige Phase erneut aus. Die resultierende Datei <code>relaxed_structure.xyz<\/code> erh\u00e4lt ein neues Versions-Tag. Die alte Version bleibt im Cache verf\u00fcgbar - Sie verlieren keine historischen L\u00e4ufe.<\/p>\n<p>F\u00fcr Parameter-Sweeps k\u00f6nnen Sie <code>--set-param<\/code> verwenden, um Werte zu \u00fcberschreiben, ohne die Datei zu \u00e4ndern:<\/p>\n<pre><code class=\"language-bash\">dvc exp run --set-param sim.tolerance=1e-8 --set-param sim.cutoff_energy=450\n<\/code><\/pre>\n<p>Dadurch wird ein neuer Experimentzweig erstellt, der sowohl die urspr\u00fcnglichen als auch die ge\u00e4nderten L\u00e4ufe in Ihrem Pipeline-Verlauf beibeh\u00e4lt.<\/p>\n<h2>Versionierte Reproduzierbarkeit \u2013 der konzeptionelle Beitrag von DVC<\/h2>\n<p>Der Blog von DVC (Dezember 2021) f\u00fchrte die \"versionierte Reproduzierbarkeit\" als die F\u00e4higkeit ein, nicht nur ein Ergebnis, sondern auch den <strong>Exact experimental state<\/strong> nachzubilden, der es erzeugt hat. Dies unterscheidet DVC von der generischen Versionierung:<\/p>\n<ul>\n<li><strong>Standardversionierung<\/strong> Verfolgen Sie \u00c4nderungen an Dateien im Laufe der Zeit (Git-Zweck)<\/li>\n<li><strong>Versionsreproduzierbarkeit<\/strong> Verfolgen Sie, welche bestimmte Datenversion, Code-Commit und Parameterdateikombination ein bestimmtes Ergebnis erzeugt hat (DVC-Zweck)<\/li>\n<\/ul>\n<p>DVC erreicht dies durch die Verkn\u00fcpfung von drei unabh\u00e4ngig versionierten Artefakten:<\/p>\n<table>\n<thead>\n<tr>\n<th>Artefakt<\/th>\n<th>Versionierungssystem<\/th>\n<th>Was es verfolgt<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>.dvc<\/code>&nbsp;Zeigerdateien<\/td>\n<td>DVC<\/td>\n<td>Datendateiversion + Remote-Standort + Pr\u00fcfsumme<\/td>\n<\/tr>\n<tr>\n<td>Git verpflichtet<\/td>\n<td>Git<\/td>\n<td>Codeversion + Commit-Nachricht + Diff<\/td>\n<\/tr>\n<tr>\n<td><code>params.yaml<\/code><\/td>\n<td>Git<\/td>\n<td>Parameterdateiversion + \u00c4nderungen auf Feldebene<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Die Kombination dieser drei schafft eine reproduzierbare Einheit - ein \"versioniertes Experiment\", das isoliert rekonstruiert werden kann. Dies ist f\u00fcr die Simulation von Bedeutung, da Experimente iterativ verfeinert werden. Die Forscher m\u00fcssen wissen, was funktioniert hat, und es reproduzieren k\u00f6nnen, ohne jeden Zwischenschritt erneut ausf\u00fchren zu k\u00f6nnen.<\/p>\n<h3>Praktische Implikationen<\/h3>\n<p>Wenn ein Pr\u00fcfer nach den Daten hinter einer ver\u00f6ffentlichten Figur fragt, k\u00f6nnen Sie Folgendes angeben:<\/p>\n<ol>\n<li>Der Git-Commit-Hash (Code-Version)<\/li>\n<li>Die Referenzdatei-Referenz <code>.dvc<\/code> (Datenversion)<\/li>\n<li>Die Datei <code>params.yaml<\/code> bei diesem Commit (Parameterversion)<\/li>\n<\/ol>\n<p>Zusammen reichen diese drei Artefakte aus, um das Ergebnis auf jeder Maschine zu reproduzieren. Dies ist der Goldstandard f\u00fcr die Reproduzierbarkeit der Simulation - weit \u00fcber Container (die Codeumgebungen einfrieren) oder nackte Git-Repositories (die keine gro\u00dfen Daten verarbeiten k\u00f6nnen).<\/p>\n<h2>Versuchswarteschlange und Management<\/h2>\n<p>Das Experiment-Management (<code>dvc exp<\/code>) von DVC erweitert das Pipeline-Modell, um gleichzeitige und in der Warteschlange gestellte Experimente zu unterst\u00fctzen:<\/p>\n<pre><code class=\"language-bash\"># Run a single experiment with custom parameters\ndvc exp run -S sim.tolerance=1e-8\n\n# Queue multiple experiments\ndvc exp run --queue -S sim.tolerance=1e-8\ndvc exp run --queue -S sim.tolerance=1e-6\ndvc exp run --queue -S sim.tolerance=1e-5\n\n# Execute queued experiments\ndvc exp run\n<\/code><\/pre>\n<p>Das Flag <code>--queue<\/code> verz\u00f6gert die Ausf\u00fchrung, sodass Sie mehrere Experimente vorbereiten und diese nacheinander ausf\u00fchren k\u00f6nnen. Dies ist wertvoll f\u00fcr Computerexperimente, die stundenlang oder tagelang ausgef\u00fchrt werden. Sie k\u00f6nnen einen Parameter-Sweep \u00fcber Nacht in die Warteschlange stellen, ohne jeden Lauf manuell zu starten.<\/p>\n<p>F\u00fcr den Experimentvergleich bietet DVClive Echtzeit-Metrik-Tracking:<\/p>\n<pre><code class=\"language-python\"># src\/metrics.py \u2014 DVCLive integration\nfrom dvclive import Live\n\nwith Live() as live:\n    for step in range(n_iterations):\n        result = run_step(step)\n        live.step = step\n        live.log(\"energy\", result[\"total_energy\"])\n        live.log(\"forces\", result[\"max_force\"])\n<\/code><\/pre>\n<p>Dies erzeugt ein interaktives Vergleichs-Dashboard, in dem Sie sehen k\u00f6nnen, wie sich Energie und Kr\u00e4fte bei Parameter-Sweeps entwickeln.<\/p>\n<h2>Ausf\u00fchren von DVC-Pipelines auf HPC-Clustern<\/h2>\n<p>Die meisten Computerwissenschaftler betreiben keine Pipelines auf Laptops. Sie f\u00fchren sie auf Clustern mit Slurm-, PBS- oder LSF-Schedulern aus. DVC l\u00e4sst sich \u00fcber den <code>srun<\/code>-Wrapper in Slurm integrieren und erm\u00f6glicht die Ausf\u00fchrung von generativen Pipeline-Ausf\u00fchrungen:<\/p>\n<pre><code class=\"language-bash\"># Run a single pipeline stage with SLURM resource allocation\nsrun dvc repro -n relax --job slurm-job.sh\n\n# Run all pipeline stages on the cluster\nsrun dvc repro\n<\/code><\/pre>\n<p>Das Flag <code>--job<\/code> weist DVC an, jede Phase \u00fcber den Job-Scheduler von Slurm auszuf\u00fchren und automatisch zu bearbeiten:<\/p>\n<ul>\n<li>Clusterspezifische Ressourcenzuordnung (Speicher, CPU, GPU-Knoten)<\/li>\n<li>Batch-Modus-Ausf\u00fchrung ohne manuellen Eingriff<\/li>\n<li>Automatische Jobwarteschlange f\u00fcr Pipeline-Stufen<\/li>\n<li>Integration mit clusterspezifischen Dateisystemen und Speicher (LUSTRE, GPFS, BEEGFS)<\/li>\n<\/ul>\n<p>ARXIV 2505.06558v2 (September 2025) zeigt diese Integration f\u00fcr materialwissenschaftliche Workflows mit DFT-Berechnungen auf HPC-Clustern. Der entscheidende Vorteil ist, dass <code>dvc repro<\/code> Cluster-f\u00e4hig wird. Wenn eine Phase fehlschl\u00e4gt oder sich ihre Abh\u00e4ngigkeiten \u00e4ndern, \u00fcbernimmt Slurm die Ressourcenzuweisung, um nur die erforderlichen Phasen erneut auszuf\u00fchren.<\/p>\n<h3>\u00dcberlegungen zum Clusterspeicher<\/h3>\n<p>Der Remote-Speicher von DVC funktioniert gut mit Cluster-Dateisystemen. Sie k\u00f6nnen DVC so konfigurieren, dass das L\u00fcster- oder GPFS-Dateisystem des Clusters als DVC-Remote verwendet wird:<\/p>\n<pre><code class=\"language-bash\"># Configure a cluster storage remote\ndvc remote modify cluster_storage token_url \"https:\/\/cluster-storage.example.com\"\n<\/code><\/pre>\n<p>Dies vermeidet den Aufwand beim Kopieren von Daten in den externen Cloud-Speicher und h\u00e4lt die Pipeline innerhalb der Speicherhierarchie des Clusters eigen.<\/p>\n<h2>W3C Prov-JSON Provenienz-Tracking<\/h2>\n<p>W\u00e4hrend DVC Pipeline-Stufen und Datenversionen verfolgt, erzeugt es nativ kein maschinell umsetzbares Provenienzdiagramm. Daf\u00fcr ben\u00f6tigen Sie einen Provenienzstandard - und das aufkommende Format ist W3C Prov-JSON.<\/p>\n<p>Yprov4ML (ArXiv Juli 2025) implementiert die W3C Proven-JSON-Provenienz mit minimalen Code-Modifikationen. Es erfasst:<\/p>\n<ul>\n<li><strong>Wer<\/strong> hat das Experiment ausgef\u00fchrt (Benutzeridentit\u00e4t)<\/li>\n<li><strong>Was<\/strong> Daten und Code wurden verwendet (Quelle Provenienz)<\/li>\n<li><strong>Wie<\/strong> Das Experiment lief (Execution Provenienz)<\/li>\n<li><strong>Warum<\/strong> (optionale Motivation, gebunden an Forschungsziele)<\/li>\n<\/ul>\n<p>Die Ausgabe ist ein Prov-JSON-Diagramm - ein gerichteter Graph, in dem Knoten Entit\u00e4ten (Dateien, Parameter, Code-Commits) und Kanten darstellen (abgeleitet von, erzeugt von, erstellt, verwendet von By). Dieses Format erm\u00f6glicht:<\/p>\n<ul>\n<li><strong>Interoperabilit\u00e4t \u00fcber Provenienzsysteme<\/strong>: Prov-JSON ist maschinenlesbar und kann mit SPARQL- oder Graph-Datenbanken abgefragt werden<\/li>\n<li><strong>Faire Daten-Konformit\u00e4t<\/strong>: Prov-JSON-Diagramme erf\u00fcllen faire Prinzipien, indem sie die Datenlinien und die Wiederverwendungsbedingungen dokumentieren<\/li>\n<li><strong>Institutionelle Zusammenarbeit<\/strong>: Prov-JSON ist ein W3C-Standard, daher sind Provenienz-Diagramme verschiedener Institutionen kompatibel<\/li>\n<\/ul>\n<h3>Prov-JSON gegen Ro-Crate<\/h3>\n<p>Es ist n\u00fctzlich, Prov-JSON von Ro-Crate zu unterscheiden, da beide in Reproduzierbarkeitsdiskussionen erscheinen:<\/p>\n<table>\n<thead>\n<tr>\n<th>Aspekt<\/th>\n<th>Ro-Crate<\/th>\n<th>prov-json<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Zweck<\/td>\n<td>Paketformat f\u00fcr Rich-Metadaten<\/td>\n<td>Datenformat f\u00fcr Provenienzdiagramme<\/td>\n<\/tr>\n<tr>\n<td>Umfang<\/td>\n<td>Ganzer Datensatz + zugeh\u00f6rige Ressourcen<\/td>\n<td>Ausf\u00fchrungslinie und Abh\u00e4ngigkeiten<\/td>\n<\/tr>\n<tr>\n<td>Format<\/td>\n<td>json-ld<\/td>\n<td>JSON (PROV-Standard)<\/td>\n<\/tr>\n<tr>\n<td>Interoperabilit\u00e4t<\/td>\n<td>Eigenst\u00e4ndiges Paket<\/td>\n<td>Graph-basiert, abfragef\u00e4hig<\/td>\n<\/tr>\n<tr>\n<td>Beziehung<\/td>\n<td>Komplement\u00e4r, nicht konkurrierend<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>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).<\/p>\n<h2>Wann verwenden Sie DVC vs DataLad vs. Prov-kompatible Bibliotheken<\/h2>\n<p>Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken h\u00e4ngt von Ihren Workflow-Mustern ab:<\/p>\n<table>\n<thead>\n<tr>\n<th>Kriterium<\/th>\n<th>DVC<\/th>\n<th>datalad<\/th>\n<th>Prov-Bibliotheken<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Hauptanwendungsfall<\/td>\n<td>Pipeline-orientierte Experimente<\/td>\n<td>Langfristige Datenkuration<\/td>\n<td>Maschinell umsetzbare Provenienz<\/td>\n<\/tr>\n<tr>\n<td>Datengr\u00f6\u00dfe<\/td>\n<td>Gro\u00dfe Dateien (Modelle, Simulationen)<\/td>\n<td>Gro\u00dfe verteilte Datens\u00e4tze<\/td>\n<td>N\/A (metadatenorientiert)<\/td>\n<\/tr>\n<tr>\n<td>Ausf\u00fchrungsmodell<\/td>\n<td>B\u00fchnenbasierte Pipeline (<code>dvc repro<\/code>)<\/td>\n<td>Befehlsbasiert (<code>datalad run<\/code>)<\/td>\n<td>Dekorateur<\/td>\n<\/tr>\n<tr>\n<td>HPC-Integration<\/td>\n<td><code>srun dvc repro<\/code><\/td>\n<td>Native Git-Anhang + SSH<\/td>\n<td>konfigurierbar<\/td>\n<\/tr>\n<tr>\n<td>Provenienzausgabe<\/td>\n<td><code>.dvc<\/code> Dateien + Git-Verlauf<\/td>\n<td>Git-Annex-Symlinks + Git-Log<\/td>\n<td>Prov-JSON-Diagramm<\/td>\n<\/tr>\n<tr>\n<td>am besten f\u00fcr<\/td>\n<td>Material-Science-Pipelines, Parameter-Sweeps<\/td>\n<td>Langfristige Repository-Kuration, Einhaltung der Gebote<\/td>\n<td>Faire Daten, institutionelle Provenienz<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>DVC ist genau das Richtige f\u00fcr Sie, wenn:<\/h3>\n<ul>\n<li>Ihr Workflow hat mehrere abh\u00e4ngige Phasen (Entspannung \u2192 Eigenschaftsberechnung \u2192 Visualisierung)<\/li>\n<li>Sie ben\u00f6tigen Parameter-Sweeps mit automatischer Nachlauf<\/li>\n<li>Sie m\u00f6chten verfolgen, welche Parameterkombination das Ergebnis mit der niedrigsten Energie erzeugt<\/li>\n<\/ul>\n<h3>Datalad ist genau das Richtige f\u00fcr Sie, wenn:<\/h3>\n<ul>\n<li>Sie kuratieren ein langfristiges Dataset-Repository<\/li>\n<li>Sie ben\u00f6tigen Git-Annex-Symlinks f\u00fcr die effiziente Handhabung von Gro\u00dfdateien<\/li>\n<li>Sie arbeiten mit verteilten Datens\u00e4tzen \u00fcber Institutionen hinweg<\/li>\n<li>Sie ben\u00f6tigen die Einhaltung von Geboten (h\u00e4ufig in der Neuroimaging)<\/li>\n<\/ul>\n<h3>Pro-konforme Bibliotheken sind f\u00fcr Sie richtig, wenn:<\/h3>\n<ul>\n<li>Sie ben\u00f6tigen maschinell umsetzbare Provenienz f\u00fcr faire Einhaltung<\/li>\n<li>Sie m\u00f6chten ein abfragef\u00e4higes Provenienzdiagramm f\u00fcr die Datenabstammung<\/li>\n<li>Sie arbeiten in verschiedenen Institutionen mit verschiedenen Provenienzsystemen zusammen<\/li>\n<li>Sie ver\u00f6ffentlichen in einem fairen Daten-Repository<\/li>\n<\/ul>\n<h2>Zusammenstellen \u2013 ein praktischer Workflow<\/h2>\n<p>Hier ist ein praktisches Workflow-Muster, das alle oben genannten Konzepte kombiniert:<\/p>\n<pre><code class=\"language-bash\"># 1. Initialize the repository\ngit init\ndvc init\n\n# 2. Add the data\ndvc add data\/raw_crystal_structure.xyz\n\n# 3. Run the pipeline\ndvc repro\n\n# 4. Check the results\ndvc metrics show results\/energies.txt\n\n# 5. Run experiments with different parameters\ndvc exp run -S sim.tolerance=1e-8 --set-param sim.cutoff_energy=550\n\n# 6. Push data and experiments to remote\ndvc push\ndvc exp push\ngit push origin main\n\n# 7. (Optional) Generate PROV-JSON provenance\npython src\/provenance.py --output provenance.json\n<\/code><\/pre>\n<p>Dieses Muster stellt sicher, dass jedes Simulationsergebnis auf seine genaue Datenversion, das Code-Commit und die Parameterdatei zur\u00fcckgef\u00fchrt werden kann. Die Prov-JSON-Ausgabe (Schritt 7) f\u00fcgt eine maschinenaktionsf\u00e4hige Provenienzschicht auf der DVC-Pipeline hinzu.<\/p>\n<h2>H\u00e4ufige Fehler - was zu vermeiden<\/h2>\n<p><strong>Fehler 1: Alles versionieren<\/strong> \u2013 F\u00fchren Sie nicht <code>dvc add<\/code> 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\u00e4ndig ausgeschlossen werden. \u00dcberaddieren erzeugt Pipeline-L\u00e4rm.<\/p>\n<p><strong>Fehler 2: Hardcoding-Pfade<\/strong>: Verwenden Sie in <code>dvc.yaml<\/code> keine absoluten Pfade. Verwenden Sie relative Pfade, damit die Pipeline auf verschiedenen Computern und Clusterkonfigurationen funktioniert.<\/p>\n<p><strong>Fehler&nbsp;3: Datentypen mischen<\/strong>: Geben Sie keine Simulationsparameter und modellieren Sie Pr\u00fcfpunkte in derselben <code>.dvc<\/code>-Datei. Halten Sie Datentypen getrennt, um Cache-Konflikte zu vermeiden.<\/p>\n<p><strong>Fehler 4: Provenienz ignorieren<\/strong> \u2013 DVC-Dateien allein reichen nicht f\u00fcr eine faire Einhaltung aus. Wenn Ihre Institution Provenienzdiagramme ben\u00f6tigt, koppeln Sie DVC mit Prov-JSON-Ausgabe (Yprov4ML) oder Ro-Crate-Verpackungen.<\/p>\n<p><strong>Fehler 5: Vergessen von <code>params.yaml<\/code><\/strong> \u2014 Wenn Sie in Ihren Skripten Hardcode-Parameter in Ihren Skripten vergeben, anstatt sie in <code>params.yaml<\/code> zu isolieren, wird das Parameter-Tracking von DVC nutzlos. Verwenden Sie f\u00fcr Simulationsparameter immer <code>params.yaml<\/code>.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>DVC wandelt wissenschaftliche Workflows aus fragilen, speicherabh\u00e4ngigen Prozessen in deterministische, abh\u00e4ngigkeitsbewusste Pipelines um. Die wichtigste Erkenntnis ist, dass <code>dvc.yaml<\/code> Pipeline-Dateien und die Parameterisolation <code>params.yaml<\/code> \"versionierte Reproduzierbarkeit\" erstellen - die F\u00e4higkeit, nicht nur ein Ergebnis zu rekonstruieren, sondern auch den exakten experimentellen Status (Datenversion + Code-Commit + Parameterdatei), der es erzeugt hat. Dies geht \u00fcber Container hinaus (die Code-Umgebungen einfrieren) und \u00fcber Git hinaus (die keine gro\u00dfen Datens\u00e4tze verarbeiten k\u00f6nnen).<\/p>\n<p>F\u00fcr die HPC-Integration erm\u00f6glicht der <code>srun<\/code>-Wrapper von Slurm die Ausf\u00fchrung einer Cluster-nativen Pipeline ohne manuellen Eingriff. F\u00fcr die Provenienz bildet sich W3C Prov-JSON (Yprov4ML) als interoperables Format, das zu Ro-Crate-Verpackungen komplementiert wird und die maschinenschaltbare Datenlinie erm\u00f6glicht, die den Anforderungen der fairen Einhaltung gen\u00fcgt.<\/p>\n<p>Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken h\u00e4ngt von Ihren Workflow-Mustern ab: DVC f\u00fcr pipeline-orientierte Experimente, DataLad f\u00fcr die Langzeit-Datenkuration und Prov-Bibliotheken f\u00fcr maschinell umsetzbare Provenienzdiagramme. Die meisten Simulationsteams profitieren von der Verwendung von DVC f\u00fcr die Pipeline-Ausf\u00fchrung und Prov-JSON f\u00fcr die Provenienzverfolgung \u2013 die beiden Tools sind komplement\u00e4r und konkurrieren nicht.<\/p>\n<hr>\n<h2>Verwandte Anleitungen<\/h2>\n<ul>\n<li><a href=\"\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/\">Reproduzierbarkeit jenseits von Containern<\/a> \u2014 Deckt DVC-Grundlagen, Ro-Crate-Provenienzverpackungen und containerbasierte Reproduzierbarkeitsmuster ab<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Verwalten von PDE-Problemen im gro\u00dfen Ma\u00dfstab<\/a> \u2014 Er\u00f6rtert das Management von Clusterressourcen und HPC Workflows<\/li>\n<li><a href=\"https:\/\/matforge.org\/verification-vs-validation-in-scientific-simulations-a-practical-guide\/\">Verifikation vs. Validierung in wissenschaftlichen Simulationen<\/a> \u2014 Erkl\u00e4rt den breiteren Kontext der Reproduzierbarkeit f\u00fcr Simulationsergebnisse&lt;\/fs_write_file&gt;<br>&lt;\/tool_call&gt;<\/li>\n<\/ul>\n<p>&lt;tool_call&gt;<br>&lt;function=fs_write_file&gt;<br>&lt; Parameter=Content&gt;<\/p>\n<h1>Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows<\/h1>\n<p>Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-\u00c4nderungen zu verfolgen - Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche <strong>Spezifische Kombination<\/strong> von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis gef\u00fchrt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von einer reproduzierbaren Simulationspipeline.<\/p>\n<p>Das am weitesten verbreitete Tool daf\u00fcr ist DVC (Data Version Control), das das Versionsmodell von Git erweitert, um gro\u00dfe Datens\u00e4tze und Pipeline-Stufen zu verarbeiten. Dieser Artikel behandelt die praktische DVC-Implementierung f\u00fcr wissenschaftliche Workflows \u2013 Pipeline-Konstruktion mit <code>dvc.yaml<\/code>, Parameterisolierung mit <code>params.yaml<\/code>, HPC\/Slurm-Integration und aufkommende Provenienz-Tracking von W3C Prov-JSON \u2013 so k\u00f6nnen Sie deterministische Simulationskampagnen erstellen, die das Team \u00fcberleben Umsatz, Hardware-Migration und jahrelange Projektlebenszyklen.<\/p>\n<h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li><strong>Der Kernwert von DVC<\/strong>: Pipeline-Dateien (<code>dvc.yaml<\/code>) machen Simulationen abh\u00e4ngigkeitsbewusst, sodass <code>dvc repro<\/code> nur die \u00c4nderungen erneut ausf\u00fchrt.<\/li>\n<li><strong>Versionsreproduzierbarkeit<\/strong>: DVC verkn\u00fcpft Daten-Snapshots (<code>.dvc<\/code> Dateien), Code-Commits (Git) und Parameterdateien (<code>params.yaml<\/code>) zu reproduzierbaren Experimentiereinheiten<\/li>\n<li><strong>HPC-Integration<\/strong>: Slurm-Batchplanung umschlie\u00dft DVC f\u00fcr die Ausf\u00fchrung von Cluster-Native Pipeline ohne manuellen Eingriff<\/li>\n<li><strong>Provenance Standards<\/strong>: W3C Prov-JSON (YProv4ML) tritt als interoperables Format auf, das zu Ro-Crate-Verpackungen erg\u00e4nzt<\/li>\n<li><strong>DVC vs Datalad<\/strong>: W\u00e4hlen Sie DVC f\u00fcr Pipeline-orientierte Experimente; W\u00e4hlen Sie DataLad f\u00fcr langfristige Datenkuration und verteilte Datens\u00e4tze<\/li>\n<\/ul>\n<h2>Warum die Standardversionierung f\u00fcr Simulationsworkflows fehlschl\u00e4gt<\/h2>\n<p>Git eignet sich hervorragend zum Tracking von Code-\u00c4nderungen. Es ist schrecklich, Daten\u00e4nderungen zu verfolgen.<\/p>\n<p>Wenn Sie eine DFT-Relaxationsberechnung ausf\u00fchren, kann Git die resultierende <code>.xyz<\/code>-Kristallstrukturdatei (oft zehn MB) nicht speichern. Sie k\u00f6nnen es auf ein freigegebenes Laufwerk kopieren oder seinen SHA-256-Hash an eine Textdatei anh\u00e4ngen oder sich auf den Speicher verlassen. Alle drei Ans\u00e4tze werden unterbrochen, wenn sich die Datenquelle \u00e4ndert, wenn Sie sie mit Mitarbeitern teilen m\u00fcssen, die keinen Zugriff auf das freigegebene Laufwerk haben, oder wenn Sie sechs Monate sp\u00e4ter wiederkommen und vergessen, welcher Parametersatz die Struktur mit der niedrigsten Energie erzeugt hat.<\/p>\n<p>Datenversionstools l\u00f6sen dies durch die Entkopplung von <strong>Datenverfolgung<\/strong> von <strong>Code-Tracking<\/strong>. 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 <code>.dvc<\/code>-Dateien oder Git-Annex-Symlink-Referenzen \u2013 enthalten Metadaten (Checksum, Remote-Standort, Versions-Tag), ohne die tats\u00e4chlichen Daten zu duplizieren.<\/p>\n<p>Diese Trennung ist f\u00fcr Simulations-Workflows wichtig, da das Datenvolumen unabh\u00e4ngig vom Codevolumen skaliert wird. Eine einzelne Simulationskampagne kann Tausende von Trajektoriendateien erzeugen, w\u00e4hrend die Python-Skripte, die sie erzeugen, in einigen hundert Zeilen bleiben.<\/p>\n<h3>Die Pipeline-L\u00fccke<\/h3>\n<p>Die meisten Forscher beginnen mit der Ad-hoc-Datenverfolgung: Ein Bash-Skript, das Berechnungen in der Reihenfolge ausf\u00fchrt, die Ergebnisse in ein Verzeichnis <code>results\/<\/code> kopiert und die endg\u00fcltigen Zahlen in ein Google Sheet eingef\u00fcgt werden. Das funktioniert f\u00fcr kleine Projekte. Es bricht zusammen, wenn:<\/p>\n<ol>\n<li><strong>Neulauf mit unterschiedlichen Parametern<\/strong> \u2013 Sie m\u00fcssen sich merken, welche <code>params.yaml<\/code>-Datei verwendet wurde, und nur die ge\u00e4nderten Phasen erneut ausf\u00fchren<\/li>\n<li><strong>Debugging-Fehler<\/strong> \u2013 Sie m\u00fcssen wissen, ob der Fehler auf Datenbesch\u00e4digung, Code-\u00c4nderungen oder Parameterfehlanpassungen zur\u00fcckzuf\u00fchren ist<\/li>\n<li><strong>Team Handoff<\/strong> \u2013 Ein neuer Sch\u00fcler kann die Pipeline nicht aus einem <code>bash<\/code>-Skript und einem Ordner mit verwaisten Dateien rekonstruieren<\/li>\n<\/ol>\n<p>Die DVC-Pipeline-Definitionsdatei (<code>dvc.yaml<\/code>) schlie\u00dft diese L\u00fccke, indem sie Phasen mit expliziten Abh\u00e4ngigkeiten und Ausgaben deklariert. Jede Phase wird nur dann erneut ausgef\u00fchrt, wenn sich die Abh\u00e4ngigkeiten \u00e4ndern (<code>dvc repro &lt;stage&gt;<\/code>), wodurch Simulationskampagnen beim erneuten Ausf\u00fchren von Berechnungen mit unterschiedlichen Parametern dramatisch effizienter werden.<\/p>\n<h2>DVC-Pipeline-Konstruktion f\u00fcr wissenschaftliche Workflows<\/h2>\n<p>Eine DVC-Pipeline-Datei ist ein deklaratives YAML-Dokument, das die Abh\u00e4ngigkeit Ihrer Simulationsschritte voneinander abbildet. Hier ist ein konkretes Beispiel f\u00fcr einen Workflow f\u00fcr Computational Materials Science:<\/p>\n<pre><code class=\"language-yaml\"># dvc.yaml \u2014 DFT relaxation and energy calculation pipeline\n\nstages:\n  relax:\n    cmd: python src\/relax.py\n    deps:\n    - data\/raw_crystal_structure.xyz\n    - src\/relax.py\n    params:\n    - params.yaml\n    outs:\n    - results\/relaxed_structure.xyz\n\n  energy:\n    cmd: python src\/energy.py\n    deps:\n    - results\/relaxed_structure.xyz\n    - src\/energy.py\n    params:\n    - params.yaml\n    outs:\n    - results\/energies.txt\n    metrics:\n    - results\/energies.txt\n\n  visualize:\n    cmd: python src\/plot.py\n    deps:\n    - results\/energies.txt\n    - src\/plot.py\n    outs:\n    - figures\/energy_plot.png\n<\/code><\/pre>\n<p>Jede Etappe erkl\u00e4rt:<\/p>\n<ul>\n<li><strong><code>cmd<\/code><\/strong>: Der Befehl, der die Ausgaben dieser Stufe generiert<\/li>\n<li><strong><code>deps<\/code><\/strong>: Dateien, die diese Phase, wenn sie ge\u00e4ndert werden, ausl\u00f6sen<\/li>\n<li><strong><code>params<\/code><\/strong>: Parameterdateien, die bei einer erneuten Ausf\u00fchrung dieser Phase ausl\u00f6sen<\/li>\n<li><strong><code>outs<\/code><\/strong>: Dateien, die in dieser Phase erstellt wurden (verfolgen als Datenversionen)<\/li>\n<li><strong><code>metrics<\/code><\/strong>: Dateien, die DVC zum Experimentieren numerisch verfolgt<\/li>\n<\/ul>\n<h3>Warum <code>params.yaml<\/code> wichtig ist<\/h3>\n<p>Die Datei <code>params.yaml<\/code> isoliert Simulationsparameter aus Ausf\u00fchrungsskripten. Dies ist entscheidend f\u00fcr materialwissenschaftliche Workflows, bei denen derselbe Simulationscode hunderte Male mit unterschiedlichen Parametern ausgef\u00fchrt wird:<\/p>\n<pre><code class=\"language-yaml\"># params.yaml\nsimulator:\n  cutoff_energy: 500  # eV\n  kpoints: [8, 8, 8]\n  tolerance: 1e-6\n  \noptimization:\n  max_steps: 200\n  algorithm: ionic\n<\/code><\/pre>\n<p>Wenn Sie <code>tolerance<\/code> von <code>1e-6<\/code> in <code>1e-8<\/code> \u00e4ndern und <code>dvc repro<\/code> ausf\u00fchren, erkennt DVC die \u00c4nderung von <code>params.yaml<\/code> und f\u00fchrt jede davon abh\u00e4ngige Phase erneut aus. Die resultierende Datei <code>relaxed_structure.xyz<\/code> erh\u00e4lt ein neues Versions-Tag. Die alte Version bleibt im Cache verf\u00fcgbar - Sie verlieren keine historischen L\u00e4ufe.<\/p>\n<p>F\u00fcr Parameter-Sweeps k\u00f6nnen Sie <code>--set-param<\/code> verwenden, um Werte zu \u00fcberschreiben, ohne die Datei zu \u00e4ndern:<\/p>\n<pre><code class=\"language-bash\">dvc exp run --set-param sim.tolerance=1e-8 --set-param sim.cutoff_energy=450\n<\/code><\/pre>\n<p>Dadurch wird ein neuer Experimentzweig erstellt, der sowohl die urspr\u00fcnglichen als auch die ge\u00e4nderten L\u00e4ufe in Ihrem Pipeline-Verlauf beibeh\u00e4lt.<\/p>\n<h2>Versionierte Reproduzierbarkeit \u2013 der konzeptionelle Beitrag von DVC<\/h2>\n<p>Der Blog von DVC (Dezember 2021) f\u00fchrte die \"versionierte Reproduzierbarkeit\" als die F\u00e4higkeit ein, nicht nur ein Ergebnis, sondern auch den <strong>Exact experimental state<\/strong> nachzubilden, der es erzeugt hat. Dies unterscheidet DVC von der generischen Versionierung:<\/p>\n<ul>\n<li><strong>Standardversionierung<\/strong> Verfolgen Sie \u00c4nderungen an Dateien im Laufe der Zeit (Git-Zweck)<\/li>\n<li><strong>Versionsreproduzierbarkeit<\/strong> Verfolgen Sie, welche bestimmte Datenversion, Code-Commit und Parameterdateikombination ein bestimmtes Ergebnis erzeugt hat (DVC-Zweck)<\/li>\n<\/ul>\n<p>DVC erreicht dies durch die Verkn\u00fcpfung von drei unabh\u00e4ngig versionierten Artefakten:<\/p>\n<table>\n<thead>\n<tr>\n<th>Artefakt<\/th>\n<th>Versionierungssystem<\/th>\n<th>Was es verfolgt<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>.dvc<\/code>&nbsp;Zeigerdateien<\/td>\n<td>DVC<\/td>\n<td>Datendateiversion + Remote-Standort + Pr\u00fcfsumme<\/td>\n<\/tr>\n<tr>\n<td>Git verpflichtet<\/td>\n<td>Git<\/td>\n<td>Codeversion + Commit-Nachricht + Diff<\/td>\n<\/tr>\n<tr>\n<td><code>params.yaml<\/code><\/td>\n<td>Git<\/td>\n<td>Parameterdateiversion + \u00c4nderungen auf Feldebene<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Die Kombination dieser drei schafft eine reproduzierbare Einheit - ein \"versioniertes Experiment\", das isoliert rekonstruiert werden kann. Dies ist f\u00fcr die Simulation von Bedeutung, da Experimente iterativ verfeinert werden. Die Forscher m\u00fcssen wissen, was funktioniert hat, und es reproduzieren k\u00f6nnen, ohne jeden Zwischenschritt erneut ausf\u00fchren zu k\u00f6nnen.<\/p>\n<h3>Praktische Implikationen<\/h3>\n<p>Wenn ein Pr\u00fcfer nach den Daten hinter einer ver\u00f6ffentlichten Figur fragt, k\u00f6nnen Sie Folgendes angeben:<\/p>\n<ol>\n<li>Der Git-Commit-Hash (Code-Version)<\/li>\n<li>Die Referenzdatei-Referenz <code>.dvc<\/code> (Datenversion)<\/li>\n<li>Die Datei <code>params.yaml<\/code> bei diesem Commit (Parameterversion)<\/li>\n<\/ol>\n<p>Zusammen reichen diese drei Artefakte aus, um das Ergebnis auf jeder Maschine zu reproduzieren. Dies ist der Goldstandard f\u00fcr die Reproduzierbarkeit der Simulation - weit \u00fcber Container (die Codeumgebungen einfrieren) oder nackte Git-Repositories (die keine gro\u00dfen Daten verarbeiten k\u00f6nnen).<\/p>\n<h2>Versuchswarteschlange und Management<\/h2>\n<p>Das Experiment-Management (<code>dvc exp<\/code>) von DVC erweitert das Pipeline-Modell, um gleichzeitige und in der Warteschlange gestellte Experimente zu unterst\u00fctzen:<\/p>\n<pre><code class=\"language-bash\"># Run a single experiment with custom parameters\ndvc exp run -S sim.tolerance=1e-8\n\n# Queue multiple experiments\ndvc exp run --queue -S sim.tolerance=1e-8\ndvc exp run --queue -S sim.tolerance=1e-6\ndvc exp run --queue -S sim.tolerance=1e-5\n\n# Execute queued experiments\ndvc exp run\n<\/code><\/pre>\n<p>Das Flag <code>--queue<\/code> verz\u00f6gert die Ausf\u00fchrung, sodass Sie mehrere Experimente vorbereiten und diese nacheinander ausf\u00fchren k\u00f6nnen. Dies ist wertvoll f\u00fcr Computerexperimente, die stundenlang oder tagelang ausgef\u00fchrt werden. Sie k\u00f6nnen einen Parameter-Sweep \u00fcber Nacht in die Warteschlange stellen, ohne jeden Lauf manuell zu starten.<\/p>\n<p>F\u00fcr den Experimentvergleich bietet DVClive Echtzeit-Metrik-Tracking:<\/p>\n<pre><code class=\"language-python\"># src\/metrics.py \u2014 DVCLive integration\nfrom dvclive import Live\n\nwith Live() as live:\n    for step in range(n_iterations):\n        result = run_step(step)\n        live.step = step\n        live.log(\"energy\", result[\"total_energy\"])\n        live.log(\"forces\", result[\"max_force\"])\n<\/code><\/pre>\n<p>Dies erzeugt ein interaktives Vergleichs-Dashboard, in dem Sie sehen k\u00f6nnen, wie sich Energie und Kr\u00e4fte bei Parameter-Sweeps entwickeln.<\/p>\n<h2>Ausf\u00fchren von DVC-Pipelines auf HPC-Clustern<\/h2>\n<p>Die meisten Computerwissenschaftler betreiben keine Pipelines auf Laptops. Sie f\u00fchren sie auf Clustern mit Slurm-, PBS- oder LSF-Schedulern aus. DVC l\u00e4sst sich \u00fcber den <code>srun<\/code>-Wrapper in Slurm integrieren und erm\u00f6glicht die Ausf\u00fchrung von generativen Pipeline-Ausf\u00fchrungen:<\/p>\n<pre><code class=\"language-bash\"># Run a single pipeline stage with SLURM resource allocation\nsrun dvc repro -n relax --job slurm-job.sh\n\n# Run all pipeline stages on the cluster\nsrun dvc repro\n<\/code><\/pre>\n<p>Das Flag <code>--job<\/code> weist DVC an, jede Phase \u00fcber den Job-Scheduler von Slurm auszuf\u00fchren und automatisch zu bearbeiten:<\/p>\n<ul>\n<li>Clusterspezifische Ressourcenzuordnung (Speicher, CPU, GPU-Knoten)<\/li>\n<li>Batch-Modus-Ausf\u00fchrung ohne manuellen Eingriff<\/li>\n<li>Automatische Jobwarteschlange f\u00fcr Pipeline-Stufen<\/li>\n<li>Integration mit clusterspezifischen Dateisystemen und Speicher (LUSTRE, GPFS, BEEGFS)<\/li>\n<\/ul>\n<p>ARXIV 2505.06558v2 (September 2025) zeigt diese Integration f\u00fcr materialwissenschaftliche Workflows mit DFT-Berechnungen auf HPC-Clustern. Der entscheidende Vorteil ist, dass <code>dvc repro<\/code> Cluster-f\u00e4hig wird. Wenn eine Phase fehlschl\u00e4gt oder sich ihre Abh\u00e4ngigkeiten \u00e4ndern, \u00fcbernimmt Slurm die Ressourcenzuweisung, um nur die erforderlichen Phasen erneut auszuf\u00fchren.<\/p>\n<h3>\u00dcberlegungen zum Clusterspeicher<\/h3>\n<p>Der Remote-Speicher von DVC funktioniert gut mit Cluster-Dateisystemen. Sie k\u00f6nnen DVC so konfigurieren, dass das L\u00fcster- oder GPFS-Dateisystem des Clusters als DVC-Remote verwendet wird:<\/p>\n<pre><code class=\"language-bash\"># Configure a cluster storage remote\ndvc remote modify cluster_storage token_url \"https:\/\/cluster-storage.example.com\"\n<\/code><\/pre>\n<p>Dies vermeidet den Aufwand beim Kopieren von Daten in den externen Cloud-Speicher und h\u00e4lt die Pipeline innerhalb der Speicherhierarchie des Clusters eigen.<\/p>\n<h2>W3C Prov-JSON Provenienz-Tracking<\/h2>\n<p>W\u00e4hrend DVC Pipeline-Stufen und Datenversionen verfolgt, erzeugt es nativ kein maschinell umsetzbares Provenienzdiagramm. Daf\u00fcr ben\u00f6tigen Sie einen Provenienzstandard - und das aufkommende Format ist W3C Prov-JSON.<\/p>\n<p>Yprov4ML (ArXiv Juli 2025) implementiert die W3C Proven-JSON-Provenienz mit minimalen Code-Modifikationen. Es erfasst:<\/p>\n<ul>\n<li><strong>Wer<\/strong> hat das Experiment ausgef\u00fchrt (Benutzeridentit\u00e4t)<\/li>\n<li><strong>Was<\/strong> Daten und Code wurden verwendet (Quelle Provenienz)<\/li>\n<li><strong>Wie<\/strong> Das Experiment lief (Execution Provenienz)<\/li>\n<li><strong>Warum<\/strong> (optionale Motivation, gebunden an Forschungsziele)<\/li>\n<\/ul>\n<p>Die Ausgabe ist ein Prov-JSON-Diagramm - ein gerichteter Graph, in dem Knoten Entit\u00e4ten (Dateien, Parameter, Code-Commits) und Kanten darstellen (abgeleitet von, erzeugt von, erstellt, verwendet von By). Dieses Format erm\u00f6glicht:<\/p>\n<ul>\n<li><strong>Interoperabilit\u00e4t \u00fcber Provenienzsysteme<\/strong>: Prov-JSON ist maschinenlesbar und kann mit SPARQL- oder Graph-Datenbanken abgefragt werden<\/li>\n<li><strong>Faire Daten-Konformit\u00e4t<\/strong>: Prov-JSON-Diagramme erf\u00fcllen faire Prinzipien, indem sie die Datenlinien und die Wiederverwendungsbedingungen dokumentieren<\/li>\n<li><strong>Institutionelle Zusammenarbeit<\/strong>: Prov-JSON ist ein W3C-Standard, daher sind Provenienz-Diagramme verschiedener Institutionen kompatibel<\/li>\n<\/ul>\n<h3>Prov-JSON gegen Ro-Crate<\/h3>\n<p>Es ist n\u00fctzlich, Prov-JSON von Ro-Crate zu unterscheiden, da beide in Reproduzierbarkeitsdiskussionen erscheinen:<\/p>\n<table>\n<thead>\n<tr>\n<th>Aspekt<\/th>\n<th>Ro-Crate<\/th>\n<th>prov-json<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Zweck<\/td>\n<td>Paketformat f\u00fcr Rich-Metadaten<\/td>\n<td>Datenformat f\u00fcr Provenienzdiagramme<\/td>\n<\/tr>\n<tr>\n<td>Umfang<\/td>\n<td>Ganzer Datensatz + zugeh\u00f6rige Ressourcen<\/td>\n<td>Ausf\u00fchrungslinie und Abh\u00e4ngigkeiten<\/td>\n<\/tr>\n<tr>\n<td>Format<\/td>\n<td>json-ld<\/td>\n<td>JSON (PROV-Standard)<\/td>\n<\/tr>\n<tr>\n<td>Interoperabilit\u00e4t<\/td>\n<td>Eigenst\u00e4ndiges Paket<\/td>\n<td>Graph-basiert, abfragef\u00e4hig<\/td>\n<\/tr>\n<tr>\n<td>Beziehung<\/td>\n<td>Komplement\u00e4r, nicht konkurrierend<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>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).<\/p>\n<h2>Wann verwenden Sie DVC vs DataLad vs. Prov-kompatible Bibliotheken<\/h2>\n<p>Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken h\u00e4ngt von Ihren Workflow-Mustern ab:<\/p>\n<table>\n<thead>\n<tr>\n<th>Kriterium<\/th>\n<th>DVC<\/th>\n<th>datalad<\/th>\n<th>Prov-Bibliotheken<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Hauptanwendungsfall<\/td>\n<td>Pipeline-orientierte Experimente<\/td>\n<td>Langfristige Datenkuration<\/td>\n<td>Maschinell umsetzbare Provenienz<\/td>\n<\/tr>\n<tr>\n<td>Datengr\u00f6\u00dfe<\/td>\n<td>Gro\u00dfe Dateien (Modelle, Simulationen)<\/td>\n<td>Gro\u00dfe verteilte Datens\u00e4tze<\/td>\n<td>N\/A (metadatenorientiert)<\/td>\n<\/tr>\n<tr>\n<td>Ausf\u00fchrungsmodell<\/td>\n<td>B\u00fchnenbasierte Pipeline (<code>dvc repro<\/code>)<\/td>\n<td>Befehlsbasiert (<code>datalad run<\/code>)<\/td>\n<td>Dekorateur<\/td>\n<\/tr>\n<tr>\n<td>HPC-Integration<\/td>\n<td><code>srun dvc repro<\/code><\/td>\n<td>Native Git-Anhang + SSH<\/td>\n<td>konfigurierbar<\/td>\n<\/tr>\n<tr>\n<td>Provenienzausgabe<\/td>\n<td><code>.dvc<\/code> Dateien + Git-Verlauf<\/td>\n<td>Git-Annex-Symlinks + Git-Log<\/td>\n<td>Prov-JSON-Diagramm<\/td>\n<\/tr>\n<tr>\n<td>am besten f\u00fcr<\/td>\n<td>Material-Science-Pipelines, Parameter-Sweeps<\/td>\n<td>Langfristige Repository-Kuration, Einhaltung der Gebote<\/td>\n<td>Faire Daten, institutionelle Provenienz<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>DVC ist genau das Richtige f\u00fcr Sie, wenn:<\/h3>\n<ul>\n<li>Ihr Workflow hat mehrere abh\u00e4ngige Phasen (Entspannung \u2192 Eigenschaftsberechnung \u2192 Visualisierung)<\/li>\n<li>Sie ben\u00f6tigen Parameter-Sweeps mit automatischer Nachlauf<\/li>\n<li>Sie m\u00f6chten verfolgen, welche Parameterkombination das Ergebnis mit der niedrigsten Energie erzeugt<\/li>\n<\/ul>\n<h3>Datalad ist genau das Richtige f\u00fcr Sie, wenn:<\/h3>\n<ul>\n<li>Sie kuratieren ein langfristiges Dataset-Repository<\/li>\n<li>Sie ben\u00f6tigen Git-Annex-Symlinks f\u00fcr die effiziente Handhabung von Gro\u00dfdateien<\/li>\n<li>Sie arbeiten mit verteilten Datens\u00e4tzen \u00fcber Institutionen hinweg<\/li>\n<li>Sie ben\u00f6tigen die Einhaltung von Geboten (h\u00e4ufig in der Neuroimaging)<\/li>\n<\/ul>\n<h3>Pro-konforme Bibliotheken sind f\u00fcr Sie richtig, wenn:<\/h3>\n<ul>\n<li>Sie ben\u00f6tigen maschinell umsetzbare Provenienz f\u00fcr faire Einhaltung<\/li>\n<li>Sie m\u00f6chten ein abfragef\u00e4higes Provenienzdiagramm f\u00fcr die Datenabstammung<\/li>\n<li>Sie arbeiten in verschiedenen Institutionen mit verschiedenen Provenienzsystemen zusammen<\/li>\n<li>Sie ver\u00f6ffentlichen in einem fairen Daten-Repository<\/li>\n<\/ul>\n<h2>Zusammenstellen \u2013 ein praktischer Workflow<\/h2>\n<p>Hier ist ein praktisches Workflow-Muster, das alle oben genannten Konzepte kombiniert:<\/p>\n<pre><code class=\"language-bash\"># 1. Initialize the repository\ngit init\ndvc init\n\n# 2. Add the data\ndvc add data\/raw_crystal_structure.xyz\n\n# 3. Run the pipeline\ndvc repro\n\n# 4. Check the results\ndvc metrics show results\/energies.txt\n\n# 5. Run experiments with different parameters\ndvc exp run -S sim.tolerance=1e-8 --set-param sim.cutoff_energy=550\n\n# 6. Push data and experiments to remote\ndvc push\ndvc exp push\ngit push origin main\n\n# 7. (Optional) Generate PROV-JSON provenance\npython src\/provenance.py --output provenance.json\n<\/code><\/pre>\n<p>Dieses Muster stellt sicher, dass jedes Simulationsergebnis auf seine genaue Datenversion, das Code-Commit und die Parameterdatei zur\u00fcckgef\u00fchrt werden kann. Die Prov-JSON-Ausgabe (Schritt 7) f\u00fcgt eine maschinenaktionsf\u00e4hige Provenienzschicht auf der DVC-Pipeline hinzu.<\/p>\n<h2>H\u00e4ufige Fehler - was zu vermeiden<\/h2>\n<p><strong>Fehler 1: Alles versionieren<\/strong> \u2013 F\u00fchren Sie nicht <code>dvc add<\/code> 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\u00e4ndig ausgeschlossen werden. \u00dcberaddieren erzeugt Pipeline-L\u00e4rm.<\/p>\n<p><strong>Fehler 2: Hardcoding-Pfade<\/strong>: Verwenden Sie in <code>dvc.yaml<\/code> keine absoluten Pfade. Verwenden Sie relative Pfade, damit die Pipeline auf verschiedenen Computern und Clusterkonfigurationen funktioniert.<\/p>\n<p><strong>Fehler&nbsp;3: Datentypen mischen<\/strong>: Geben Sie keine Simulationsparameter und modellieren Sie Pr\u00fcfpunkte in derselben <code>.dvc<\/code>-Datei. Halten Sie Datentypen getrennt, um Cache-Konflikte zu vermeiden.<\/p>\n<p><strong>Fehler 4: Provenienz ignorieren<\/strong> \u2013 DVC-Dateien allein reichen nicht f\u00fcr eine faire Einhaltung aus. Wenn Ihre Institution Provenienzdiagramme ben\u00f6tigt, koppeln Sie DVC mit Prov-JSON-Ausgabe (Yprov4ML) oder Ro-Crate-Verpackungen.<\/p>\n<p><strong>Fehler 5: Vergessen von <code>params.yaml<\/code><\/strong> \u2014 Wenn Sie in Ihren Skripten Hardcode-Parameter in Ihren Skripten vergeben, anstatt sie in <code>params.yaml<\/code> zu isolieren, wird das Parameter-Tracking von DVC nutzlos. Verwenden Sie f\u00fcr Simulationsparameter immer <code>params.yaml<\/code>.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>DVC wandelt wissenschaftliche Workflows aus fragilen, speicherabh\u00e4ngigen Prozessen in deterministische, abh\u00e4ngigkeitsbewusste Pipelines um. Die wichtigste Erkenntnis ist, dass <code>dvc.yaml<\/code> Pipeline-Dateien und die Parameterisolation <code>params.yaml<\/code> \"versionierte Reproduzierbarkeit\" erstellen - die F\u00e4higkeit, nicht nur ein Ergebnis zu rekonstruieren, sondern auch den exakten experimentellen Status (Datenversion + Code-Commit + Parameterdatei), der es erzeugt hat. Dies geht \u00fcber Container hinaus (die Code-Umgebungen einfrieren) und \u00fcber Git hinaus (die keine gro\u00dfen Datens\u00e4tze verarbeiten k\u00f6nnen).<\/p>\n<p>F\u00fcr die HPC-Integration erm\u00f6glicht der <code>srun<\/code>-Wrapper von Slurm die Ausf\u00fchrung einer Cluster-nativen Pipeline ohne manuellen Eingriff. F\u00fcr die Provenienz bildet sich W3C Prov-JSON (Yprov4ML) als interoperables Format, das zu Ro-Crate-Verpackungen komplementiert wird und die maschinenschaltbare Datenlinie erm\u00f6glicht, die den Anforderungen der fairen Einhaltung gen\u00fcgt.<\/p>\n<p>Die Wahl zwischen DVC-, DataLad- und Prov-kompatiblen Bibliotheken h\u00e4ngt von Ihren Workflow-Mustern ab: DVC f\u00fcr pipeline-orientierte Experimente, DataLad f\u00fcr die Langzeit-Datenkuration und Prov-Bibliotheken f\u00fcr maschinell umsetzbare Provenienzdiagramme. Die meisten Simulationsteams profitieren von der Verwendung von DVC f\u00fcr die Pipeline-Ausf\u00fchrung und Prov-JSON f\u00fcr die Provenienzverfolgung \u2013 die beiden Tools sind komplement\u00e4r und konkurrieren nicht.<\/p>\n<hr>\n<h2>Verwandte Anleitungen<\/h2>\n<ul>\n<li><a href=\"\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/\">Reproduzierbarkeit jenseits von Containern<\/a> \u2014 Deckt DVC-Grundlagen, Ro-Crate-Provenienzverpackungen und containerbasierte Reproduzierbarkeitsmuster ab<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Verwalten von PDE-Problemen im gro\u00dfen Ma\u00dfstab<\/a> \u2014 Er\u00f6rtert das Management von Clusterressourcen und HPC Workflows<\/li>\n<li><a href=\"https:\/\/matforge.org\/verification-vs-validation-in-scientific-simulations-a-practical-guide\/\">Verifikation vs. Validierung in wissenschaftlichen Simulationen<\/a> \u2014 Erkl\u00e4rt den breiteren Kontext der Reproduzierbarkeit f\u00fcr Simulationsergebnisse<\/li>\n<\/ul>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 16<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-\u00c4nderungen zu verfolgen &#8211; Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche Spezifische Kombination von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis gef\u00fchrt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von [&hellip;]<\/p>\n","protected":false,"raw":""},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"de_DE","_original_post":"https:\/\/matforge.org\/?p=1058","iawp_total_views":1,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1116","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","de-DE"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows - matforge.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  16 minutesPython-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-\u00c4nderungen zu verfolgen &#8211; Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche Spezifische Kombination von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis gef\u00fchrt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-19T09:48:33+00:00\" \/>\n<meta name=\"author\" content=\"steven\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"steven\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"26\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/\"},\"author\":{\"name\":\"steven\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"headline\":\"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows\",\"datePublished\":\"2026-08-19T09:48:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/\"},\"wordCount\":4389,\"commentCount\":0,\"articleSection\":[\"Simulation & amp; Modellierungsprojekte\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/\",\"name\":\"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-19T09:48:33+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\",\"name\":\"steven\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"caption\":\"steven\"},\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/steven\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows - matforge.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/","og_locale":"de_DE","og_type":"article","og_title":"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows - matforge.org","og_description":"Reading Time:  16 minutesPython-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows Bei der Datenversionierung in der wissenschaftlichen Simulation geht es nicht darum, Code-\u00c4nderungen zu verfolgen &#8211; Git verarbeitet das bereits perfekt. Es geht darum, zu verfolgen, welche Spezifische Kombination von Datendateien, Code-Commits und Parameterdateien zu einem bestimmten Ergebnis gef\u00fchrt hat. Diese Unterscheidung unterscheidet einen fragilen experimentellen Arbeitsablauf von [&hellip;]","og_url":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/","og_site_name":"matforge.org","article_published_time":"2026-08-19T09:48:33+00:00","author":"steven","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"steven","Gesch\u00e4tzte Lesezeit":"26\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/"},"author":{"name":"steven","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"headline":"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows","datePublished":"2026-08-19T09:48:33+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/"},"wordCount":4389,"commentCount":0,"articleSection":["Simulation & amp; Modellierungsprojekte"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/","url":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/","name":"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-19T09:48:33+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"breadcrumb":{"@id":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/de\/python-data-versioning-and-provenance-dvc-dvc-and-scientific-workflows\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/de\/"},{"@type":"ListItem","position":2,"name":"Python-Datenversionierung und Provenienz: DVC, DVC und wissenschaftliche Workflows"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03","name":"steven","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","caption":"steven"},"url":"https:\/\/matforge.org\/author\/steven\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1116"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1116\/revisions"}],"predecessor-version":[{"id":1141,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1116\/revisions\/1141"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}