Script SLURM en dépeuplé

Pour des raisons de besoins mémoire par processus MPI ou de nombre de processus MPI égal à une puissance de 2, il peut être intéressant ou nécessaire de déployer sur chaque nœud un nombre de processus MPI inférieur à 36 (sachant que les noœuds d’Olympe disposent de 36 cœurs physiques).

Attention : la mesure des heures cpu consommées ne tient pas compte du dépeuplement; le nœud étant alloué de manière exclusive on comptabilise l’ensemble des ressources bloquées (soit 36 cœurs par nœud multiplié par le nombre de nœuds).

Ci-dessous nous traitons une demande pour 512 processus MPI sur 16 nœuds d’Olympe.

Réservation des ressources:

#! /bin/bash
#SBATCH -J Depeuple
#SBATCH -N 16
#SBATCH -n 512
#SBATCH --ntasks-per-node=32 #SBATCH --ntasks-per-core=1

ATTENTION: Ce sont bien les 576 cœurs physiques des 32 nœuds qui sont réservés par la requête.

Création d’un dossier temporaire de calcul:

dirname=$SLURM_JOBID
mkdir /tmpdir/$LOGNAME/$dirname
cp mes_inputs  /tmpdir/$LOGNAME/$dirname
cd /tmpdir/$LOGNAME/$dirname

Votre script:

Chargement des modules nécessaires à  l'exécution du script (et uniquement ces modules). Ci-dessous exemple pour l'environnement par défaut d'Olympe (Intel, mpi).

module purge
module load intel/18.2 intelmpi/18.2
module list

La commande placement ci-dessous, avec les arguments '32' et '1', permet de répartir les 32 processus de manière équilibrée sur les deux sockets du nœud. Le nombre 32 correspond au nombre de processus par nœud, le nombre 1 au nombre de threads par processus (ici 1).

srun $(placement 32 1) ./mon_appli.exe > output_${SLURM_JOBID}.log

Rapatriement des résultats sous votre home directory:

mv mes_outputs $SLURM_SUBMIT_DIR

 

Voir aussi

Script SLURM pour une réservation de PLUS de 18 cœurs

Écrire un script pour un code utilisant plus de 18 cœurs

L’outil placement

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).