5

Nous développons un outil de traitement de données pour extraire des résultats scientifiques d'un ensemble donné de données brutes. En science des données, il est très important que vous puissiez ré-obtenir vos résultats et répéter les calculs, qui ont conduit à un ensemble de résultatsComment étiqueter un outil de traitement de données scientifiques pour garantir la répétabilité

Depuis que l'outil évolue, nous avons besoin d'un moyen de savoir quelle révision/construction de notre outil généré un ensemble de résultats donné et comment trouver la source correspondante à partir de laquelle l'outil a été construit.

L'outil est écrit en C++ et Python; Coller ensemble les pièces C++ en utilisant Boost :: Python. Nous utilisons CMake comme un système de génération générant des fichiers Make pour Linux. Actuellement, le projet est stocké dans un repo de subversion, mais certains d'entre nous utilisent déjà git resp. hg et nous prévoyons de migrer l'ensemble du projet à l'un d'entre eux dans un très proche avenir. Quelles sont les meilleures pratiques dans un scénario comme celui-ci pour obtenir un mappage unique entre le code source, binaire et l'ensemble de résultats?

idées que nous discutons déjà:

  • D'une certaine façon d'injecter le nombre global de révision
  • l'aide d'un numéro de build générateur
  • Stockage de l'ensemble sourcecode l'intérieur de l'exécutable lui-même

Répondre

3

C'est un problème sur lequel je passe beaucoup de temps. A quoi @VonC a déjà écrit permettez-moi d'ajouter quelques réflexions.

Je pense que le sujet de la gestion de configuration logicielle est bien compris et souvent pratiqué avec soin dans des environnements commerciaux. Cependant, cette approche générale fait souvent défaut dans les environnements de traitement de données scientifiques, dont beaucoup restent dans le milieu universitaire ou en sont sortis. Cependant, si vous êtes dans un tel environnement de travail, il existe des sources d'informations et de conseils facilement disponibles et beaucoup d'outils pour vous aider. Je ne vais pas m'étendre là-dessus.

Je ne pense pas que votre suggestion d'inclure tout le code source dans un exécutable soit, même si cela est faisable, nécessaire.En effet, si vous obtenez SCM correctement, l'un des tests essentiels que vous avez effectués, et continuez à le faire, est votre capacité à reconstruire des «anciens» exécutables à la demande. Vous devriez également être en mesure de déterminer quelle révision des sources a été utilisée dans chaque exécutable et version. Ceux-ci devraient rendre inutile le code source dans un exécutable.

Le sujet de l'association des résultats aux calculs est également, comme vous le dites, essentiel. Voici quelques-uns des composants de la solution que nous construisons:

Nous nous éloignons du fichier texte non structuré traditionnel qui caractérise la sortie de nombreux programmes scientifiques vers des fichiers structurés, dans notre cas, nous sommes regardant HDF5 et XML, dans lequel à la fois les données d'intérêt et les métadonnées sont stockées. Les métadonnées comprennent l'identification du programme (et de la version) qui a été utilisé pour produire les résultats, l'identification des ensembles de données d'entrée, les paramètres du travail et un tas d'autres choses.

Nous avons examiné l'utilisation d'un SGBD pour stocker nos résultats; nous aimerions aller dans cette direction mais nous n'avons pas les ressources pour le faire cette année, probablement pas la prochaine fois non plus. Mais les entreprises utilisent des SGBD pour diverses raisons, et l'une des raisons est leur capacité à faire marche arrière, à fournir une piste de vérification, ce genre de chose.

Nous étudions également de près quels ensembles de résultats doivent être stockés. Une approche intéressante serait seulement de stocker les ensembles de données originaux capturés à partir de nos capteurs de champ. Malheureusement, certains de nos calculs prennent 1000s de CPU-heures à produire donc il est impossible de les reproduire ab-initio sur demande. Cependant, nous stockerons beaucoup moins de données intermédiaires à l'avenir que par le passé.

Nous rendons également beaucoup plus difficile (je voudrais penser impossible, mais je ne suis pas sûr que nous y sommes encore) pour que les utilisateurs éditent les ensembles de résultats directement. Une fois que quelqu'un fait cela, toutes les informations de provenance dans le monde sont fausses et inutiles. Pour finir, si vous voulez en savoir plus sur le sujet, essayez Google pour les sujets similaires 'workflow scientifique' et 'provenance des données'.

EDIT: On ne sait pas de ce que je l'ai écrit ci-dessus, mais nous avons modifié nos programmes afin qu'ils contiennent leur propre identification (nous utilisons les capacités de mots-clés de Subversion pour cela avec une extension ou deux de nos propres) et d'écrire ce dans toute sortie qu'ils produisent.

1

Vous devez considérer git submodules de hg subrepos.

La meilleure pratique dans ce os de scénario pour avoir une pension mère qui fera référence:

  • les sources de l'outil
  • le jeu de résultats générés par cet outil
  • idéalement le compilateur C++ (won « t évoluent tous les jours)
  • idéalement la distribution de python (ne sera pas évoluer tous les jours)

Chacun thos e sont un composant, c'est-à-dire un référentiel indépendant (Git ou Mercurial).
Une révision précise de chaque composant sera référencée par un référentiel parent.

Tout le processus est représentatif d'un component-based approach, et est la clé dans l'utilisation d'un SCM (ici Logiciel Configuration Gestion) à son plein.