Tools und Protokolle für reproduzierbare Datenforschung mit Python

50

Ich arbeite an einem datenwissenschaftlichen Projekt mit Python. Das Projekt hat mehrere Phasen. Jede Phase umfasst das Aufnehmen eines Datensatzes, das Verwenden von Python-Skripten, Hilfsdaten, Konfigurationen und Parametern sowie das Erstellen eines weiteren Datensatzes. Ich speichere den Code in Git, so dass dieser Teil abgedeckt ist. Ich würde gerne hören über:

  1. Tools zur Versionskontrolle von Daten.
  2. Werkzeuge, mit denen Stufen und Experimente reproduziert werden können.
  3. Protokoll und vorgeschlagene Verzeichnisstruktur für ein solches Projekt.
  4. Automatisierte Build / Run-Tools.
Yuval F
quelle
2
Wo ist die Frage in dieser Frage? Bitte nehmen Sie sich einen Moment Zeit, um die Richtlinien für das Hilfezentrum zu lesen, insbesondere: "Wenn Sie die Frage" Ich möchte an einer Diskussion über ______ teilnehmen "stellen, sollten Sie hier keine Fragen stellen."
Air
"Sie sollten nur praktische und beantwortbare Fragen stellen, die auf tatsächlichen Problemen beruhen."
Yuval F
Dies ist praktisch, beantwortbar und basiert auf einem tatsächlichen Problem, ähnlich wie "Erzählen Sie mir, wie man Data Science durchführt", praktisch, beantwortbar und basiert auf einem tatsächlichen Problem.
Air

Antworten:

46

Das Thema reproduzierbarer Forschung (RR) ist sehr beliebt heute und folglich ist riesig , aber ich hoffe , dass meine Antwort sein wird , umfassend genug , um als Antwort und genügend Informationen für bietet weitere Forschung , sollten Sie dies tun entscheiden.

Python-spezifische Tools für RR gibt es sicherlich, aber ich halte es für sinnvoller, sich auf universellere Tools zu konzentrieren (Sie wissen nie genau, mit welchen Programmiersprachen und Computerumgebungen Sie in Zukunft arbeiten werden). Schauen wir uns trotzdem an, welche Tools für Ihre Liste verfügbar sind.

1) Tools zur Versionskontrolle von Daten . Wenn Sie nicht vorhaben, mit (sehr) großen Datenmengen zu arbeiten , ist es wahrscheinlich sinnvoll, dieselben zu verwenden git, die Sie für die Versionskontrolle des Quellcodes verwenden. Die Infrastruktur ist schon da. Auch wenn Ihre Dateien binär und groß sind, kann dieser Rat hilfreich sein: https://stackoverflow.com/questions/540535/managing-large-binary-fileses-with-git .

2) Tools zum Verwalten von RR-Workflows und -Experimenten . Hier ist eine Liste der beliebtesten Tools in dieser Kategorie, nach meinem besten Wissen (in absteigender Reihenfolge der Beliebtheit):

BEISPIEL . Hier ist ein interessanter Artikel über wissenschaftliche Workflows mit einem Beispiel für das tatsächliche Workflow-Design und die Datenanalyse, basierend auf Kepler- und myExperiment- Projekten: http://f1000research.com/articles/3-110/v1 .

Es gibt viele RR-Tools, die ein Paradigma für die Erstellung von Lese- und Schreibprogrammen implementieren , wie beispielsweise die LaTeXSoftwarefamilie. Tools , die Hilfe bei der Erstellung von Berichten und Präsentation ist auch eine große Kategorie, wo Sweaveund knitrsind wohl die bekanntesten diejenigen. Sweaveist ein Tool, das sich auf R konzentriert, aber mit etwas mehr Aufwand in Python-basierte Projekte integriert werden kann ( https://stackoverflow.com/questions/2161152/sweave-for-python ). Ich denke, dass knitrdies eine bessere Option sein könnte, da es modern ist, umfangreiche Unterstützung durch beliebte Tools (wie RStudio) hat und sprachneutral ist ( http://yihui.name/knitr/demo/engines ).

3) Protokoll und vorgeschlagene Verzeichnisstruktur . Wenn ich richtig verstanden habe, was Sie unter Verwendung des Ausdrucks Protokoll ( Workflow ) impliziert haben , glaube ich, dass der standardmäßige RR-Datenanalyse-Workflow im Allgemeinen aus den folgenden aufeinander folgenden Phasen besteht: Datenerfassung => Datenaufbereitung (Bereinigen, Umwandeln, Zusammenführen, Abtasten) => Datenanalyse => Präsentation der Ergebnisse (Erstellung von Berichten und / oder Präsentationen). Trotzdem ist jeder Workflow projektspezifisch und daher müssen für einige bestimmte Aufgaben möglicherweise zusätzliche Schritte hinzugefügt werden.

Informationen zur Beispielverzeichnisstruktur finden Sie in der Dokumentation zum R-Paket ProjectTemplate( http://projecttemplate.net ), um Datenanalyse-Workflows und -Projekte zu automatisieren:

Bildbeschreibung hier eingeben

4) Automatisierte Build / Run-Tools . Da sich meine Antwort auf universelle (sprachneutrale) RR-Tools konzentriert, sind die beliebtesten Tools make. Lesen Sie den folgenden Artikel aus bestimmten Gründen, um ihn makeals bevorzugtes Tool zur Automatisierung von RR-Workflows zu verwenden: http://bost.ocks.org/mike/make . Sicher gibt es andere ähnliche Tools, die entweder einige Aspekte verbessern makeoder einige zusätzliche Funktionen hinzufügen. Zum Beispiel: ant(offiziell Apache Ant: http://ant.apache.org ), Maven("next generation ant": http://maven.apache.org ), rake( https://github.com/ruby/rake ) , Makepp( http://makepp.sourceforge.net). Eine umfassende Liste solcher Tools finden Sie in Wikipedia: http://en.wikipedia.org/wiki/List_of_build_automation_software .

Aleksandr Blekh
quelle
Ein Link zur Lese- und Schreibprogrammierung : Im Grunde geht es darum, den Code so zu kommentieren, dass er zu einer eigenständigen Dokumentation wird.
Gaborous
@gaborous: Ich bin mir der Bedeutung von Lese- und Schreibprogrammen bewusst und habe keine Links zum Paradigma aufgenommen, da es dafür viele Quellen gibt und diese sehr leicht zu finden sind. Trotzdem vielen Dank für Ihren Kommentar.
Aleksandr Blekh
1
Ich habe es erraten, deshalb habe ich diese Information als Kommentar für den interessierten Leser hinzugefügt :)
gaborous
4
Dies ist eine sehr umfassende Antwort, aber ich bin überrascht, dass ein Aspekt zu fehlen scheint. Die Kreuzvalidierung ist eine wichtige Komponente der meisten DS-Projekte und erfordert in der Regel eine Zufallsstichprobe, was die Reproduzierbarkeit erschwert. Ich schlage vor, dass Sie kurz denselben Startwert für Zufallsgeneratoren berühren, um Ergebnisse unabhängig von statistischen Schwankungen reproduzieren zu können. Vielen Dank!
AN6U5
@ AN6U5: Danke für nette Worte! Ich stimme zu - ich habe diesen Aspekt verpasst (+1). Bitte zögern Sie nicht, meine Antwort zu aktualisieren und relevante Kurzinformationen zur Kreuzvalidierung hinzuzufügen.
Aleksandr Blekh
24

Seit ich im akademischen Bereich forsche, bin ich ständig auf der Suche nach einem zufriedenstellenden Arbeitsablauf. Ich denke, dass ich endlich etwas gefunden habe, mit dem ich glücklich bin:

1) Alles unter Versionskontrolle stellen, zB Git:

Für Hobby-Forschungsprojekte benutze ich GitHub, für die Forschung bei der Arbeit benutze ich den privaten GitLab-Server, der von unserer Universität bereitgestellt wird. Dort behalte ich auch meine Datensätze.

2) Ich mache die meisten meiner Analysen zusammen mit der Dokumentation zu IPython-Notebooks. Es ist (für mich) sehr gut organisiert, den Code, die Zeichnungen und die Diskussion / Schlussfolgerung in einem Dokument zu haben. Wenn ich größere Skripte ausführe, füge ich sie normalerweise in separate Skript-PY-Dateien ein, aber ich führe sie trotzdem aus vom IPython-Notizbuch über% run magic, um Informationen zu Zweck, Ergebnis und anderen Parametern hinzuzufügen.

Ich habe eine kleine cell-magic-Erweiterung für IPython- und IPython-Notizbücher geschrieben, die sich "Wasserzeichen" nennt und mit der ich bequem Zeitstempel erstelle und die verschiedenen Paketversionen sowie Git-Hashes nachverfolge

Zum Beispiel


%watermark

29/06/2014 01:19:10

CPython 3.4.1
IPython 2.1.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit


%watermark -d -t

29/06/2014 01:19:11 


%watermark -v -m -p numpy,scipy

CPython 3.4.1
IPython 2.1.0

numpy 1.8.1
scipy 0.14.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit

Weitere Informationen finden Sie in der Dokumentation hier .


quelle
2
Ich mag die Magie des Wasserzeichens. Für diejenigen, die es nicht wissen, bietet GitHub jetzt bis zu 5 kostenlose private Repositories für Benutzer, die mit akademischen Institutionen in Verbindung stehen.
Bogatron
19

Das beste Werkzeug für die Reproduzierbarkeit besteht darin, ein Protokoll Ihrer Aktionen zu erstellen.

experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported

Dies kann auf einem Blatt Papier festgehalten werden. Wenn Ihre Experimente jedoch in einen Rechenrahmen passen, können Sie diesen Protokollierungsprozess mithilfe von Rechentools teilweise oder vollständig automatisieren (insbesondere, indem Sie die sehr großen Eingabedatensätze und die Ausgabe nachverfolgen Zahlen).

Ein großartiges Reproduzierbarkeitstool für Python mit einer geringen Lernkurve ist natürlich IPython / Jupyter Notebook (vergessen Sie nicht die Magie von % logon und% logstart ). Tipp: Um sicherzustellen, dass Ihr Notebook reproduzierbar ist, starten Sie den Kernel neu und versuchen Sie, alle Zellen von oben nach unten auszuführen (Schaltfläche Alle Zellen ausführen): Wenn dies funktioniert, speichern Sie alles in einer Archivdatei ("Einfrieren"), insbesondere Wenn Sie Zellen nicht linear, nicht sequenziell und nicht offensichtlich ausführen müssen, um Fehler zu vermeiden, müssen Sie ein wenig nacharbeiten.

Ein weiteres großartiges Tool, das sehr neu ist (2015), ist Recipe , das Sumatra sehr ähnlich ist (siehe unten), aber speziell für Python entwickelt wurde. Ich weiß nicht, ob es mit Jupyter-Notizbüchern funktioniert, aber ich weiß, dass der Autor sie häufig verwendet, und ich vermute, dass es in Zukunft sein wird, wenn es derzeit nicht unterstützt wird.

Git ist auch fantastisch und nicht an Python gebunden. Es wird Ihnen nicht nur helfen, einen Überblick über alle Ihre Experimente, Codes, Datensätze, Zahlen usw. zu behalten, sondern bietet Ihnen auch Werkzeuge, mit denen Sie mithilfe einer wissenschaftlichen Methode die Spitzhacke pflegen ( git - bisect ), zusammenarbeiten ( tadeln ) und Fehler beheben ( git - bisect ) können Debugging-Methode ( Delta-Debugging genannt ). Hier ist die Geschichte eines fiktiven Forschers, der versucht, sein eigenes Experimentprotokollierungssystem zu erstellen, bis es ein Faksimile von Git wird.

Ein weiteres allgemeines Werkzeug mit jeder Sprache arbeiten (mit einem Python - API auf pypi ) ist Sumatra , die speziell auf Hilfe soll Sie tun replizierbar Forschung ( replizierbar Ziele die gleichen Ergebnisse angesichts der exakt gleichen Code und Software zu produzieren, während die Reproduzierbarkeit Ziele der produzieren gleiche Ergebnisse bei jedem Medium, das viel schwieriger und zeitaufwendiger und nicht automatisierbar ist).

So funktioniert Sumatra: Für jedes Experiment, das Sie mit Sumatra durchführen, verhält sich diese Software wie ein "Speicherzustand", der in Videospielen häufig vorkommt. Genauer gesagt, wird es sparen:

  • alle von Ihnen angegebenen Parameter;
  • den genauen Quellcode-Status Ihrer gesamten experimentellen Anwendung und Konfigurationsdateien;
  • die Ausgabe / Diagramme / Ergebnisse und auch alle Dateien, die mit Ihrer experimentellen Anwendung erstellt wurden.

Anschließend wird eine Datenbank mit dem Zeitstempel und anderen Metadaten für jedes Ihrer Experimente erstellt, die Sie später mithilfe der webGUI crawlen können. Da Sumatra den vollständigen Status Ihrer Anwendung für ein bestimmtes Experiment zu einem bestimmten Zeitpunkt gespeichert hat, können Sie den Code, der zu einem bestimmten Zeitpunkt zu einem bestimmten Ergebnis geführt hat, jederzeit wiederherstellen. Auf diese Weise haben Sie reproduzierbare Nachforschungen zu geringen Kosten (mit Ausnahme der Speicherung, wenn Sie arbeiten an großen Datenmengen, können jedoch Ausnahmen konfigurieren, wenn Sie nicht jedes Mal alles speichern möchten.

Ein weiteres großartiges Tool ist GNOMEs Zeitgeist (zuvor in Python programmiert, jetzt aber in Vala portiert), ein umfassendes Action-Journaling-System, das alles aufzeichnet, was Sie tun, und das maschinelles Lernen verwendet, um die Beziehung zwischen Elementen für einen bestimmten Zeitraum zusammenzufassen zu Ähnlichkeiten und Nutzungsmustern, z. B. zur Beantwortung von Fragen wie "Was war für mich am relevantesten, als ich im letzten Jahr einen Monat an Projekt X gearbeitet habe?" . Interessanterweise hat Zim Desktop Wiki , eine Notizen-App ähnlich wie Evernote, ein Plugin für die Arbeit mit Zeitgeist.

Letztendlich können Sie entweder Git oder Sumatra oder eine beliebige andere Software verwenden, die Ihnen ungefähr die gleiche Reproduzierbarkeit bietet, aber Sumatra ist speziell auf wissenschaftliche Forschung zugeschnitten, sodass es einige ausgefallene Tools wie eine Web-GUI zum Crawlen bietet Ihre Ergebnisse, während Git eher auf die Codewartung zugeschnitten ist (aber es hat Debugging-Tools wie git-bisect. Wenn Ihre Experimente also Codes beinhalten, ist es möglicherweise sogar besser). Oder natürlich können Sie beide verwenden!

/ EDIT: dsign hat hier einen sehr wichtigen Punkt angesprochen : Die Reproduzierbarkeit Ihres Setups ist ebenso wichtig wie die Reproduzierbarkeit Ihrer Anwendung. Mit anderen Worten, Sie sollten mindestens eine vollständige Liste der von Ihnen verwendeten Bibliotheken und Compiler zusammen mit ihren genauen Versionen und den Details Ihrer Plattform bereitstellen .

Beim wissenschaftlichen Rechnen mit Python habe ich festgestellt, dass das Packen einer Anwendung zusammen mit den Bibliotheken einfach zu schmerzhaft ist. Daher verwende ich jetzt nur ein wissenschaftliches All-in-One-Python-Paket wie Anaconda (mit der großartigen Paketmanager- Conda ). und raten Sie den Benutzern, dasselbe Paket zu verwenden. Eine andere Lösung könnte darin bestehen, ein Skript zur automatischen Generierung einer virtuellen Datei bereitzustellen oder alles mit der kommerziellen Docker-Anwendung, wie von dsign oder dem OpenSource- Vagrant angegeben , zu verpacken (z. B. mit pylearn2-in-a-Box, die mithilfe von Vagrant eine leicht umverteilbare Datei erstellt Paket für die virtuelle Umgebung).

Schließlich können Sie eine virtuelle Maschine erstellen (siehe VirtualBox) und sogar den Status der Maschine (Snapshot) mit Ihrem Experiment speichern, um sicherzustellen, dass Sie jederzeit über eine voll funktionsfähige Umgebung verfügen. Dann können Sie diese virtuelle Maschine einfach mit allem, was enthalten ist, teilen, sodass jeder Ihr Experiment mit Ihrem genauen Setup replizieren kann. Dies ist wahrscheinlich der beste Weg, um ein softwarebasiertes Experiment zu replizieren. Container sind möglicherweise eine leichtgewichtigere Alternative, umfassen jedoch nicht die gesamte Umgebung, sodass die Replikationstreue weniger robust ist.

/ EDIT2: Hier ist ein großartiges Video, das zusammenfasst (zum Debuggen, aber dies kann auch für die Forschung angewendet werden), was für reproduzierbare Forschung von grundlegender Bedeutung ist: Ihre Experimente und die einzelnen Schritte der wissenschaftlichen Methode protokollieren, eine Art "explizites Experimentieren" .

mühsam
quelle
14

Achten Sie darauf, Docker zu überprüfen ! Und im Allgemeinen all die anderen guten Dinge, die das Software-Engineering über Jahrzehnte geschaffen hat, um Isolation und Reproduzierbarkeit zu gewährleisten.

Ich möchte betonen, dass es nicht genug ist , haben nur reproduzierbare Abläufe, sondern auch einfache Workflows zu reproduzieren. Lassen Sie mich zeigen, was ich meine. Angenommen, Ihr Projekt verwendet Python, eine Datenbank X und Scipy. Mit Sicherheit werden Sie eine bestimmte Bibliothek verwenden, um von Python aus eine Verbindung zu Ihrer Datenbank herzustellen, und Scipy wird wiederum einige spärliche algebraische Routinen verwenden. Dies ist auf jeden Fall eine sehr einfache Einrichtung, aber nicht ganz einfach einzurichten, beabsichtigt Wortspiel. Wenn jemand Ihre Skripte ausführen möchte, muss er alle Abhängigkeiten installieren. Oder schlimmer noch, sie hat möglicherweise bereits inkompatible Versionen davon installiert. Das zu reparieren, braucht Zeit. Es wird auch einige Zeit dauern, bis Sie Ihre Berechnungen in einen Cluster, einen anderen Cluster oder auf einige Cloud-Server verschieben müssen.

Hier finde ich Docker nützlich. Docker ist eine Möglichkeit, Rezepte für binäre Umgebungen zu formalisieren und zu kompilieren. Sie können Folgendes in ein Dockerfile schreiben (ich verwende hier nur Englisch anstelle der Dockerfile-Syntax):

  • Beginnen Sie mit einer grundlegenden Binärumgebung wie Ubuntu
  • Installieren Sie libsparse-dev
  • (Pip) Installiere numpy und scipy
  • Installieren Sie X
  • Installieren Sie libX-dev
  • (Pip) Installieren Sie Python-X
  • Installieren Sie IPython-Notebook
  • Kopieren Sie meine Python-Skripte / -Notizbücher in meine Binärumgebung, diese Datendateien und diese Konfigurationen, um andere verschiedene Dinge zu erledigen. Um die Reproduzierbarkeit zu gewährleisten, kopieren Sie sie von einer benannten URL anstelle einer lokalen Datei.
  • Führen Sie möglicherweise IPython-Notebook aus.

Einige der Zeilen werden Dinge in Python mithilfe von pip installieren, da pip eine sehr saubere Arbeit bei der Auswahl bestimmter Paketversionen leisten kann. Schau es dir auch an!

Und das ist es. Wenn Sie Ihre Docker-Datei nach dem Erstellen erstellen können, kann sie von jedem an einem beliebigen Ort erstellt werden (vorausgesetzt, sie haben auch Zugriff auf Ihre projektspezifischen Dateien, z. B. weil Sie sie in eine öffentliche URL einfügen, auf die von der Docker-Datei aus verwiesen wird). Was am besten ist, Sie können die resultierende Umgebung (als "Bild" bezeichnet) auf einen öffentlichen oder privaten Server (als "Register" bezeichnet) hochladen, damit andere Personen sie verwenden können. Wenn Sie also Ihren Workflow veröffentlichen, haben Sie sowohl ein vollständig reproduzierbares Rezept in Form einer Docker-Datei als auch eine einfache Möglichkeit für Sie oder andere Personen, Ihre Arbeit zu reproduzieren:

docker run dockerregistery.thewheezylab.org/nowyouwillbelieveme

Oder wenn sie in Ihren Skripten herumstöbern möchten:

docker run -i -t dockerregistery.thewheezylab.org/nowyouwillbelieveme /bin/bash
dsign
quelle
8

Leider habe ich nicht genug Reputationspunkte, um auf den Beitrag von Plank zu antworten, also muss ich auf den gesamten Thread antworten - tut mir leid.

Eigentlich bin ich der Entwickler des oben erwähnten Open Source Collective Knowledge Framework. Es wird versucht, die gemeinsame Nutzung von Artefakten und experimentellen Workflows als wiederverwendbare und reproduzierbare Python-Komponenten mit einer über GitHub gemeinsam genutzten einheitlichen JSON-API und JSON-Meta zu vereinfachen. Sie können mit derselben einheitlichen JSON-API auch mit Predictive Analytics verbunden werden.

Wir haben gerade die neue Version V1.8.1 veröffentlicht und eine umfangreiche Dokumentation bereitgestellt, sodass es hoffentlich einfacher ist, die Konzepte jetzt zu verstehen: http://github.com/ctuning/ck/wiki

Wir haben jetzt viele akademische und industrielle Projekte, die auf diesem Framework basieren. Sie können eines davon überprüfen - die Crowdsourcing-Programmoptimierung für mobile Geräte, die von Freiwilligen reproduzierbar bereitgestellt werden: http://cknowledge.org/repo

Wir verfolgen auch verschiedene Ressourcen in Bezug auf reproduzierbare Wissenschaft hier: https://github.com/ctuning/ck/wiki/Enabling-open-science

Obwohl ich mich hauptsächlich darauf konzentriere, die Forschung von Computersystemen reproduzierbar zu machen, hatte ich interessante Chats mit Kollegen aus anderen Bereichen und es scheint, als hätten sie sehr ähnliche Probleme. Ich würde mich sehr freuen, wenn unser Framework anderen Communities weiterhelfen könnte! Wenn Sie Fragen oder Anregungen haben, können Sie sich gerne an uns wenden!

gfursin
quelle
1
Dieser Sommerbericht über reproduzierbare Forschungsergebnisse (einschließlich Links zu verwandten Tools, Datensätzen, Artikeln und Ereignissen) könnte ebenfalls von Interesse sein: github.com/ctuning/ck/wiki/Enabling-open-science-blog-20160919
gfursin
7

Es gibt einen ganzen Kurs, der sich der reproduzierbaren Forschung widmet. https://www.coursera.org/learn/reproducible-research Dieser Kurs basiert auf R, aber die zugrunde liegende Idee kann gelernt werden.

Eine einfache Möglichkeit besteht darin, ein Ipython-Notizbuch zu haben und jede schmutzige Arbeit, die Sie ausführen, zu speichern.

RAM
quelle
6

Ich bin kürzlich auf das folgende Tool gestoßen : http://github.com/ctuning/ck . Es ist bereits in Python geschrieben und scheint zu enthalten, was Sie benötigen (mein Kollege verwendet es im Pilotprojekt, um die Bilderkennung zu automatisieren).

Vorteile:

  1. sehr klein, tragbar und anpassbar
  2. Beinhaltet einen Webserver, um Experimente zu verteilen und mithilfe von Predictive Analytics zu verarbeiten
  3. hat ein cooles Anwendungsbeispiel für die Crowdsource- und Reproduzierbarkeit der Compiler-Optimierung - http://cknowledge.org/repo

Nachteile:

  1. Ein bisschen niedriger Level - Sie müssen Ihren eigenen Workflow aus Python-Komponenten implementieren, die über GitHub mithilfe der JSON-API oder der Befehlszeile freigegeben wurden
  2. Die Dokumentation ist etwas komplex - ich hoffe sehr, dass sie bald Zeit findet, sie zu aktualisieren.
M.Plank
quelle
6

Ich habe vor kurzem ein Open-Source-Tool namens http://dvc.org oder DVC erstellt und veröffentlicht , das genau das tut, was Sie erreichen möchten:

  1. [Tools zur Versionskontrolle von Daten.] DVC arbeitet auf Git auf, fügt eine Versionskontrolle für Datendateien hinzu (Dateien werden außerhalb von Git gespeichert) und verfolgt die Abhängigkeiten zwischen dem Code und den Datendateien. DVC leitet automatisch das Abhängigkeitsdiagramm (DAG) für Code und Daten ab.
  2. [Werkzeuge, mit denen Stadien und Experimente reproduziert werden können.] dvc repro data/scores.csvReproduziert alle erforderlichen Schritte in Bezug auf DAG.
  3. [Protokoll und vorgeschlagene Verzeichnisstruktur für ein solches Projekt.] DVC benötigte ein Datenverzeichnis ( datastandardmäßig), in dem Sie alle Datendateien speichern sollten. DVC verschiebt jedoch den eigentlichen Inhalt transparent in das .cacheVerzeichnis und erstellt die Symlinks (ja, ich habe es auch für Windows gemacht). Das .cacheVerzeichnis ist nicht mit Git synchronisiert, kann jedoch per Befehl über die Cloud (S3 oder GCP) dvc sync data/scores.csvsynchronisiert werden (es synchronisiert die entsprechende Datendatei aus dem Cache wie .cache/scores.csv_29de545).
  4. [Automatisierte Build / Run-Tools.] Siehe oben.

Das DVC-Tutorial ist ein guter Ausgangspunkt - "Data Version Control: iteratives maschinelles Lernen" .

Dmitry Petrov
quelle
5

HAFTUNGSAUSSCHLUSS: Ich arbeite in einer Firma, Datmo , die ein Open-Source-Tool dafür erstellt.

Die beste Vorgehensweise für die Reproduzierbarkeit ist die folgende:

1) Containerisieren Sie Ihre Umgebung zunächst in eine Docker-Umgebung, indem Sie eine Docker-Datei erstellen und sicherstellen, dass alle Abhängigkeiten in dieser Datei abgedeckt sind. Ich fand diese Ressource am besten ( https://arxiv.org/pdf/1410.0846.pdf )

2) Sobald Sie dies haben, möchten Sie entscheiden, wo Sie alle Leistungsmetriken und -konfigurationen nachverfolgen können (damit Sie sie für zukünftige Experimente erneut aufrufen können).

3) Schreiben Sie abschließend eine Dokumentation, damit ein neuer Experimentator / Entwickler Ihren Code überprüfen, mit der Umgebung replizieren und feststellen kann, wo Sie Ihre Konfigurationen und Leistungsmetriken aufbewahrt haben.

asampat3090
quelle