Lancer CHDB sur un programme lui-même mpi

chdb est [décrit ici]. Il s’agit d’un programme écrit en mpi, si l’on prend quelques précautions on peut utiliser chdb pour lancer N fois plusieurs instances d’un programme lui-même mpi

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

Les prérequis

Les mêmes que ceux décrits ici, mais en plus L’exécutable qui est lancé par chdb est lui-même un programme mpi

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

Suivant la version de mpi que vous utilisez dans votre exécutable, vous pouvez utiliser une version intelmpi ou bullxmpi de chdb. L’environnement peut donc être initialisé de deux manières différentes :

ou

La commande chdb

Tout ce qui est expliqué ici reste valable, mais il est nécessaire de spécifier aussi le switch :

  • --mpi-slaves 20 où 20 représente le nombre de processes mpi qui seront lancés sur chaque esclave

Les switchs suivants seront probablement également utiles :

  • --work-dir workdir Un chdir est effectué par chdb avant de lancer l’exécutable.
  • --create-environment Permet de recréer dans le répertoire de travail de chaque exécutable l’environnement dont il a besoin [1].

Limitations

Les exécutables lancés par chdb doivent actuellement respecter les limitations suivantes :

  • Ne pas se déployer sur plus d’un nœud de calcul, donc ne pas prendre plus de 20 cpus (ou 40 si on utilise l’hyperthreading). Par contre, le job mpi peut parfaitement utiliser moins de 20 cœurs, et dans ce cas il est possible de lancer plusieurs esclaves chdb par nœud. Voir ci-dessous pour un exemple de script d’appel dans le cas d’un exécutable mpi utilisant 10 cœurs.
  • Ne pas utiliser de variables d’environnements autres que les variables définies par les modules : en effet les exécutables mpi seront exécutés dans un environnement reconstitué à partir de la liste des modules, mais pas à partir des variables d’environnement.

Un exemple de script sbatch

Le script suivant peut être utilisé pour lancer chdb sur 2 nœuds, et déclencher l’utilisation d’un programme mpi utilisant 10 cœurs :

  • Réservation de 2 nœuds et 2 esclaves par nœud ( plus le master chdb)
    #!/bin/bash
    #SBATCH -N 2
    #SBATCH -n 5
  • Calcul du nombre d’esclaves et déclaration du nombre de processes mpi par esclave
    NSLAVES=$(( SLURM_NTASKS - 1 ))
    NTASKS_PER_SLAVE=10
  • Chargement des modules qui vont bien :
    module purge
    module load intel chdb/intelmpi un-autre-module
  • Variable d’environnement utile seulement pour srun :
    export I_MPI_PMI_LIBRARY=/usr/lib64/libpmi.so
  • Variable d’environnement utile seulement lors de l’appel chdb :
    export DATA_DIR=/chemin/vers/mes/data
  • Appel de chdb :
    srun chdb
      --in-dir input
      --out-dir output
      --on-error errors.${SLURM_JOBID}.txt
      --report report.${SLURM_JOBID}.txt
      --in-type txt
      --mpi-slaves $NTASKS_PER_SLAVE
      --work-dir %basename%
      --create-environment 'cp ${DATA_DIR}/*.in .'
      --verbose  
      --command-line "progmpi >progmpi.out"
  • Fin d’exécution
    jobinfo ${SLURM_JOBID}
    infoincidentjob

S’il y a dans le répertoire input les fichiers : 1.txt 2.txt ... 100.txt, il va se passer les choses suivantes :

  1. Création du répertoire output
  2. Pour le fichier d’entrée 1.txt création du répertoire output/1, puis chdir dans ce répertoire
  3. Copie dans le répertoire courant des fichiers *.in se trouvant dans $DATA_DIR
  4. Exécution du programme mpi progmpi avec une commande du style :
    ssh localhost "mpirun -np 10 -host localhost progmpi"
Notes :

[1Cela est utile pour certains exécutables qui ont besoin d’avoir leurs fichiers d’input dans le répertoire courant



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