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 :
|
|
Nom du job |
|
|
Nombre de nœuds |
|
|
Nombre de tâches MPI |
|
|
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) |
|
|
Nombre de tâches MPI par cœur (Valeur à laisser à 1) |
|
|
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.) |
|
|
Le fichier dans lequel sera écrit la sortie standard |
|
|
Le fichier dans lequel seront écrits les messages d’erreur |
|
|
Le temps maximum pour lequel le job va tourner (Passé ce délai, le job est automatiquement arrêté.) |
|
|
Adresse mail à laquelle recevoir les notifications |
|
|
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 purgemodule load intel/18.2 intelmpi/18.2module 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.hostsExpandNodeList -r -p $SLURM_NTASKS_PER_NODE $SLURM_NODELIST > machine_filempdboot -v -n $SLURM_NNODES -f mpd.hosts -r sshmpiexec -machinefile machine_file -np $SLURM_NTASKS ./mon_appli.exe > output_${SLURM_JOBID}.logmpdallexitrm 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 purgemodule load intel/18.2 openmpi/icc/2.0.2.10module 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}