Utilisation du gestionnaire de ressources Slurm

Slurm est un gestionnaire de ressources physiques pour machines multi-utilisateurs, séquentielles et parallèles. Il assure l’ordonnancement et la planification des travaux.

La soumission des jobs à Slurm se fait soit en mode interactif soit en mode batch. Lors de la soumission, Slurm indique le numéro d’identification du job qui permettra de le suivre et d’interagir avec lui.

En mode interactif, vous devrez vous connecter en ssh au premier noeud que Slurm vous aura réservé. En mode batch, il faut spécifier un script lors de la soumission qui sera exécuté sur le(s) noeud(s) réservé(s).

Les options Slurm permettent dans ces deux modes de définir des paramètres tels que : la durée du job, le nombre de nœuds, de cœurs, la quantité de mémoire, le nom du job, les noms des fichiers de sortie, etc…

La liste compète des commandes est accessible à la page https://slurm.schedmd.com/man_index.html.

Les principales variables Slurm :

Slurm utilise des variables d’environnement ($SLURM_xxxx) qui peuvent être utilisées lors de l’exécution des jobs. Les principales sont :

  • $SLURM_JOBID : numéro du job.
  • $SLURM_SUBMIT_DIR : répertoire initial de soumission.
  • $SLURM_NODELIST : fichier contenant les nœuds attribués. à utiliser par exemple pour se connecter au premier noeud alloué durant l’exécution d’un job interactif.
  • $SLURM_JOB_NAME : nom du job.
  • $SLURM_ARRAY_TASK_ID :

La liste compète des variables est accessible à la page https://slurm.schedmd.com/sbatch.html#lbAG”.

Les commandes Slurm de base :

  • sinfo : Affiche la liste des paritions.
  • srun -p NOM_DE_LA_PARTITION --time=2:30:0 -N 2 --ntasks-per-node=4 --pty bash -i : soumission d’un job en interactif. Si les options --time, -N et --ntasks-per-node=4 ne sont pas utilisées, un seul coeur sera réservé pour 30mn. Vous serez connecté en ssh au noeud alloué. Taper exit pour revenir au shell de soumission.
  • sbatch ./mon_script.slurm : soumission d’un job à partir d’un script slurm. Le script permet de définir l’environnement de travail et de manipuler les variables Slurm.
  • squeue -u NOM_DU_USER : affichage de la liste des jobs en cours. Cette commande permet en particulier de connaitre la valeur des JOB_ID de vos jobs en cours.
  • smap : affichage graphique de la liste des jobs en cours d’exécution.
  • scontrol show job JOB_ID : affichage d’informations détaillées sur le job en cours JOB_ID.
  • sacct --format=jobid,jobname,elapsed,ncpus,ntasks,start,end,state : affichage de l’historique de vos jobs. (Pour plus d’informations sur la commande sacct et son format d’affichage, vous pouvez consulter la page https://slurm.schedmd.com/sacct.html.
  • scancel JOB_ID : arrêt du job JOB_ID en cours d’exécution.
  • sacctmgr list association where users=NOM_DU_USER format=account,user,qos : permet de connaître les projets auquel l’utilisateur NOM_DU_USER participe.
  • sacctmgr show user NOM_DU_USER user,defaultaccount : permet de connaître le projet par défaut de l’utilisateur NOM_DU_USER. C’est ce projet qui sera utilisé si #SBATCH -A NUM_PROJET n’est pas précisé. Le projet par défaut peut être modifié sur simple demande auprès de l’équipe technique.

Les principales directives Slurm :

Les directives suivantes peuvent être utilisées dans les scripts de lancement et en option de la commande srun.

  • #SBATCH -J # donne un nom au job.
  • #SBATCH -p NOM_DE_LA_PARTITION  # NOM_DE_LA_PARTITION pouvant être skylake pour utiliser les noeuds fins ou kepler pour les gpu.
  • #SBATCH -N 2 # réserve 2 noeuds.
  • #SBATCH -- ntasks-per-node=10 # réverve 10 coeurs par noeud
  • #SBATCH -t JJ-HH:MM:SS # définit le walltime. Le walltime maximum est de 7 jours. Si rien n’est précisé, le walltime par défaut de 30 minutes sera utilisé. Le format doit être sous la forme “minutes”, “minutes:secondes”, “heures:minutes:secondes”, “jours-heures”, “jours-heures:minutes” ou “jour-heures:minutes:secondes”
  • #SBATCH -A NUM_PROJET# où NUM_PROJET est le projet sur lequel les heures cpu seront décomptées.
  • #SBATCH -o FICHIER_D_OUTPUT# indique la localisation du fichier d’output.
  • #SBATCH -e FICHIER_D_ERREUR# indique la localisation du fichier d’erreur.
  • #SBATCH --mail-type=BEGIN,END # définit à quelles étapes Slurm enverra un message.
  • #SBATCH --mail-user=adresse@mail&nbsp # définit à quelles étapes Slurm enverra un message.
  • #SBATCH --requeue # Cette option est à utiliser avec précaution, elle permet, en cas de problème sur un noeud en cours d’exécution d’un job, de le remettre automatiquement en queue.
  • #SBATCH --array=1-200%20 # Les job arrays permettent, dans un seul fichier batch, de générer un grand nombre de jobs similaires lancés en parallèle (1000 au maximum), en précisant éventuellement le nombres de jobs devant tourner en même temps (%x).

Exemples de script Slurm :

Pour l’utilisation de dix coeurs pendant 2 heures sur les machines aux processeurs westmere

#!/bin/sh
#SBATCH -J Job_westmere
#SBATCH -p westmere
#SBATCH --ntasks-per-node=10
#SBATCH -A b001
#SBATCH -t 2:00:00
#SBATCH -o ./%N.%j.%a.out
#SBATCH -e ./%N.%j.%a.err
#SBATCH --mail-type=BEGIN,END
#SBATCH --mail-user=adresse@mail
# chargement des modules
module purge
module load userspace/all
module load python3/3.6.3
~

Pour l’utilisation de deux noeuds pendant 2 jours et 12 heures sur les machines aux processeurs skylake

#!/bin/sh
#SBATCH -J Job_skylake
#SBATCH -p skylake
#SBATCH -N 2
#SBATCH --ntasks-per-node=32
#SBATCH -A b001
#SBATCH -t 2-12
#SBATCH -o ./%N.%j.%a.out
#SBATCH -e ./%N.%j.%a.err
#SBATCH --mail-type=BEGIN,END
#SBATCH --mail-user=adresse@mail

# chargement des modules
module purge
module load userspace/all
module load openmpi/2.1.2/2018

echo “Running on: $SLURM_NODELIST”
mpirun mon_programme
~

Pour l’utilisation de 2 gpu et 10 coeurs pendant 10 heures

#!/bin/sh
#SBATCH -J Job_gpu
#SBATCH -p gpu
#SBATCH --gres=gpu:2
#SBATCH --gres-flags=enforce-binding # active l’affinité CPU:GPU
#SBATCH --ntasks-per-node=10
#SBATCH -A b001
#SBATCH -t 10:00:00
#SBATCH -o %j.%a.out
#SBATCH -e %j.%a.err
# chargement des modules
module purge
module load userspace/all
module load cuda/9.1
~

Pour lancer 10 jobs identiques en parallèle utilisant chacun 4 cœurs

#!/bin/sh
#SBATCH -J 10_Jobs
#SBATCH -N 1
#SBATCH -A b001
#SBATCH --ntasks-per-node=4
#SBATCH -t 10:00:00
#SBATCH --array=0-9
#SBATCH -p skylake
#SBATCH -o Array_job.%A_%a.out
#SBATCH -e Array_job.%A_%a.err

echo “My SLURM_ARRAY_TASK_ID: ” $SLURM_ARRAY_TASK_ID
./mon_programme $SLURM_ARRAY_TASK_ID
~

Transition guide from OAR to SLURM.

COMMANDOARSLURM
Submit a passive/batch joboarsub -S [script]sbatch [script]
Start an interactive joboarsub -Isrun -p skylake --pty bash -i
Queue statusoarstatsqueue
User job statusoarstat -u [user]squeue -u [user]
Specific job status (detailed)oarstat -f -j [jobid]scontrol show job [jobid]
Delete (running/waiting) joboardel [jobid]scancel [jobid]
Hold joboarhold [jobid]scontrol hold [jobid]
Resume held joboarresume [jobid]scontrol release [jobid]
Node list and propertiesoarnodesscontrol show nodes

SPECIFICATIONOARSLURM
Script directive#OAR#SBATCH
Nodes request-l nodes=[count]-N [min[-max]]
Cores request-l core=[count]-n [count]
Cores-per-node request-l nodes=[ncount]/core=[ccount]-N [ncount] --ntasks-per-node=[ccount] -c 1
OR
-N [ncount] --ntasks-per-node=1 -c [ccount]
Walltime request-l [...],walltime=hh:mm:ss-t [min] OR -t [days-hh:mm:ss]
Job array--array [count]--array [specification]
Job name-n [name]-J [name]
Job dependency-a [jobid]-d [specification]
Property request-p "[property]='[value]'"-C [specification]

ENVIRONMENT VARIABLEOARSLURM
Job ID$OAR_JOB_ID$SLURM_JOB_ID
Resource list$OAR_NODEFILE$SLURM_NODELIST #List not file! See note
Job name$OAR_JOB_NAME$SLURM_JOB_NAME
Submitting user name$OAR_USER$SLURM_JOB_USER
Task ID within job array$OAR_ARRAY_INDEX$SLURM_ARRAY_TASK_ID
Working directory at submission$OAR_WORKING_DIRECTORY$SLURM_SUBMIT_DIR

Note: you can easily create a nodefile in the style of OAR, from a SLURM job with srun hostname | sort -n > hostfile.

This page is based on the excellent guide created by University of Luxembourg HPC Team.


Partenaire du projet  

Equip@Meso

mesocentre-techn@univ-amu.fr

+33 (0)4 13 55 12 15 / 55 03 33

                                     Dernière mise à jour : 9 novembre 2018