Lancer un calcul "embarrassingly parallel" sur un ensemble de fichiers : CHDB

Cet article explique comment exécuter un programme unique sur un jeu de fichiers en entrée.

Article mis en ligne le 13 novembre 2014
dernière modification le 7 avril 2017
logo imprimer

Les prérequis

Cet article s’applique aux calculs ayant les caractéristiques suivantes :

  • Un exécutable séquentiel ou multithreadé [1] est appliqué de manière répétitive sur un ensemble de fichiers d’entrée
  • Les noms des fichiers d’entrée se terminent tous par la même extension
  • Il n’y a pas de dépendance entre les différents traitements
  • Il n’y a donc pas de communication entre eux
  • Il est possible de lancer plusieurs instances de l’exécutable simultanément.

Les précautions à pendre

ATTENTION - chdb est un outil très puissant : s’il y a une erreur dans votre exécutable produisant des effets néfastes pour le système, en particulier des entrées-sorties intensives, ceux-ci seront démultipliés. La règle d’or est donc la suivante :

AVANT DE LANCER UN EXÉCUTABLE AVEC chdb, VÉRIFIEZ QUE CELUI-CI FONCTIONNE CORRECTEMENT EN LE LANçANT en "STANDALONE". Si le comportement de votre exécutable est correct, alors seulement vous pouvez envisager de l’utiliser avec chdb.

Initialiser l’environnement

L’environnement doit être initialisé :

La commande chdb

chdb permet d’exécuter un programme présentant les caractéristiques ci-dessus sur un nombre arbitraire de processeurs et de nœuds.

Lire la documentation

On doit passer les paramètres suivants :

  • --in-dir Le nom du répertoire dans lequel se trouvent les fichiers d’entrée. Ce répertoire doit exister
  • --in-type L’extension des fichiers que l’on considère comme fichiers d’entrée. Par exemple txt, pdb, etc.
  • --out-files Le nom du ou des fichiers créés par la commande, pour chaque exécution de la commande le nom est bien sûr différent, on utilise des "templates" qui seront remplacés avec le nom du fichier d’entrée. S’il y a plusieurs fichiers créés, leurs noms doivent être séparés par des virgules (,)
  • --command-line La ligne de commande utilisée. Il est possible de mettre un morceau de shell complet (une série de commandes séparée par des | par exemple). La seule restriction est que cette commande doit lire un fichier en entrée, écrire un ou plusieurs fichiers en sortie. La commande doit être mise entre guillemets, sinon elle sera interprétée par le shell
  • --out-dir Le nom du répertoire contenant les fichiers de sortie. Ce répertoire ne doit pas exister au démarrage de chdb

On peut passer en outre les paramètres suivants :

  • --work-dir Avant d’exécuter la commande, chdb fera un chdir dans ce répertoire. Ce répertoire est souvent le même que —outdir, et les mêmes "templates" peuvent être utilisés.
  • --create-environment Vous pouvez entrer ici un "petit morceau" de code shell, qui sera exécuté après le chdir précédent et avant l’appel de la commande : cela vous permet par exemple de copier des fichiers d’entrée qui seraient obligatoirement présents dans le répertoire courant.
  • --sort-by-size Les fichiers présentés en entrée sont triés du plus gros au plus petit, si l’on fait l’hypothèse que le temps de traiment est proportionnel à la charge cela devrait permettre un meilleur équiibrge de la charge
  • --block-size=10 Si on met 10 par exemple, cela signifie que les process mpi traitent les fichiers par blocs de 10. Cela permet de minimiser les communications lorsque le nombre de fichiers est important. S’il y a peu de fichiers, cette option risque par contre de générer un déséquilibrage de la charge.
  • --in-files Permet de ne traiter qu’une partie des fichiers du répertoire d’entrée

En cas d’erreur dans la commande exécutée :

  • Si la commande exécutée renvoie un code d’erreur (c’est-à-dire un statut différent de zéro), le comportement par défaut de chdb est d’arrêter tout traitement.
  • On peut toutefois modifier ce comportement en spécifiant le paramètre --on-error : le nom des fichiers ayant provoqué une erreur est conservé, cela permet de relancer chdb (avec des paramètres différents).
  • Pour cela, le paramètre --in-files sera utile car il permettra de ne relancer le programme que sur les fichiers d’entrée qui ont provoqué l’erreur.

Insérer chdb dans un script slurm

Il est recommandé d’utiliser intel mpi ainsi que mpirun pour lancer cette commande. Le script suivant permet de lancer chdb sur 1 nœud, en utilisant 20 cœurs par nœud (voir aussi ici)

Un exemple d’utilisation

Téléchargez l’archive ci-dessous, décompactez-la sur votre compte sur eos, vous pourrez vous familiariser simplement avec chdb : le programme molscript est utilisé pour générer des fichiers postcripts à partir d’un ensemble de fichiers pdb

Notes :

[1Pour des exécutables eux-mêmes mpi, voir plutôt cet article

Téléchargements Fichier à télécharger :
  • molscript via chdb
  • 2.3 Mo / TGZ


Site réalisé sous SPIP
avec le squelette ESCAL-V3
Version : 3.86.44
Hébergeur : INP Toulouse