[PYTHON] Luigis Task-Erweiterung, um Ihren Workflow reproduzierbarer zu machen

Ich schrieb einen Artikel "Zur Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows" (http://qiita.com/ngr_t/items/b928bc13457571e25519). Unter diesen [überprüfen Sie die Eingabe- / Ausgabezeitstempel in der vollständigen Methode](http://qiita.com/ngr_t/items/b928bc13457571e25519#complete-%E3%83%A1%E3], um die Konsistenz des Ergebnisses aufrechtzuerhalten. % 82% BD% E3% 83% 83% E3% 83% 89% E3% 81% A7% E3% 81% AF% E5% 85% A5% E5% 87% BA% E5% 8A% 9B% E3% 81 % AE% E3% 82% BF% E3% 82% A4% E3% 83% A0% E3% 82% B9% E3% 82% BF% E3% 83% B3% E3% 83% 97% E3% 82% 92 % E3% 83% 81% E3% 82% A7% E3% 83% 83% E3% 82% AF% E3% 81% 99% E3% 82% 8B) oder [vollständig gibt alle wirklich abhängigen Aufgaben zurück Überprüfen Sie, ob](http://qiita.com/ngr_t/items/b928bc13457571e25519#complete-%E3%81%A7%E3%81%AF%E4%BE%9D%E5%AD%98%E3%82 % BF% E3% 82% B9% E3% 82% AF% E3% 81% AE-vollständig-% E3% 81% 8C% E3% 81% 99% E3% 81% B9% E3% 81% A6-wahr- % E3% 82% 92% E8% BF% 94% E3% 81% 99% E3% 81% 8B% E3% 82% 92% E3% 83% 81% E3% 82% A7% E3% 83% 83% E3 Ich schrieb über die Wichtigkeit,% 82% AF% E3% 81% 99% E3% 82% 8B) zu sagen.

Standardmäßig bestimmt Luigi das Ende einer Aufgabe nur als "ob es eine Ausgabe gibt oder nicht", was unter dem Gesichtspunkt der Erstellung konsistenter Berechnungsergebnisse unpraktisch ist. Achten Sie daher auf die obigen Punkte. Sie müssen bezahlen. Aus diesem Grund habe ich versucht, "Task" für Data Science zu erweitern, wobei die Reproduzierbarkeit der Ergebnisse stärker betont wurde. Es befindet sich im folgenden Repository.

https://github.com/ngr-t/luigi_for_data_science

Ich habe kein Setup-Skript geschrieben, aber es hängt derzeit vom Portalocker-Modul (und natürlich von Luigi) ab.

Wie benutzt man

Eine Wurst

  1. Erstellen Sie eine Aufgabe, indem Sie "hash_checking_tasks.TaskWithCheckingInputHash" erben.
  2. Führen Sie alle Aufgaben-Eingabe- / Ausgabeaufgaben aus, die hash_checking_tasks.HashableTarget ordnungsgemäß implementieren.
  3. Ausführen.

Es wird sein.

Wie funktioniert es

TaskWithCheckingInputHash erweitert Task wie folgt:

--Überprüfen Sie, ob die Methode complete () aller abhängigen Tasks True zurückgibt.

Die Verarbeitung wie das Generieren spezifischer Hash-Werte bleibt "HashableTarget" überlassen. HashableTarget ist implementiert, damit es die folgenden Operationen ausführen kann.

Ich habe in einem früheren Artikel geschrieben, dass "Überprüfen Sie den Zeitstempel", aber was wichtig ist, ist nicht das Datum, sondern die Äquivalenz von Eingabe und Ausgabe. Ist es nicht besser, den Hashwert zu überprüfen? Ich habe das nach dem Schreiben dieses Artikels noch einmal überdacht. Wenn Sie jedoch den Hash-Wert überprüfen möchten, müssen Sie den Hash-Wert zwangsläufig irgendwo aufbewahren, was ein etwas kompliziertes Problem darstellt. HashableLoaclTarget speichert die Zieldatei im Pfad mit dem Suffix" input.pickle ", behandelt jedoch nicht den Fall, in dem dieser Name in Konflikt steht.

Ich denke, dass es noch viele Dinge zu tun gibt, also werfen Sie bitte Masakari auf jeden Fall.

Recommended Posts

Luigis Task-Erweiterung, um Ihren Workflow reproduzierbarer zu machen
Machen wir einen Jupyter-Kernel
Grundlagen von PyTorch (2) - Wie erstelle ich ein neuronales Netzwerk?