{"id":855,"date":"2026-07-30T12:22:24","date_gmt":"2026-07-30T12:22:24","guid":{"rendered":"https:\/\/matforge.org\/?p=855","raw":"https:\/\/matforge.org\/?p=855"},"modified":"2026-07-30T12:22:24","modified_gmt":"2026-07-30T12:22:24","slug":"reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking","status":"publish","type":"post","link":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/","title":{"rendered":"Reproduzierbarkeit Workflows \u00fcber Container hinaus: Datenversionierung und Provenienzverfolgung","raw":"Reproduzierbarkeit Workflows \u00fcber Container hinaus: Datenversionierung und Provenienzverfolgung"},"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\"> 7<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li>Container l\u00f6sen ein Problem. Sie frieren die Softwareumgebung ein, verfolgen jedoch nicht, was sich in Ihren Daten ge\u00e4ndert hat oder wie sich Ihre Analyse entwickelt hat.<\/li>\n<li>Datenversionierung f\u00fcgt eine fehlende Ebene hinzu. Tools wie DVC und DataLad bringen die Versionskontrolle im Git-Stil in Datasets und erleichtern die Wiedergabe von Ergebnissen mit exakten Eingaben, Parameterdateien und ausgew\u00e4hlten Ausgaben.<\/li>\n<li>Provenienz ist der Audit-Trail. Es zeichnet jede Transformation, die Ihren Daten passiert ist, von RAW-Dateien bis zu endg\u00fcltigen Zahlen auf.<\/li>\n<li>Container, Datenversionierung und Provenienzverfolgung erg\u00e4nzen sich. Zusammen decken sie Code, Umgebung, Daten und Abstammung ab.<\/li>\n<\/ul>\n<h2>Was Sie zuerst wissen sollten<\/h2>\n<p>Container wie Docker und Singularity sind zu einem fast obligatorischen Teil der reproduzierbaren Forschung geworden. Sie l\u00f6sen ein echtes Problem: Wenn Sie jemandem ein Docker-Image senden, sollte diese Person in der Lage sein, den Code auszuf\u00fchren und die gleichen Ergebnisse auf einem anderen Computer zu erhalten.<\/p>\n<p>Aus diesem Grund fragen Zeitschriften und Rezensenten neben Papieren zunehmend nach Containerbildern. Container lassen jedoch zwei kritische L\u00fccken offen.<\/p>\n<p>Erstens verfolgen Container keine \u00c4nderungen an Ihren Daten. Ein Datensatz entwickelt sich im Laufe der Zeit, wenn Sie ihn bereinigen, filtern und erneut verarbeiten. Wenn Sie sechs Monate sp\u00e4ter ein Ergebnis reproduzieren, m\u00fcssen Sie wissen, welche Version der Daten diese Zahl erzeugt hat. Container zeichnen dies standardm\u00e4\u00dfig nicht auf.<\/p>\n<p>Zweitens erfassen Container keine Abstammungslinie. Wenn ein Analyseskript falsch ist, ein Parameter versehentlich ge\u00e4ndert wurde oder ein Vorverarbeitungsschritt inkonsistent angewendet wurde, gibt es m\u00f6glicherweise keine automatische Aufzeichnung dessen, was passiert ist. Sie verlassen sich auf Speicher, manuelle Notizen oder Gl\u00fcck.<\/p>\n<p>Dieser Artikel erkl\u00e4rt, wie moderne wissenschaftliche Workflows diese L\u00fccken durch Datenversionierung und Provenienzverfolgung l\u00f6sen. Die Datenversionierung verfolgt Datensatz\u00e4nderungen im Laufe der Zeit. Die Provenienzverfolgung zeichnet jede Transformation auf die Daten auf.<\/p>\n<h2>Container reichen nicht aus<\/h2>\n<p>Vor der Er\u00f6rterung der Datenversionierung hilft es zu verstehen, was Container tun und was nicht.<\/p>\n<p>Ein Container erfasst:<\/p>\n<ul>\n<li>Das Betriebssystem, normalerweise eine Linux-Distribution.<\/li>\n<li>Installierte Pakete und ihre Versionen.<\/li>\n<li>Ihre Code- und Konfigurationsdateien.<\/li>\n<li>Der Befehl, mit dem die Analyse ausgef\u00fchrt wird.<\/li>\n<\/ul>\n<p>Ein Container erfasst nicht automatisch:<\/p>\n<ul>\n<li>Die genauen Dateien werden als Eingaben verwendet, es sei denn, sie werden in das Bild eingebrannt.<\/li>\n<li>Laufzeitparameter, es sei denn, sie werden explizit protokolliert.<\/li>\n<li>Zwischenausg\u00e4nge, die w\u00e4hrend einer Pipeline generiert werden.<\/li>\n<li>Die Reihenfolge und Logik der Transformationen, die auf die Daten angewendet werden.<\/li>\n<\/ul>\n<p>Die praktische Konsequenz ist einfach. Sie k\u00f6nnen einen Container auf einem anderen Computer ausf\u00fchren und dieselbe Ausgabe nur erhalten, wenn auch die Eingaben und der Laufzeitkontext gesteuert werden. Wenn Sie eine bestimmte Analyse von vor Monaten reproduzieren m\u00f6chten, insbesondere eine mit mehreren Schritten und einem sich \u00e4ndernden Datensatz, ben\u00f6tigen Sie mehr als einen Container.<\/p>\n<p>Betrachten Sie ein gemeinsames Szenario. Sie trainieren eine Phasenfeldsimulation auf experimentellen Mikrostrukturbildern. Die Bilder werden w\u00e4hrend der Vorverarbeitung gereinigt und dann in Trainings- und Validierungss\u00e4tze aufgeteilt. Sechs Monate sp\u00e4ter bittet dich jemand, die Simulation zu reproduzieren.<\/p>\n<p>Sie \u00f6ffnen den Container, f\u00fchren den Befehl aus und erhalten das falsche Ergebnis. Der Grund kann sein, dass der Datensatz neu organisiert wurde, neue Samples hinzugef\u00fcgt wurden oder der Einstiegspunkt die Dateien verwendete, die sich gerade in einem Verzeichnis befanden. Ohne versionierte Eingaben und einen Audit-Trail kann der Container allein nicht beweisen, was passiert ist.<\/p>\n<p>Hier werden Datenversionierung und Provenienzverfolgung notwendig.<\/p>\n<h2>Was ist Datenversionierung?<\/h2>\n<p>Die Datenversionierung bringt dieselbe Idee, die Git f\u00fcr Code n\u00fctzlich macht, in die Welt der Datens\u00e4tze. Anstatt jede gro\u00dfe Bin\u00e4rdatei direkt zu verfolgen, werden in bestimmten Momenten leichte Schnappsch\u00fcsse oder Zeiger auf bestimmte Datenzust\u00e4nde erstellt.<\/p>\n<p>Die Kernidee ist einfach:<\/p>\n<ol>\n<li>Sie \u00e4ndern das Dataset, z. B. das Hinzuf\u00fcgen von Dateien, das \u00c4ndern von Dateien oder das Reorganisieren von Ordnern.<\/li>\n<li>Sie begehen einen Snapshot, der aufzeichnet, was sich ge\u00e4ndert hat und wo die aktuellen Daten leben.<\/li>\n<li>Sp\u00e4ter k\u00f6nnen Sie diesen Snapshot \u00fcberpr\u00fcfen, um den genauen Datenstatus wiederherzustellen, der ein bestimmtes Ergebnis hervorgebracht hat.<\/li>\n<\/ol>\n<p>Zwei f\u00fchrende Tools im wissenschaftlichen Python-\u00d6kosystem sind DVC und DataLad.<\/p>\n<h3>DVC: Datenversionskontrolle<\/h3>\n<p>DVC ist ein weit verbreitetes Datenversionierungstool f\u00fcr Python-basierte Workflows. Es wird durch die Generierung kleiner Metadatendateien erstellt, die Datenspeicherorte und Pr\u00fcfsummen verfolgen, w\u00e4hrend sich die tats\u00e4chlichen Daten im Remote-Speicher befinden, z. B. Cloud-Buckets, lokale Festplatten oder gemeinsam genutzte Netzwerke.<\/p>\n<p>F\u00fcr wissenschaftliche Workflows sind mehrere DVC-Funktionen wichtig:<\/p>\n<ul>\n<li>Pipelinedefinition. <code>dvc.yaml<\/code> Dateien erm\u00f6glichen Ihnen die Beschreibung der Analyse-Pipeline, einschlie\u00dflich Eingaben, Ausgaben, Verarbeitungsschritten und Abh\u00e4ngigkeiten.<\/li>\n<li>Versuchsverfolgung. <code>dvc exp run<\/code> Erstellt isolierte Experiment-Namespaces, sodass Sie Parameterkonfigurationen testen k\u00f6nnen, ohne den Git-Verlauf zu \u00fcberladen.<\/li>\n<li>Fernspeicher. DVC kann Daten an konfigurierte Remotes wie S3, Google Cloud Storage, Azure, SSH-Server oder freigegebene Dateisysteme \u00fcbertragen.<\/li>\n<li>Zeitreise. Sie k\u00f6nnen einen Git-Commit auschecken, <code>dvc pull<\/code> und <code>dvc checkout<\/code> ausf\u00fchren und den Datenstatus von diesem Punkt aus wiederherstellen.<\/li>\n<\/ul>\n<p>Ein typischer wissenschaftlicher Arbeitsablauf kann wie folgt aussehen:<\/p>\n<pre><code class=\"language-bash\"># Initialize DVC in your project\ndvc init\n\n# Add your dataset\ndvc add data\/raw_microstructures\/\n\n# Commit only the lightweight metadata\ngit add data\/raw_microstructures.dvc\ngit commit -m \"Initial microstructure dataset\"\n\n# Define a processing pipeline\ndvc run -d data\/raw_microstructures.dvc -o data\/cleaned\/ \n    python src\/preprocess.py\n\n# Run experiments\ndvc exp run --set-param preprocessing.threshold=0.5\n<\/code><\/pre>\n<h3>datalad<\/h3>\n<p>DataLad wurde f\u00fcr wissenschaftliche Datens\u00e4tze entwickelt und verwendet Git-Annex unter der Haube. Es ist besonders n\u00fctzlich f\u00fcr gro\u00dfe Datens\u00e4tze, die sich \u00fcber viele Dateien erstrecken k\u00f6nnen, z. B. Simulationen, experimentelle Messungen, Bildgebungsdaten oder Sammlungen institutioneller Forschungsergebnisse.<\/p>\n<p>DataLad bietet mehrere wissenschaftlich spezifische Vorteile:<\/p>\n<ul>\n<li>Dataset-zentriertes Design. DataLad behandelt jedes Verzeichnis als Dataset mit versioniertem Verlauf.<\/li>\n<li>Datenabruf bei Bedarf. Anstatt alles zu ziehen, kann DataLad bei Bedarf bestimmte Dateien oder Unterverzeichnisse abrufen.<\/li>\n<li>Eingebaute Replikation. DataLad kann Geschwister-Repositories in verschiedenen Institutionen verwalten, um Redundanz und Compliance zu gew\u00e4hrleisten.<\/li>\n<li>HPC-Integration. Erweiterungen k\u00f6nnen Chargenplanungssysteme wie Slurm und PBS unterst\u00fctzen.<\/li>\n<\/ul>\n<p>Ein grundlegender DataLad-Workflow sieht folgenderma\u00dfen aus:<\/p>\n<pre><code class=\"language-bash\"># Initialize a dataset\ndatalad create -s my-dataset\n\n# Add data using git-annex under the hood\ndatalad add data\/raw_images\/\n\n# Record a provenance-rich commit\ndatalad save -m \"Add raw imaging data, batch 2024-01\"\n\n# Clone to another machine and fetch data on demand\ndatalad clone my-dataset\ndatalad get data\/processed_results\/\n<\/code><\/pre>\n<h3>Wann verwenden Sie welche<\/h3>\n<p>DVC ist oft besser f\u00fcr Teams, die in Python-Datenwissenschaften arbeiten, die Pipeline-Tracking und Experiment-Management ben\u00f6tigen. Es integriert sich nat\u00fcrlich in Tools wie scikit-learn, PyTorch und andere Python-Workflows.<\/p>\n<p>DataLad ist oft besser f\u00fcr langfristige Datenkurationsprojekte, insbesondere wenn Datens\u00e4tze gro\u00df sind, \u00fcber Institutionen verteilt sind oder voraussichtlich \u00fcber viele Jahre \u00fcberleben werden.<\/p>\n<p>Sie schlie\u00dfen sich nicht gegenseitig aus. Beide verwenden Git als Teil ihres Versionskontroll-Backbone und beide k\u00f6nnen mit containerisierten Ausf\u00fchrungsumgebungen kombiniert werden.<\/p>\n<h2>Was ist Provenienzverfolgung?<\/h2>\n<p>Provenienz ist die systematische Aufzeichnung dar\u00fcber, woher Daten stammen und was damit passiert ist. In wissenschaftlichen Arbeitsabl\u00e4ufen beantwortet die Provenienz praktische Fragen:<\/p>\n<ul>\n<li>Welche Version der Eingabedaten wurde verwendet?<\/li>\n<li>Welche Parameter wurden w\u00e4hrend der Verarbeitung angewendet?<\/li>\n<li>Welche Zwischendateien wurden generiert?<\/li>\n<li>Welche Softwareversionen waren aktiv, als die Ausgabe produziert wurde?<\/li>\n<li>Wer hat den Workflow und wann ausgef\u00fchrt?<\/li>\n<\/ul>\n<p>Zwei Arten von Provenienz sind in wissenschaftlichen Arbeitsabl\u00e4ufen wichtig.<\/p>\n<p>Prospektive Herkunft beschreibt, was passieren wird. Es ist die geplante Workflow-Spezifikation: das Rezept, wie Daten durch die Analyse verschoben werden sollen. Tools wie CWL und WDL verwenden deklarative Formate, um anzugeben, was bei der Ausf\u00fchrung eines Workflows passieren soll.<\/p>\n<p>Retrospektive Provenienz beschreibt, was tats\u00e4chlich passiert ist. Es zeichnet Ausf\u00fchrungsprotokolle, Umgebungs-Snapshots, Datenpr\u00fcfsummen und genaue Laufzeitdateien auf. Dies ist der Audit-Trail, der die Reproduzierbarkeit unterst\u00fctzt.<\/p>\n<h3>Ro-Crate: Verpackungsforschungsartefakte mit Provenienz<\/h3>\n<p>Ro-Crate ist ein Standard f\u00fcr die Verpackung von Forschungsergebnissen, Datendateien, Workflow-Definitionen, Parametern und Logs in einem maschinenlesbaren Archiv.<\/p>\n<p>Ein Ro-Crate-Archiv ist normalerweise ein Verzeichnis oder eine ZIP-Datei, die Folgendes enth\u00e4lt:<\/p>\n<ul>\n<li>Datendateien und Analyseausgaben.<\/li>\n<li>Eine <code>ro-crate-metadata.json<\/code>-Datei mit JSON-LD-Metadaten.<\/li>\n<li>Workflow-Definitionen wie CWL-, NextFlow- oder SnakeMake-Dateien.<\/li>\n<li>Ausf\u00fchrungsprotokolle und Umgebungserfassungen.<\/li>\n<\/ul>\n<p>Ro-Crate ist n\u00fctzlich, weil es leicht und tragbar ist. Sie ben\u00f6tigen keine spezielle Datenbank oder einen speziellen Dienst, um diese zu \u00fcberpr\u00fcfen. Jeder mit den Dateien kann die Metadaten lesen und die Herkunft verstehen.<\/p>\n<p>Das Format unterst\u00fctzt sowohl die prospektive Provenienz, die beschreibt, was der Workflow plant, als auch die retrospektive Provenienz, die aufzeichnet, was tats\u00e4chlich gelaufen ist.<\/p>\n<p>Ro-Crate gewinnt im wissenschaftlichen Rechnen an Bedeutung. Plattformen wie Galaxy, WorkflowHub und Zenodo unterst\u00fctzen Ro-Crate-Exporte und sind somit n\u00fctzlich f\u00fcr publikationsf\u00e4hige Forschungsartefakte.<\/p>\n<h2>Alles zusammen: Ein praktisches Workflow-Muster<\/h2>\n<p>Container, Datenversionierung und Provenienzverfolgung funktionieren am besten, wenn sie zusammen verwendet werden. Jeder deckt eine andere Reproduzierbarkeitsschicht ab.<\/p>\n<h3>Schritt 1: Version Ihrer Daten mit DVC oder DataLad<\/h3>\n<p>Beginnen Sie mit der Versionierung von RAW-Eing\u00e4ngen. Verwenden Sie <code>dvc add<\/code> oder <code>datalad add<\/code> f\u00fcr jeden Datensatz, der in die Analyse einspeist. \u00dcbergeben Sie die DVC- oder Git-Annex-Metadatendateien an Git neben dem Code.<\/p>\n<h3>Schritt 2: Definieren Sie Ihre Pipeline<\/h3>\n<p>Wenn Sie DVC verwenden, schreiben Sie eine <code>dvc.yaml<\/code>-Datei, die jeden Verarbeitungsschritt als Stufe beschreibt. Verwenden Sie bei Bedarf dokumentierte Skripte, konsistente Parameterdateien und Geschwister-Repositories, wenn Sie DataLad verwenden.<\/p>\n<h3>Schritt 3: Die Ausf\u00fchrung containerisieren<\/h3>\n<p>Umfassen Sie Analyseskripts in einen Container, der \u00fcber Computer ausgef\u00fchrt werden kann. Der Container h\u00e4lt Python-Pakete, C++-Bibliotheken und Bin\u00e4rdateien konsistent. Es ersetzt nicht versionierte Eing\u00e4nge.<\/p>\n<h3>Schritt 4: Provenienz mit Ro-Crate oder CWLProv erfassen<\/h3>\n<p>Packen Sie am Ende jedes Workflow-Laufs Artefakte in ein Ro-Crate-Archiv. Das gibt dir:<\/p>\n<ul>\n<li>Ein einzelnes Verzeichnis oder eine ZIP-Datei mit Daten, Code, Protokollen und Metadaten.<\/li>\n<li>Maschinenlesbare Provenienz, die mit Datens\u00e4tzen verkn\u00fcpft ist.<\/li>\n<li>Persistente Identifikatoren, wenn sie in Repositories wie Zenodo oder FigShare hinterlegt werden.<\/li>\n<\/ul>\n<h3>Der Arbeitsablauf in der Praxis<\/h3>\n<pre><code>Your Project Directory\n\u251c\u2500\u2500 .git\/                     # Code and metadata\n\u251c\u2500\u2500 .dvc\/                     # DVC pipeline state\n\u251c\u2500\u2500 src\/                      # Analysis scripts\n\u251c\u2500\u2500 data\/                     # Versioned datasets\n\u251c\u2500\u2500 results\/                  # Output data\n\u251c\u2500\u2500 dvc.yaml                  # Pipeline definition\n\u251c\u2500\u2500 params.yaml               # Parameter file\n\u2514\u2500\u2500 Dockerfile                # Container definition\n<\/code><\/pre>\n<p>Das Ausf\u00fchren des Workflows kann wie folgt aussehen:<\/p>\n<pre><code class=\"language-bash\"># Restore exact data state\ndvc checkout\n\n# Run with pinned container\ndocker run -v $(pwd):\/workspace my-analysis:1.2 python src\/run.py\n\n# Package results with provenance\nro-crate add data\/results.csv params.yaml results\/\n<\/code><\/pre>\n<h2>H\u00e4ufige Fehler<\/h2>\n<p>Dies sind h\u00e4ufige Fallstricke, wenn Forscher Datenversionierung und Provenienzverfolgung einf\u00fchren.<\/p>\n<h3>1. Verfolgen Sie jede Zwischendatei<\/h3>\n<p>Die Versionierung jeder Zwischendatei ist in der Regel unn\u00f6tig und kann sch\u00e4dlich werden. Es bl\u00e4st Speicher und Metadaten auf, ohne die Reproduzierbarkeit zu verbessern.<\/p>\n<p>Nur verfolgen:<\/p>\n<ul>\n<li>RAW-Eingaben, die die urspr\u00fcnglich erworbenen Dateien sind.<\/li>\n<li>vorverarbeitete Daten, die kuratierte Version, die tats\u00e4chlich f\u00fcr die Analyse verwendet wird.<\/li>\n<li>Endg\u00fcltige Ausgabedateien wie Abbildungen, Tabellen und ver\u00f6ffentlichte Simulationsausgaben.<\/li>\n<\/ul>\n<p>Versionieren Sie nicht jede tempor\u00e4re CSV- oder Scratch-Datei, es sei denn, es ist erforderlich, das Endergebnis zu reproduzieren.<\/p>\n<h3>2. Vergessen von Versionsparameterdateien<\/h3>\n<p>Wenn Parameter nur als Befehlszeilenargumente \u00fcbergeben werden, k\u00f6nnen sie m\u00f6glicherweise nicht nur von Git aus wiederhergestellt werden. Parameterdateien sind genauso wichtig wie Datendateien.<\/p>\n<p>versionieren sie explizit:<\/p>\n<pre><code class=\"language-bash\">dvc add configs\/params.yaml\ngit add configs\/params.yaml.dvc\n<\/code><\/pre>\n<h3>3. Angenommen, Container l\u00f6sen alles<\/h3>\n<p>Container sind wertvoll, aber sie sind nur eine Schicht. Ein Container ohne versionierte Eingaben und Provenienz reicht nicht aus, um zu beweisen, wie ein bestimmtes Ergebnis erzeugt wurde.<\/p>\n<p>Stellen Sie sich Container als die Umgebungsschicht vor. Sie ben\u00f6tigen weiterhin Datenversionierung f\u00fcr Eingaben und Provenienz-Tracking f\u00fcr den Workflow-Verlauf.<\/p>\n<h3>4. Ignorieren der Remotespeicherkonfiguration<\/h3>\n<p>DVC und DataLad funktionieren am besten, wenn der Remote-Speicher fr\u00fchzeitig konfiguriert ist. Ohne Remotes k\u00f6nnen Metadatendateien auf lokale Pfade verweisen, die beim Wechseln in einen Cluster oder eine Cloud-Umgebung verschwinden.<\/p>\n<p>Konfigurieren Sie Remotes zu Beginn des Projekts, nicht w\u00e4hrend einer Terminkrise.<\/p>\n<h2>Auswahl des richtigen Werkzeugs f\u00fcr Ihr Projekt<\/h2>\n<p>Die Werkzeuglandschaft ist vielf\u00e4ltig. Verwenden Sie dieses Entscheidungsframework als Ausgangspunkt.<\/p>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Szenario<\/th>\n<th>Empfohlenes Werkzeug<\/th>\n<th>Warum<\/th>\n<\/tr>\n<tr>\n<td>Python Machine Learning Pipeline mit Experimenten<\/td>\n<td>DVC<\/td>\n<td>Native <code>dvc exp run<\/code> Unterst\u00fctzung f\u00fcr Experiment-Tracking<\/td>\n<\/tr>\n<tr>\n<td>Gro\u00dfe wissenschaftliche Datens\u00e4tze \u00fcber Institutionen hinweg<\/td>\n<td>datalad<\/td>\n<td>Abruf bei Bedarf und Replikation von Geschwistern<\/td>\n<\/tr>\n<tr>\n<td>Publikationsfertige Artefaktverpackung<\/td>\n<td>Ro-Crate<\/td>\n<td>Leicht, tragbar und repository-freundlich<\/td>\n<\/tr>\n<tr>\n<td>Mehrstufige Pipeline mit Caching<\/td>\n<td>DVC mit <code>dvc.yaml<\/code> oder SnakeMake<\/td>\n<td>Automatische Abh\u00e4ngigkeitsaufl\u00f6sung und Wiederholungslogik<\/td>\n<\/tr>\n<tr>\n<td>Langzeitarchivierung f\u00fcr mehr als 10 Jahre<\/td>\n<td>Datalad plus Zenodo<\/td>\n<td>Git-Verlauf und persistente Kennungen<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Sie k\u00f6nnen auch Werkzeuge kombinieren. Verwenden Sie beispielsweise DVC f\u00fcr die Datenversionierung, Docker f\u00fcr Umgebungsreproduzierbarkeit und Ro-crate, um den endg\u00fcltigen Workflow-Lauf f\u00fcr die Ver\u00f6ffentlichung zu verpacken.<\/p>\n<h2>Was macht man als n\u00e4chstes<\/h2>\n<p>Wenn Sie ein neues Projekt starten, ist der Pfad unkompliziert:<\/p>\n<ol>\n<li>Initialisieren Sie ein Git-Repository f\u00fcr den Code.<\/li>\n<li>F\u00fcgen Sie DVC mit <code>dvc init<\/code> und Versions-RAW-Datasets hinzu.<\/li>\n<li>Schreiben Sie Analyseskripte als Python-Dateien oder Bash-Skripte.<\/li>\n<li>Containerisieren Sie den Workflow mit Docker oder Singularity.<\/li>\n<li>Paketergebnisse mit Ro-Crate bei jedem wichtigen Meilenstein.<\/li>\n<\/ol>\n<p>Wenn Sie an einem bestehenden Projekt arbeiten, beginnen Sie klein:<\/p>\n<ol>\n<li>F\u00fcgen Sie DVC zum Repository- und Versionsschl\u00fcssel-Datasets hinzu.<\/li>\n<li>Schreiben Sie eine <code>dvc.yaml<\/code>-Datei, die die Pipeline beschreibt.<\/li>\n<li>Containerisieren Sie den Hauptausf\u00fchrungsschritt.<\/li>\n<li>Erstellen Sie ein Ro-Crate-Archiv f\u00fcr das wichtigste Ergebnis.<\/li>\n<\/ol>\n<p>Mit diesem inkrementellen Ansatz k\u00f6nnen Sie Reproduzierbarkeitsschichten hinzuf\u00fcgen, ohne das gesamte Projekt neu zu schreiben.<\/p>\n<h2>Verwandte Anleitungen<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/versioning-reproducibility-and-why-research-software-teams-face-integrity-issues-too\/\">Versionierung und Integrit\u00e4t in der Forschungssoftware <\/a> &#8211; Ein umfassenderer Blick auf Versionskontrolle, Reproduzierbarkeit und R\u00fcckverfolgbarkeit von Workflows f\u00fcr Forschungssoftwareteams.<\/li>\n<li><a href=\"https:\/\/matforge.org\/python-debugging-scientific-code-print-statements-profiling\/\"> Python-Debugging f\u00fcr wissenschaftlichen Code <\/a> &#8211; Debugging-Muster, die neben reproduzierbaren Workflows funktionieren.<\/li>\n<\/ul>\n<p>Dieser Artikel behandelt die Datenversionierung und Provenienzverfolgung als praktische Werkzeuge f\u00fcr reproduzierbare wissenschaftliche Workflows. DVC, Datalad und Ro-Crate werden aktiv gepflegt und im wissenschaftlichen Python-\u00d6kosystem weit verbreitet. Die neuesten Setup-Details finden Sie immer in der offiziellen Dokumentation f\u00fcr jedes Werkzeug.<\/p>\n","protected":false,"raw":"<h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li>Container l\u00f6sen ein Problem. Sie frieren die Softwareumgebung ein, verfolgen jedoch nicht, was sich in Ihren Daten ge\u00e4ndert hat oder wie sich Ihre Analyse entwickelt hat.<\/li>\n<li>Datenversionierung f\u00fcgt eine fehlende Ebene hinzu. Tools wie DVC und DataLad bringen die Versionskontrolle im Git-Stil in Datasets und erleichtern die Wiedergabe von Ergebnissen mit exakten Eingaben, Parameterdateien und ausgew\u00e4hlten Ausgaben.<\/li>\n<li>Provenienz ist der Audit-Trail. Es zeichnet jede Transformation, die Ihren Daten passiert ist, von RAW-Dateien bis zu endg\u00fcltigen Zahlen auf.<\/li>\n<li>Container, Datenversionierung und Provenienzverfolgung erg\u00e4nzen sich. Zusammen decken sie Code, Umgebung, Daten und Abstammung ab.<\/li>\n<\/ul>\n<h2>Was Sie zuerst wissen sollten<\/h2>\n<p>Container wie Docker und Singularity sind zu einem fast obligatorischen Teil der reproduzierbaren Forschung geworden. Sie l\u00f6sen ein echtes Problem: Wenn Sie jemandem ein Docker-Image senden, sollte diese Person in der Lage sein, den Code auszuf\u00fchren und die gleichen Ergebnisse auf einem anderen Computer zu erhalten.<\/p>\n<p>Aus diesem Grund fragen Zeitschriften und Rezensenten neben Papieren zunehmend nach Containerbildern. Container lassen jedoch zwei kritische L\u00fccken offen.<\/p>\n<p>Erstens verfolgen Container keine \u00c4nderungen an Ihren Daten. Ein Datensatz entwickelt sich im Laufe der Zeit, wenn Sie ihn bereinigen, filtern und erneut verarbeiten. Wenn Sie sechs Monate sp\u00e4ter ein Ergebnis reproduzieren, m\u00fcssen Sie wissen, welche Version der Daten diese Zahl erzeugt hat. Container zeichnen dies standardm\u00e4\u00dfig nicht auf.<\/p>\n<p>Zweitens erfassen Container keine Abstammungslinie. Wenn ein Analyseskript falsch ist, ein Parameter versehentlich ge\u00e4ndert wurde oder ein Vorverarbeitungsschritt inkonsistent angewendet wurde, gibt es m\u00f6glicherweise keine automatische Aufzeichnung dessen, was passiert ist. Sie verlassen sich auf Speicher, manuelle Notizen oder Gl\u00fcck.<\/p>\n<p>Dieser Artikel erkl\u00e4rt, wie moderne wissenschaftliche Workflows diese L\u00fccken durch Datenversionierung und Provenienzverfolgung l\u00f6sen. Die Datenversionierung verfolgt Datensatz\u00e4nderungen im Laufe der Zeit. Die Provenienzverfolgung zeichnet jede Transformation auf die Daten auf.<\/p>\n<h2>Container reichen nicht aus<\/h2>\n<p>Vor der Er\u00f6rterung der Datenversionierung hilft es zu verstehen, was Container tun und was nicht.<\/p>\n<p>Ein Container erfasst:<\/p>\n<ul>\n<li>Das Betriebssystem, normalerweise eine Linux-Distribution.<\/li>\n<li>Installierte Pakete und ihre Versionen.<\/li>\n<li>Ihre Code- und Konfigurationsdateien.<\/li>\n<li>Der Befehl, mit dem die Analyse ausgef\u00fchrt wird.<\/li>\n<\/ul>\n<p>Ein Container erfasst nicht automatisch:<\/p>\n<ul>\n<li>Die genauen Dateien werden als Eingaben verwendet, es sei denn, sie werden in das Bild eingebrannt.<\/li>\n<li>Laufzeitparameter, es sei denn, sie werden explizit protokolliert.<\/li>\n<li>Zwischenausg\u00e4nge, die w\u00e4hrend einer Pipeline generiert werden.<\/li>\n<li>Die Reihenfolge und Logik der Transformationen, die auf die Daten angewendet werden.<\/li>\n<\/ul>\n<p>Die praktische Konsequenz ist einfach. Sie k\u00f6nnen einen Container auf einem anderen Computer ausf\u00fchren und dieselbe Ausgabe nur erhalten, wenn auch die Eingaben und der Laufzeitkontext gesteuert werden. Wenn Sie eine bestimmte Analyse von vor Monaten reproduzieren m\u00f6chten, insbesondere eine mit mehreren Schritten und einem sich \u00e4ndernden Datensatz, ben\u00f6tigen Sie mehr als einen Container.<\/p>\n<p>Betrachten Sie ein gemeinsames Szenario. Sie trainieren eine Phasenfeldsimulation auf experimentellen Mikrostrukturbildern. Die Bilder werden w\u00e4hrend der Vorverarbeitung gereinigt und dann in Trainings- und Validierungss\u00e4tze aufgeteilt. Sechs Monate sp\u00e4ter bittet dich jemand, die Simulation zu reproduzieren.<\/p>\n<p>Sie \u00f6ffnen den Container, f\u00fchren den Befehl aus und erhalten das falsche Ergebnis. Der Grund kann sein, dass der Datensatz neu organisiert wurde, neue Samples hinzugef\u00fcgt wurden oder der Einstiegspunkt die Dateien verwendete, die sich gerade in einem Verzeichnis befanden. Ohne versionierte Eingaben und einen Audit-Trail kann der Container allein nicht beweisen, was passiert ist.<\/p>\n<p>Hier werden Datenversionierung und Provenienzverfolgung notwendig.<\/p>\n<h2>Was ist Datenversionierung?<\/h2>\n<p>Die Datenversionierung bringt dieselbe Idee, die Git f\u00fcr Code n\u00fctzlich macht, in die Welt der Datens\u00e4tze. Anstatt jede gro\u00dfe Bin\u00e4rdatei direkt zu verfolgen, werden in bestimmten Momenten leichte Schnappsch\u00fcsse oder Zeiger auf bestimmte Datenzust\u00e4nde erstellt.<\/p>\n<p>Die Kernidee ist einfach:<\/p>\n<ol>\n<li>Sie \u00e4ndern das Dataset, z. B. das Hinzuf\u00fcgen von Dateien, das \u00c4ndern von Dateien oder das Reorganisieren von Ordnern.<\/li>\n<li>Sie begehen einen Snapshot, der aufzeichnet, was sich ge\u00e4ndert hat und wo die aktuellen Daten leben.<\/li>\n<li>Sp\u00e4ter k\u00f6nnen Sie diesen Snapshot \u00fcberpr\u00fcfen, um den genauen Datenstatus wiederherzustellen, der ein bestimmtes Ergebnis hervorgebracht hat.<\/li>\n<\/ol>\n<p>Zwei f\u00fchrende Tools im wissenschaftlichen Python-\u00d6kosystem sind DVC und DataLad.<\/p>\n<h3>DVC: Datenversionskontrolle<\/h3>\n<p>DVC ist ein weit verbreitetes Datenversionierungstool f\u00fcr Python-basierte Workflows. Es wird durch die Generierung kleiner Metadatendateien erstellt, die Datenspeicherorte und Pr\u00fcfsummen verfolgen, w\u00e4hrend sich die tats\u00e4chlichen Daten im Remote-Speicher befinden, z. B. Cloud-Buckets, lokale Festplatten oder gemeinsam genutzte Netzwerke.<\/p>\n<p>F\u00fcr wissenschaftliche Workflows sind mehrere DVC-Funktionen wichtig:<\/p>\n<ul>\n<li>Pipelinedefinition. <code>dvc.yaml<\/code> Dateien erm\u00f6glichen Ihnen die Beschreibung der Analyse-Pipeline, einschlie\u00dflich Eingaben, Ausgaben, Verarbeitungsschritten und Abh\u00e4ngigkeiten.<\/li>\n<li>Versuchsverfolgung. <code>dvc exp run<\/code> Erstellt isolierte Experiment-Namespaces, sodass Sie Parameterkonfigurationen testen k\u00f6nnen, ohne den Git-Verlauf zu \u00fcberladen.<\/li>\n<li>Fernspeicher. DVC kann Daten an konfigurierte Remotes wie S3, Google Cloud Storage, Azure, SSH-Server oder freigegebene Dateisysteme \u00fcbertragen.<\/li>\n<li>Zeitreise. Sie k\u00f6nnen einen Git-Commit auschecken, <code>dvc pull<\/code> und <code>dvc checkout<\/code> ausf\u00fchren und den Datenstatus von diesem Punkt aus wiederherstellen.<\/li>\n<\/ul>\n<p>Ein typischer wissenschaftlicher Arbeitsablauf kann wie folgt aussehen:<\/p>\n<pre><code class=\"language-bash\"># Initialize DVC in your project\ndvc init\n\n# Add your dataset\ndvc add data\/raw_microstructures\/\n\n# Commit only the lightweight metadata\ngit add data\/raw_microstructures.dvc\ngit commit -m \"Initial microstructure dataset\"\n\n# Define a processing pipeline\ndvc run -d data\/raw_microstructures.dvc -o data\/cleaned\/ \n    python src\/preprocess.py\n\n# Run experiments\ndvc exp run --set-param preprocessing.threshold=0.5\n<\/code><\/pre>\n<h3>datalad<\/h3>\n<p>DataLad wurde f\u00fcr wissenschaftliche Datens\u00e4tze entwickelt und verwendet Git-Annex unter der Haube. Es ist besonders n\u00fctzlich f\u00fcr gro\u00dfe Datens\u00e4tze, die sich \u00fcber viele Dateien erstrecken k\u00f6nnen, z. B. Simulationen, experimentelle Messungen, Bildgebungsdaten oder Sammlungen institutioneller Forschungsergebnisse.<\/p>\n<p>DataLad bietet mehrere wissenschaftlich spezifische Vorteile:<\/p>\n<ul>\n<li>Dataset-zentriertes Design. DataLad behandelt jedes Verzeichnis als Dataset mit versioniertem Verlauf.<\/li>\n<li>Datenabruf bei Bedarf. Anstatt alles zu ziehen, kann DataLad bei Bedarf bestimmte Dateien oder Unterverzeichnisse abrufen.<\/li>\n<li>Eingebaute Replikation. DataLad kann Geschwister-Repositories in verschiedenen Institutionen verwalten, um Redundanz und Compliance zu gew\u00e4hrleisten.<\/li>\n<li>HPC-Integration. Erweiterungen k\u00f6nnen Chargenplanungssysteme wie Slurm und PBS unterst\u00fctzen.<\/li>\n<\/ul>\n<p>Ein grundlegender DataLad-Workflow sieht folgenderma\u00dfen aus:<\/p>\n<pre><code class=\"language-bash\"># Initialize a dataset\ndatalad create -s my-dataset\n\n# Add data using git-annex under the hood\ndatalad add data\/raw_images\/\n\n# Record a provenance-rich commit\ndatalad save -m \"Add raw imaging data, batch 2024-01\"\n\n# Clone to another machine and fetch data on demand\ndatalad clone my-dataset\ndatalad get data\/processed_results\/\n<\/code><\/pre>\n<h3>Wann verwenden Sie welche<\/h3>\n<p>DVC ist oft besser f\u00fcr Teams, die in Python-Datenwissenschaften arbeiten, die Pipeline-Tracking und Experiment-Management ben\u00f6tigen. Es integriert sich nat\u00fcrlich in Tools wie scikit-learn, PyTorch und andere Python-Workflows.<\/p>\n<p>DataLad ist oft besser f\u00fcr langfristige Datenkurationsprojekte, insbesondere wenn Datens\u00e4tze gro\u00df sind, \u00fcber Institutionen verteilt sind oder voraussichtlich \u00fcber viele Jahre \u00fcberleben werden.<\/p>\n<p>Sie schlie\u00dfen sich nicht gegenseitig aus. Beide verwenden Git als Teil ihres Versionskontroll-Backbone und beide k\u00f6nnen mit containerisierten Ausf\u00fchrungsumgebungen kombiniert werden.<\/p>\n<h2>Was ist Provenienzverfolgung?<\/h2>\n<p>Provenienz ist die systematische Aufzeichnung dar\u00fcber, woher Daten stammen und was damit passiert ist. In wissenschaftlichen Arbeitsabl\u00e4ufen beantwortet die Provenienz praktische Fragen:<\/p>\n<ul>\n<li>Welche Version der Eingabedaten wurde verwendet?<\/li>\n<li>Welche Parameter wurden w\u00e4hrend der Verarbeitung angewendet?<\/li>\n<li>Welche Zwischendateien wurden generiert?<\/li>\n<li>Welche Softwareversionen waren aktiv, als die Ausgabe produziert wurde?<\/li>\n<li>Wer hat den Workflow und wann ausgef\u00fchrt?<\/li>\n<\/ul>\n<p>Zwei Arten von Provenienz sind in wissenschaftlichen Arbeitsabl\u00e4ufen wichtig.<\/p>\n<p>Prospektive Herkunft beschreibt, was passieren wird. Es ist die geplante Workflow-Spezifikation: das Rezept, wie Daten durch die Analyse verschoben werden sollen. Tools wie CWL und WDL verwenden deklarative Formate, um anzugeben, was bei der Ausf\u00fchrung eines Workflows passieren soll.<\/p>\n<p>Retrospektive Provenienz beschreibt, was tats\u00e4chlich passiert ist. Es zeichnet Ausf\u00fchrungsprotokolle, Umgebungs-Snapshots, Datenpr\u00fcfsummen und genaue Laufzeitdateien auf. Dies ist der Audit-Trail, der die Reproduzierbarkeit unterst\u00fctzt.<\/p>\n<h3>Ro-Crate: Verpackungsforschungsartefakte mit Provenienz<\/h3>\n<p>Ro-Crate ist ein Standard f\u00fcr die Verpackung von Forschungsergebnissen, Datendateien, Workflow-Definitionen, Parametern und Logs in einem maschinenlesbaren Archiv.<\/p>\n<p>Ein Ro-Crate-Archiv ist normalerweise ein Verzeichnis oder eine ZIP-Datei, die Folgendes enth\u00e4lt:<\/p>\n<ul>\n<li>Datendateien und Analyseausgaben.<\/li>\n<li>Eine <code>ro-crate-metadata.json<\/code>-Datei mit JSON-LD-Metadaten.<\/li>\n<li>Workflow-Definitionen wie CWL-, NextFlow- oder SnakeMake-Dateien.<\/li>\n<li>Ausf\u00fchrungsprotokolle und Umgebungserfassungen.<\/li>\n<\/ul>\n<p>Ro-Crate ist n\u00fctzlich, weil es leicht und tragbar ist. Sie ben\u00f6tigen keine spezielle Datenbank oder einen speziellen Dienst, um diese zu \u00fcberpr\u00fcfen. Jeder mit den Dateien kann die Metadaten lesen und die Herkunft verstehen.<\/p>\n<p>Das Format unterst\u00fctzt sowohl die prospektive Provenienz, die beschreibt, was der Workflow plant, als auch die retrospektive Provenienz, die aufzeichnet, was tats\u00e4chlich gelaufen ist.<\/p>\n<p>Ro-Crate gewinnt im wissenschaftlichen Rechnen an Bedeutung. Plattformen wie Galaxy, WorkflowHub und Zenodo unterst\u00fctzen Ro-Crate-Exporte und sind somit n\u00fctzlich f\u00fcr publikationsf\u00e4hige Forschungsartefakte.<\/p>\n<h2>Alles zusammen: Ein praktisches Workflow-Muster<\/h2>\n<p>Container, Datenversionierung und Provenienzverfolgung funktionieren am besten, wenn sie zusammen verwendet werden. Jeder deckt eine andere Reproduzierbarkeitsschicht ab.<\/p>\n<h3>Schritt 1: Version Ihrer Daten mit DVC oder DataLad<\/h3>\n<p>Beginnen Sie mit der Versionierung von RAW-Eing\u00e4ngen. Verwenden Sie <code>dvc add<\/code> oder <code>datalad add<\/code> f\u00fcr jeden Datensatz, der in die Analyse einspeist. \u00dcbergeben Sie die DVC- oder Git-Annex-Metadatendateien an Git neben dem Code.<\/p>\n<h3>Schritt 2: Definieren Sie Ihre Pipeline<\/h3>\n<p>Wenn Sie DVC verwenden, schreiben Sie eine <code>dvc.yaml<\/code>-Datei, die jeden Verarbeitungsschritt als Stufe beschreibt. Verwenden Sie bei Bedarf dokumentierte Skripte, konsistente Parameterdateien und Geschwister-Repositories, wenn Sie DataLad verwenden.<\/p>\n<h3>Schritt 3: Die Ausf\u00fchrung containerisieren<\/h3>\n<p>Umfassen Sie Analyseskripts in einen Container, der \u00fcber Computer ausgef\u00fchrt werden kann. Der Container h\u00e4lt Python-Pakete, C++-Bibliotheken und Bin\u00e4rdateien konsistent. Es ersetzt nicht versionierte Eing\u00e4nge.<\/p>\n<h3>Schritt 4: Provenienz mit Ro-Crate oder CWLProv erfassen<\/h3>\n<p>Packen Sie am Ende jedes Workflow-Laufs Artefakte in ein Ro-Crate-Archiv. Das gibt dir:<\/p>\n<ul>\n<li>Ein einzelnes Verzeichnis oder eine ZIP-Datei mit Daten, Code, Protokollen und Metadaten.<\/li>\n<li>Maschinenlesbare Provenienz, die mit Datens\u00e4tzen verkn\u00fcpft ist.<\/li>\n<li>Persistente Identifikatoren, wenn sie in Repositories wie Zenodo oder FigShare hinterlegt werden.<\/li>\n<\/ul>\n<h3>Der Arbeitsablauf in der Praxis<\/h3>\n<pre><code>Your Project Directory\n\u251c\u2500\u2500 .git\/                     # Code and metadata\n\u251c\u2500\u2500 .dvc\/                     # DVC pipeline state\n\u251c\u2500\u2500 src\/                      # Analysis scripts\n\u251c\u2500\u2500 data\/                     # Versioned datasets\n\u251c\u2500\u2500 results\/                  # Output data\n\u251c\u2500\u2500 dvc.yaml                  # Pipeline definition\n\u251c\u2500\u2500 params.yaml               # Parameter file\n\u2514\u2500\u2500 Dockerfile                # Container definition\n<\/code><\/pre>\n<p>Das Ausf\u00fchren des Workflows kann wie folgt aussehen:<\/p>\n<pre><code class=\"language-bash\"># Restore exact data state\ndvc checkout\n\n# Run with pinned container\ndocker run -v $(pwd):\/workspace my-analysis:1.2 python src\/run.py\n\n# Package results with provenance\nro-crate add data\/results.csv params.yaml results\/\n<\/code><\/pre>\n<h2>H\u00e4ufige Fehler<\/h2>\n<p>Dies sind h\u00e4ufige Fallstricke, wenn Forscher Datenversionierung und Provenienzverfolgung einf\u00fchren.<\/p>\n<h3>1. Verfolgen Sie jede Zwischendatei<\/h3>\n<p>Die Versionierung jeder Zwischendatei ist in der Regel unn\u00f6tig und kann sch\u00e4dlich werden. Es bl\u00e4st Speicher und Metadaten auf, ohne die Reproduzierbarkeit zu verbessern.<\/p>\n<p>Nur verfolgen:<\/p>\n<ul>\n<li>RAW-Eingaben, die die urspr\u00fcnglich erworbenen Dateien sind.<\/li>\n<li>vorverarbeitete Daten, die kuratierte Version, die tats\u00e4chlich f\u00fcr die Analyse verwendet wird.<\/li>\n<li>Endg\u00fcltige Ausgabedateien wie Abbildungen, Tabellen und ver\u00f6ffentlichte Simulationsausgaben.<\/li>\n<\/ul>\n<p>Versionieren Sie nicht jede tempor\u00e4re CSV- oder Scratch-Datei, es sei denn, es ist erforderlich, das Endergebnis zu reproduzieren.<\/p>\n<h3>2. Vergessen von Versionsparameterdateien<\/h3>\n<p>Wenn Parameter nur als Befehlszeilenargumente \u00fcbergeben werden, k\u00f6nnen sie m\u00f6glicherweise nicht nur von Git aus wiederhergestellt werden. Parameterdateien sind genauso wichtig wie Datendateien.<\/p>\n<p>versionieren sie explizit:<\/p>\n<pre><code class=\"language-bash\">dvc add configs\/params.yaml\ngit add configs\/params.yaml.dvc\n<\/code><\/pre>\n<h3>3. Angenommen, Container l\u00f6sen alles<\/h3>\n<p>Container sind wertvoll, aber sie sind nur eine Schicht. Ein Container ohne versionierte Eingaben und Provenienz reicht nicht aus, um zu beweisen, wie ein bestimmtes Ergebnis erzeugt wurde.<\/p>\n<p>Stellen Sie sich Container als die Umgebungsschicht vor. Sie ben\u00f6tigen weiterhin Datenversionierung f\u00fcr Eingaben und Provenienz-Tracking f\u00fcr den Workflow-Verlauf.<\/p>\n<h3>4. Ignorieren der Remotespeicherkonfiguration<\/h3>\n<p>DVC und DataLad funktionieren am besten, wenn der Remote-Speicher fr\u00fchzeitig konfiguriert ist. Ohne Remotes k\u00f6nnen Metadatendateien auf lokale Pfade verweisen, die beim Wechseln in einen Cluster oder eine Cloud-Umgebung verschwinden.<\/p>\n<p>Konfigurieren Sie Remotes zu Beginn des Projekts, nicht w\u00e4hrend einer Terminkrise.<\/p>\n<h2>Auswahl des richtigen Werkzeugs f\u00fcr Ihr Projekt<\/h2>\n<p>Die Werkzeuglandschaft ist vielf\u00e4ltig. Verwenden Sie dieses Entscheidungsframework als Ausgangspunkt.<\/p>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Szenario<\/th>\n<th>Empfohlenes Werkzeug<\/th>\n<th>Warum<\/th>\n<\/tr>\n<tr>\n<td>Python Machine Learning Pipeline mit Experimenten<\/td>\n<td>DVC<\/td>\n<td>Native <code>dvc exp run<\/code> Unterst\u00fctzung f\u00fcr Experiment-Tracking<\/td>\n<\/tr>\n<tr>\n<td>Gro\u00dfe wissenschaftliche Datens\u00e4tze \u00fcber Institutionen hinweg<\/td>\n<td>datalad<\/td>\n<td>Abruf bei Bedarf und Replikation von Geschwistern<\/td>\n<\/tr>\n<tr>\n<td>Publikationsfertige Artefaktverpackung<\/td>\n<td>Ro-Crate<\/td>\n<td>Leicht, tragbar und repository-freundlich<\/td>\n<\/tr>\n<tr>\n<td>Mehrstufige Pipeline mit Caching<\/td>\n<td>DVC mit <code>dvc.yaml<\/code> oder SnakeMake<\/td>\n<td>Automatische Abh\u00e4ngigkeitsaufl\u00f6sung und Wiederholungslogik<\/td>\n<\/tr>\n<tr>\n<td>Langzeitarchivierung f\u00fcr mehr als 10 Jahre<\/td>\n<td>Datalad plus Zenodo<\/td>\n<td>Git-Verlauf und persistente Kennungen<\/td>\n<\/tr>\n<\/tbody><\/table>\n<p>Sie k\u00f6nnen auch Werkzeuge kombinieren. Verwenden Sie beispielsweise DVC f\u00fcr die Datenversionierung, Docker f\u00fcr Umgebungsreproduzierbarkeit und Ro-crate, um den endg\u00fcltigen Workflow-Lauf f\u00fcr die Ver\u00f6ffentlichung zu verpacken.<\/p>\n<h2>Was macht man als n\u00e4chstes<\/h2>\n<p>Wenn Sie ein neues Projekt starten, ist der Pfad unkompliziert:<\/p>\n<ol>\n<li>Initialisieren Sie ein Git-Repository f\u00fcr den Code.<\/li>\n<li>F\u00fcgen Sie DVC mit <code>dvc init<\/code> und Versions-RAW-Datasets hinzu.<\/li>\n<li>Schreiben Sie Analyseskripte als Python-Dateien oder Bash-Skripte.<\/li>\n<li>Containerisieren Sie den Workflow mit Docker oder Singularity.<\/li>\n<li>Paketergebnisse mit Ro-Crate bei jedem wichtigen Meilenstein.<\/li>\n<\/ol>\n<p>Wenn Sie an einem bestehenden Projekt arbeiten, beginnen Sie klein:<\/p>\n<ol>\n<li>F\u00fcgen Sie DVC zum Repository- und Versionsschl\u00fcssel-Datasets hinzu.<\/li>\n<li>Schreiben Sie eine <code>dvc.yaml<\/code>-Datei, die die Pipeline beschreibt.<\/li>\n<li>Containerisieren Sie den Hauptausf\u00fchrungsschritt.<\/li>\n<li>Erstellen Sie ein Ro-Crate-Archiv f\u00fcr das wichtigste Ergebnis.<\/li>\n<\/ol>\n<p>Mit diesem inkrementellen Ansatz k\u00f6nnen Sie Reproduzierbarkeitsschichten hinzuf\u00fcgen, ohne das gesamte Projekt neu zu schreiben.<\/p>\n<h2>Verwandte Anleitungen<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/versioning-reproducibility-and-why-research-software-teams-face-integrity-issues-too\/\">Versionierung und Integrit\u00e4t in der Forschungssoftware <\/a> - Ein umfassenderer Blick auf Versionskontrolle, Reproduzierbarkeit und R\u00fcckverfolgbarkeit von Workflows f\u00fcr Forschungssoftwareteams.<\/li>\n<li><a href=\"https:\/\/matforge.org\/python-debugging-scientific-code-print-statements-profiling\/\"> Python-Debugging f\u00fcr wissenschaftlichen Code <\/a> - Debugging-Muster, die neben reproduzierbaren Workflows funktionieren.<\/li>\n<\/ul>\n<p>Dieser Artikel behandelt die Datenversionierung und Provenienzverfolgung als praktische Werkzeuge f\u00fcr reproduzierbare wissenschaftliche Workflows. DVC, Datalad und Ro-Crate werden aktiv gepflegt und im wissenschaftlichen Python-\u00d6kosystem weit verbreitet. Die neuesten Setup-Details finden Sie immer in der offiziellen Dokumentation f\u00fcr jedes Werkzeug.<\/p>\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\"> 7<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Schl\u00fcssel zum Mitnehmen Container l\u00f6sen ein Problem. Sie frieren die Softwareumgebung ein, verfolgen jedoch nicht, was sich in Ihren Daten ge\u00e4ndert hat oder wie sich Ihre Analyse entwickelt hat. Datenversionierung f\u00fcgt eine fehlende Ebene hinzu. Tools wie DVC und DataLad bringen die Versionskontrolle im Git-Stil in Datasets und erleichtern die Wiedergabe von Ergebnissen mit exakten [&hellip;]<\/p>\n","protected":false,"raw":""},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"de_DE","_original_post":"https:\/\/matforge.org\/?p=366","iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-855","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.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Reproduzierbarkeit \u00fcber Container hinaus<\/title>\n<meta name=\"description\" content=\"Erfahren Sie, wie Datenversionierung und Provenienzverfolgung reproduzierbare wissenschaftliche Workflows \u00fcber Docker- und Singularity-Container hinaus verbessern.\" \/>\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\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reproduzierbarkeit \u00fcber Container hinaus\" \/>\n<meta property=\"og:description\" content=\"Erfahren Sie, wie Datenversionierung und Provenienzverfolgung reproduzierbare wissenschaftliche Workflows \u00fcber Docker- und Singularity-Container hinaus verbessern.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:22:24+00:00\" \/>\n<meta name=\"author\" content=\"Elena Markovska\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elena Markovska\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/\"},\"author\":{\"name\":\"Elena Markovska\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\"},\"headline\":\"Reproduzierbarkeit Workflows \u00fcber Container hinaus: Datenversionierung und Provenienzverfolgung\",\"datePublished\":\"2026-07-30T12:22:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/\"},\"wordCount\":2031,\"commentCount\":0,\"articleSection\":[\"Simulation & amp; Modellierungsprojekte\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/\",\"name\":\"Reproduzierbarkeit \u00fcber Container hinaus\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-30T12:22:24+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/980162bb5de46742daece973661d93da\"},\"description\":\"Erfahren Sie, wie Datenversionierung und Provenienzverfolgung reproduzierbare wissenschaftliche Workflows \u00fcber Docker- und Singularity-Container hinaus verbessern.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reproduzierbarkeit Workflows \u00fcber Container hinaus: Datenversionierung und Provenienzverfolgung\"}]},{\"@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\\\/980162bb5de46742daece973661d93da\",\"name\":\"Elena Markovska\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g\",\"caption\":\"Elena Markovska\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/elena-markovska\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reproduzierbarkeit \u00fcber Container hinaus","description":"Erfahren Sie, wie Datenversionierung und Provenienzverfolgung reproduzierbare wissenschaftliche Workflows \u00fcber Docker- und Singularity-Container hinaus verbessern.","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\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/","og_locale":"de_DE","og_type":"article","og_title":"Reproduzierbarkeit \u00fcber Container hinaus","og_description":"Erfahren Sie, wie Datenversionierung und Provenienzverfolgung reproduzierbare wissenschaftliche Workflows \u00fcber Docker- und Singularity-Container hinaus verbessern.","og_url":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/","og_site_name":"matforge.org","article_published_time":"2026-07-30T12:22:24+00:00","author":"Elena Markovska","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Elena Markovska","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/"},"author":{"name":"Elena Markovska","@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da"},"headline":"Reproduzierbarkeit Workflows \u00fcber Container hinaus: Datenversionierung und Provenienzverfolgung","datePublished":"2026-07-30T12:22:24+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/"},"wordCount":2031,"commentCount":0,"articleSection":["Simulation & amp; Modellierungsprojekte"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/","url":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/","name":"Reproduzierbarkeit \u00fcber Container hinaus","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-30T12:22:24+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/980162bb5de46742daece973661d93da"},"description":"Erfahren Sie, wie Datenversionierung und Provenienzverfolgung reproduzierbare wissenschaftliche Workflows \u00fcber Docker- und Singularity-Container hinaus verbessern.","breadcrumb":{"@id":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/de\/reproducibility-workflows-beyond-containers-data-versioning-and-provenance-tracking\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/de\/"},{"@type":"ListItem","position":2,"name":"Reproduzierbarkeit Workflows \u00fcber Container hinaus: Datenversionierung und Provenienzverfolgung"}]},{"@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\/980162bb5de46742daece973661d93da","name":"Elena Markovska","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2de4e35b6581d7d8a839335156c6b5834cfaa0aef537a1c837e882dc57eea1e7?s=96&d=mm&r=g","caption":"Elena Markovska"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/elena-markovska\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/855","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=855"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/855\/revisions"}],"predecessor-version":[{"id":953,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/855\/revisions\/953"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}