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

Les en-têtes

Réservation des ressources (Exemple pour 1 nœud et 36 tâches MPI)

Il faut OBLIGATOIREMENT que votre script comporte à minima les informations suivantes :

#! /bin/bash
#SBATCH -J script_art611
#SBATCH -N 1
#SBATCH -n 36
#SBATCH --ntasks-per-node=36
#SBATCH --ntasks-per-core=1
#SBATCH --time=01:00:00
#SBATCH --mail-user=toto [at] mail [dot] com
#SBATCH --mail-type=END

Dans cet exemple on réserve 1 nœud, 36 tâches MPI durant 1 heure. Le paramètre time est optionnel mais très important, si on évalue correctement le temps d’exécution on a des chances de passer plus rapidement

Options de réservation

Ci-dessous une liste non exhaustive d’options de réservation :

-J

Nom du job

-N

Nombre de nœuds

-n

Nombre de tâches MPI

--ntasks-per-node=

Nombre de tà¢ches MPI par nœud (doit correspondre au nombre de total de tâches MPI divisé par le nombre de nœuds)

--ntasks-per-core=

Nombre de tâches MPI par cœur (Valeur à laisser à 1)

--mem=

Mémoire réservée par nœud en MegaBytes (Si cette option n’est pas spécifiée en en-tête du script, la totalité de la mémoire du nœud est allouée.)

-o

Le fichier dans lequel sera écrit la sortie standard

-e

Le fichier dans lequel seront écrits les messages d’erreur

-t

Le temps maximum pour lequel le job va tourner (Passé ce délai, le job est automatiquement arrêté.)

--mail-user=

Adresse mail à laquelle recevoir les notifications

--mail-type=

Cas de figure dans lesquels le mail est envoyé : BEGIN, END, FAIL, REQUEUE, and ALL. (Si cette option n’est pas spécifiée en en-tête du script, aucun mail ne sera envoyé.)

 

Variables d'environnement

La variable suivante est nécessaire pour indiquer que chaque processus mpi n'utilise qu'un seul thread:

export OMP_NUM_THREADS=1

Création d'un dossier temporaire pour le calcul

Ce dossier se trouve sur tmpdir, espace-disque rapide à grande capacité mais non sauvegardé:

dirname=${SLURM_JOBID}
mkdir /tmpdir/${LOGNAME}/${dirname}
cp mes_inputs /tmpdir/${LOGNAME}/${dirname}
cd /tmpdir/${LOGNAME}/${dirmame}

Votre script à exécuter


Avec intel mpi

Chargement des modules nécessaires à  l'exécution du script (et uniquement ces modules). Ci-dessous l'environnement par défaut d'olympe

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

Avec la commande srun (Cas préconisé par CALMIP):

srun ./mon_appli.exe > output_${SLURM_JOBID}.log

Avec la commande mpiexec.hydra:

mpiexec.hydra ./mon_appli.exe  > output_${SLURM_JOBID}.log

Avec la commande mpiexec:

ExpandNodeList -r -p 1  $SLURM_NODELIST > mpd.hosts
ExpandNodeList -r -p $SLURM_NTASKS_PER_NODE $SLURM_NODELIST > machine_file
mpdboot -v -n $SLURM_NNODES -f mpd.hosts -r ssh
mpiexec -machinefile machine_file -np $SLURM_NTASKS  ./mon_appli.exe > output_${SLURM_JOBID}.log
mpdallexit
rm mpd.hosts machine_file

Avec la commande mpirun:

eval $(placement --intel_affinity $SLURM_NTASKS 1)
mpirun -np $SLURM_NTASKS ./mon_appli.exe

Avec openmpi

Chargement des modules nécessaires à  l'exécution du script (et uniquement ces modules)

module purge
module load intel/18.2 openmpi/icc/2.0.2.10
module list

Avec la commande srun:

srun ./mon_appli.exe > output_${SLURM_JOBID}.log

Avec la commande mpirun:

mpirun  --map-by core --bind-to core ./mon_appli.exe  > output_${SLURM_JOBID}.log

Mise en sécurité des résultats

Rapatriement des résultats sous votre home directory: Cela permettra de mettre en sécurité vos fichiers de sortie, car le home directory est sauvegardé !

mv mes_outputs ${SLURM_SUBMIT_DIR}

 

Obtenir des infos sur le job

Pour obtenir des infos sur le job (durée occupation mémoire, etc ...):

jobinfo ${SLURM_JOBID}

Voir aussi

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

Réservation des ressources (Exemple pour 5 tâches MPI et 10GB de mémoire)

Réservation des noeuds GPU

Exemple pour 1 nœud et 9 tâches et 1 GPU Il faut OBLIGATOIREMENT que votre script comporte à minima les informations suivantes :

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