Ich bin ein Doktorand der Geophysik und arbeite mit großen Mengen von Bilddaten (Hunderte von GB, Zehntausende von Dateien). Ich kenne svn
und git
verstehe mich ziemlich gut mit einer Projekthistorie, kombiniert mit der Fähigkeit, einfach zusammenzuarbeiten und Schutz vor Festplattenbeschädigung zu haben. Ich finde es git
auch sehr hilfreich, konsistente Backups zu haben, aber ich weiß, dass git große Mengen von Binärdaten nicht effizient verarbeiten kann.
Während meines Masterstudiums arbeitete ich an Datensätzen ähnlicher Größe (auch Images) und hatte viele Probleme, die verschiedenen Versionen auf verschiedenen Servern / Geräten zu verfolgen. Das Vergleichen von 100 GB über das Netzwerk macht wirklich keinen Spaß und kostet mich viel Zeit und Mühe.
Ich weiß, dass andere in der Wissenschaft ähnliche Probleme zu haben scheinen, aber ich konnte keine gute Lösung finden.
Ich möchte die Lagerräume meines Instituts nutzen, also brauche ich etwas, das einen "dummen" Server benutzen kann. Ich hätte auch gerne ein zusätzliches Backup auf einer tragbaren Festplatte, weil ich es vermeiden möchte, Hunderte von GB über das Netzwerk zu übertragen, wo immer dies möglich ist. Ich benötige also ein Tool, das mehr als einen entfernten Standort verwalten kann.
Schließlich brauche ich wirklich etwas, das andere Forscher verwenden können, es muss also nicht sehr einfach sein, sondern sollte in wenigen Stunden erlernbar sein.
Ich habe viele verschiedene Lösungen evaluiert, aber keine scheint in die Rechnung zu passen:
- svn ist etwas ineffizient und benötigt einen intelligenten server
- hg bigfile / largefile kann nur eine Fernbedienung verwenden
- git bigfile / media kann auch nur eine fernbedienung verwenden, ist aber auch nicht sehr effizient
- Dachboden scheint kein Protokoll oder unterschiedliche Fähigkeiten zu haben
- bup sieht wirklich gut aus, benötigt aber einen "intelligenten" Server, um zu funktionieren
Ich habe versucht git-annex
, das alles zu tun, was ich brauche (und vieles mehr), aber es ist sehr schwierig zu bedienen und nicht gut dokumentiert. Ich habe es mehrere Tage lang benutzt und konnte mich nicht darum kümmern, daher bezweifle ich, dass ein anderer Mitarbeiter daran interessiert wäre.
Wie gehen Forscher mit großen Datenmengen um und was verwenden andere Forschungsgruppen?
Natürlich interessiert mich in erster Linie, wie andere Forscher mit dieser Situation umgehen, nicht nur dieser spezifische Datensatz. Es scheint mir, dass fast jeder dieses Problem haben sollte, aber ich kenne niemanden, der es gelöst hat. Sollte ich nur eine Sicherungskopie der Originaldaten aufbewahren und all diese Versionskontrollsachen vergessen? Tun das alle anderen?
quelle
Antworten:
Was ich letztendlich benutze, ist eine Art hybride Lösung:
Ich glaube, es ist selten sinnvoll, eine vollständige Überarbeitungshistorie mit einer großen Menge von Binärdaten zu haben, da die Zeit, die zum Überprüfen der Änderungen benötigt wird, irgendwann so überwältigend sein wird, dass sich dies auf lange Sicht nicht mehr auszahlt. Möglicherweise wäre ein halbautomatisches Snapshot-Verfahren (um eventuell Speicherplatz zu sparen, indem die unveränderten Daten nicht auf verschiedene Snapshots repliziert werden) hilfreich.
quelle
find . -type f -print0 | xargs -0 md5sum > checksums.md5
, um die Prüfsummen undmd5sum -c checksums.md5
Prüfsummen zu berechnen und die Versionskontrolle der Prüfsummen. Das hilft, die Daten an verschiedenen Orten / auf verschiedenen Maschinen zu überprüfen. Scheint das Beste zu sein, was wir im Moment tun könnenrsync
einer Kopie der Originaldaten. Eine andere Möglichkeit, die in den Neurowissenschaften häufig vorkommt (obwohl sie mir nicht so gut gefällt, weil sie manchmal nicht so gut dokumentiert ist, wie sie sein sollte), ist die Verwendung des Python-Pakets nipype, das als (eine Art) Workflow angesehen werden kann Manager und verwaltet den Cache von Binärdaten der Zwischenschritte der Analyse automatisch.Ich habe ähnliche Probleme mit sehr großen synthetischen Biologiedatensätzen behandelt, bei denen wir viele, viele GB Durchflusszytometriedaten haben , die auf viele, viele Tausend Dateien verteilt sind, und die konsistent zwischen Arbeitsgruppen an (mehreren) verschiedenen Institutionen verwaltet werden müssen.
Eine typische Versionskontrolle wie svn und git ist unter diesen Umständen nicht praktikabel, da sie nur nicht für diesen Dataset-Typ entwickelt wurde. Stattdessen setzen wir Cloud-Speicherlösungen ein, insbesondere DropBox und Bittorrent Sync. DropBox hat den Vorteil, dass es zumindest einige primitive Protokollierungs- und Versionskontrollen durchführt und die Server für Sie verwaltet. Der Nachteil ist jedoch, dass es sich um einen kommerziellen Dienst handelt, für den Sie viel Speicher bezahlen müssen und Ihre unveröffentlichten Daten auf ein Konto stellen kommerzielle Lagerung; Sie müssen jedoch nicht viel bezahlen, daher ist dies eine praktikable Option. Bittorrent Sync hat eine sehr ähnliche Benutzeroberfläche, die Sie jedoch selbst auf Ihren eigenen Speicherservern ausführen und die keine Versionskontrolle besitzt. Beide verletzen meine Programmierseele, aber sie sind die besten Lösungen, die meine Mitarbeiter und ich bisher gefunden haben.
quelle
Ich habe die Versionierung für Amazon S3-Buckets verwendet , um 10-100 GB in 10-100 Dateien zu verwalten. Die Übertragung kann langsam sein, daher hat es geholfen, die Daten zu komprimieren und parallel zu übertragen oder nur Berechnungen auf EC2 durchzuführen. Die Boto- Bibliothek bietet eine schöne Python-Oberfläche.
quelle
Schauen Sie sich Git Large File Storage (LFS) an . Es ist neu, könnte aber einen Blick wert sein.
Wie ich sehe, werden in einer Diskussion über Hacker News einige andere Möglichkeiten erwähnt, mit großen Dateien umzugehen:
quelle
Wir haben keine Versionskontrolle der tatsächlichen Datendateien. Wir würden es nicht einmal wollen, wenn wir es als CSV statt in binärer Form speichern würden. Wie Riccardo M. sagte, werden wir unsere Zeit nicht damit verbringen, zeilenweise Änderungen an einem Datensatz von 10 Millionen Zeilen zu überprüfen.
Stattdessen steuere ich zusammen mit dem Verarbeitungscode die Metadaten:
Dies gibt mir genügend Informationen, um zu wissen, ob sich eine Datendatei geändert hat und was sich geändert hat (z. B. Zeilen hinzugefügt / gelöscht, neue / umbenannte Spalten), ohne das VCS zu belasten.
quelle
Dies ist ein ziemlich häufiges Problem. Ich hatte diesen Schmerz, als ich Forschungsprojekte für eine Universität durchgeführt habe und jetzt - in industriellen datenwissenschaftlichen Projekten.
Ich habe ein Open-Source-Tool entwickelt und kürzlich veröffentlicht, um dieses Problem zu lösen - DVC .
Es kombiniert im Grunde Ihren Code in Git und Daten auf Ihrer lokalen Festplatte oder in Ihren Clouds (S3- und GCP-Speicher). DVC verfolgt die Abhängigkeit zwischen Daten und Code und erstellt das Abhängigkeitsdiagramm (DAG). Es hilft Ihnen, Ihr Projekt reproduzierbar zu machen.
DVC-Projekte können problemlos freigegeben werden: Synchronisieren Sie Ihre Daten mit einer Cloud (Befehl dvc sync), geben Sie Ihr Git-Repository frei und ermöglichen Sie den Zugriff auf Ihren Daten-Bucket in der Cloud.
"In wenigen Stunden lernbar" - ist ein guter Punkt. Sie sollten keine Probleme mit DVC haben, wenn Sie mit Git vertraut sind. Sie müssen wirklich nur drei Befehle lernen:
dvc init
- wiegit init
. Sollte in einem vorhandenen Git-Repository erfolgen.dvc import
- Importieren Sie Ihre Datendateien (Quellen). Lokale Datei oder URL.dvc run
- Schritte Ihres Workflows mögendvc run python mycode.py data/input.jpg data/output.csv
. DVC leitet die Abhängigkeit zwischen Ihren Schritten automatisch ab, erstellt die DAG und speichert sie in Git.dvc repro
- reproduzieren Sie Ihre Datendatei. Beispiel:vi mycode.py
- Code ändern und danndvc repro data/output.csv
die Datei (und alle Abhängigkeiten) reproduzieren.Sie müssen einige weitere DVC-Befehle erlernen, um Daten über die Cloud und grundlegende S3- oder GCP-Kenntnisse auszutauschen.
DVC-Tutorial ist der beste Ausgangspunkt - "Data Version Control: iteratives maschinelles Lernen"
quelle
Ich habe sie nicht benutzt, aber es gab eine ähnliche Diskussion in einer Finanzgruppe
Vorschläge für Daten-Repository-Software scidb , zfs, http://www.urbackup.org/
quelle
Sie können sich mein Projekt mit dem Namen DOT: Distrubuted Object Tracker Repository Manager ansehen.
Es ist ein sehr einfaches VCS für Binärdateien für den persönlichen Gebrauch (keine Zusammenarbeit).
Es verwendet SHA1 für die Prüfsumme und die Block-Deduplizierung. Vollständige P2P-Synchronisierung.
Eine einzigartige Funktion: Ad-hoc-Einmal-TCP-Server für Pull / Push.
Es kann auch SSH für den Transport verwenden.
Es ist noch nicht veröffentlicht, könnte aber ein guter Ausgangspunkt sein.
http://borg.uu3.net/cgit/cgit.cgi/dot/about/
quelle
Sie könnten versuchen, Hangar zu verwenden . Es ist ein relativ neuer Player in der Welt der Datenversionskontrolle, leistet aber wirklich gute Arbeit, indem es die Tensoren versioniert, anstatt den Blob zu versionieren. Die Dokumentation muss der beste Ausgangspunkt sein. Da die Daten als Tensoren gespeichert werden, sollten Sie sie direkt in Ihrem ML-Code verwenden können (plus Hangar verfügt jetzt über Datenlader für PyTorch und Tensorflow). Mit Hangar können Sie alle Vorteile von GIT nutzen, z. B. Verzweigung, Zusammenführung und Zeitreise durch die Geschichte. Eine nette Funktion zum Klonen im Hangar ist, dass Sie teilweise klonen können . Wenn Sie also 10 TB Daten auf Ihrer Fernbedienung haben und nur 100 MB für das Prototyping Ihres Modells benötigen, können Sie statt eines vollständigen Klons nur 100 MB durch teilweises Klonen abrufen.
quelle