L’outil placement
Article mis en ligne le 7 décembre 2018

placement est une commande permettant de générer les arguments de placement de processus et de threads pour srun, et de vérifier le placement des threads d’un job en cours d’exécution

Contrôler le placement d’un job hybride

Il est particulièrement important de contrôler le placement de ses threads dans le cas d’un job hybride (openmp + mpi).

Cas d’utilisation : Un exécutable mpi sur Olympe utilise 4 processus par nœud, chaque processus utilise 8 threads. On souhaite que chaque processeur d’Olympe exécute deux processus, 16 cœurs de calcul seront donc utilisés sur chaque processeur.

Vérifier ce qui va se passer (en théorie) :

  • Le premier paramètre (4) est le nombre de processus
  • Le second paramètre (8) est le nombre de threads par processus
  • Le switch (--ascii) entraîne un affichage en "art ascii", c’est-à-dire une représentation visuelle du placement sur les deux processeurs, uniquement pour un contrôle rapide.

Générer les switches qui vont bien pour srun :

  • Les deux premiers paramètres sont inchangés
  • Les switches srun sont la sortie par défaut de placement.

Dans le script sbatch, appeler son exécutable par srun avec le bon placement :

  • Les paramètres 4 et 8 sont superflus à condition que la réservation slurm ait été faite correctement, avec les balisew #SBATCH --tasks_per_node et #SBATCH --cpus_per_task
  • La syntaxe bash $() remplace ce qui est à l’intérieur des parenthèses par la sortie de la commande, donc ici par le switch srun --cpu_bind ...

Vérifier que le placement est correct

Lorsque le job est en exécution, il est utile de vérifier que le placement est correct :

On voit ici que :

  • Le placement des threads de chaque processus correspond à ce que l’on souhaite
  • La mémoire des processus est allouée sur les bancs connectés au bon processeur

Vérifier l’utilisation du GPU

Lorsqu’un job est exécuté sur un nœud GPU il est également utile de vérifier que les GPUSs sont effectivement utilisés :

On voit ici que :

  • Les quatre GPUs du nœud sont utilisés
  • Les processus A,B,C,D communiqueront chacun avec un GPU
  • Le placement des processus C et D n’est pas optimal puisqu’ils doivent communiquer avec les GPUs se trouvant connectés sur un autre CPU que celui sur lequel ils tournent. [1]

La documentation de placement

La documentation complète de placement peut se lire par :

L’aide rapide est accessible par :

On peut trouver d’autres informations sur le wiki de placement