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)
$(placement -z) 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}