[PYTHON] L'extension de tâches de Luigi pour rendre votre flux de travail plus reproductible

J'ai écrit un article "Pour améliorer la réutilisabilité et la maintenabilité des workflows créés avec Luigi" (http://qiita.com/ngr_t/items/b928bc13457571e25519). Parmi eux, [vérifiez les horodatages d'entrée / sortie dans la méthode complète](http://qiita.com/ngr_t/items/b928bc13457571e25519#complete-%E3%83%A1%E3] pour maintenir la cohérence du résultat. % 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) ou [complete renvoie toutes les vraies tâches dépendantes Vérifiez si](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-complet-% E3% 81% 8C% E3% 81% 99% E3% 81% B9% E3% 81% A6-vrai- % 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 J'ai écrit sur l'importance de dire% 82% AF% E3% 81% 99% E3% 82% 8B).

Par défaut, Luigi détermine uniquement la fin d'une tâche "s'il y a ou non une sortie", ce qui n'est pas pratique du point de vue de produire des résultats de calcul cohérents, veuillez donc noter les points ci-dessus. Vous devrez payer. Pour cette raison, j'ai essayé de faire une extension de "Task" "pour la science des données" en mettant davantage l'accent sur la reproductibilité des résultats. Il se trouve dans le référentiel suivant.

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

Je n'ai pas écrit de script de configuration, mais cela dépend actuellement du module Portalocker (et bien sûr de Luigi), alors insérez-le simplement.

Comment utiliser

Une saucisse

  1. Créez une tâche en héritant de hash_checking_tasks.TaskWithCheckingInputHash.
  2. Effectuez toutes les tâches d'entrée / sortie de tâche qui implémentent correctement hash_checking_tasks.HashableTarget.
  3. Exécutez.

Ce sera.

Comment ça marche?

TaskWithCheckingInputHash étend Task comme suit:

Le traitement tel que la génération de valeurs de hachage spécifiques est laissé à «HashableTarget». HashableTarget est implémenté de manière à pouvoir effectuer les opérations suivantes.

J'ai écrit dans un article précédent que "vérifier l'horodatage", mais ce qui est important ce n'est pas la date mais l'équivalence des entrées et sorties. N'est-il pas préférable de vérifier la valeur de hachage? J'ai reconsidéré cela après avoir écrit cet article. Cependant, lorsqu'il s'agit de vérifier la valeur de hachage, il est inévitablement nécessaire de conserver la valeur de hachage quelque part, ce qui est un problème légèrement compliqué. HashableLoaclTarget enregistre le fichier cible dans le chemin avec le suffixe" input.pickle ", mais il ne gère pas le cas où ce nom est en conflit.

Je pense qu'il y a encore beaucoup de choses à faire, alors jetez Masakari par tous les moyens.

Recommended Posts

L'extension de tâches de Luigi pour rendre votre flux de travail plus reproductible
Faisons un noyau jupyter
Bases de PyTorch (2) -Comment créer un réseau de neurones-