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 partition, 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 documentation complète de SLURM est ici.
Les partitions disponibles au mésocentre :
Les ressources matérielles sont regroupées en partitions. Chaque partition agrégeant des machines ayant des caractéristiques communes, une même ressource pouvant appartenir à plusieurs partition.
Nom de la Partition | Nom des nœuds | Type de machine | Nom du scratch |
---|---|---|---|
skylake | skylake[001-158] | PowerEdge C6420 | /scratch, /scratchfast |
dev | dev[01-02] | PowerEdge C6420 | /scratch, /scratchfast |
smp-opa | smp005 | PowerEdge R940 | /scratch, /scratchfast |
kepler | gpu[004-010] | PowerEdge C4130 | /scratch, /scratchfast |
pascal | gpu[011-012] | PowerEdge C4130 | /scratch, /scratchfast |
volta | gpu[013-017] | PowerEdge C4140 | /scratch, /scratchfast |
visu | visu001 | PowerEdge R740 | /scratch, /scratchfast |
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_JOB_ID : numéro du job.
- $SLURM_JOB_USER : utilisateur.
- $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 complète des variables est accessible à la page https://slurm.schedmd.com/archive/slurm-22.05.8/sbatch.html#lbAG.
Les commandes Slurm de base :
- sinfo : Affiche la liste des paritions.
- srun -p NOM_DE_LA_PARTITION -A PROJET --time=2:30:0 --n 4 --pty bash -i : soumission d’un job en interactif. Si les options --time et --ntasks-per-node 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 NOM_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, kepler pour les gpu…
- #SBATCH -N MIN-MAX # répartit les coeurs réservés sur minimum MIN noeuds et maximum MAX noeuds.
- #SBATCH -n N # réverve N 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 NOM_PROJET# NOM_PROJET est le projet sur lequel les heures cpu seront décomptées.
- #SBATCH -o FICHIER_D_OUTPUT# indique le nom du fichier d’output. Par exemple %j.out
- #SBATCH -e FICHIER_D_ERREUR# indique le nom du fichier d’erreur. Par exemple %j.err
- #SBATCH --mail-type=BEGIN,END # définit à quelles étapes Slurm enverra un message.
- #SBATCH --mail-user=adresse@mail  # 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 six coeurs pendant 2 heures sur les machines aux processeurs skylake
#!/bin/sh
#SBATCH -J My_job_name
#SBATCH -p skylake
#SBATCH -n 6
#SBATCH -A My_project
#SBATCH -t 2:00:00
#SBATCH -o ./%N.%x.out
#SBATCH -e ./%N.%x.err
#SBATCH --mail-type=BEGIN,END
#SBATCH --mail-user=adresse@mail
# chargement des modules
module purge
module load userspace/all
module load …
# déplacement sur le répertoire de travail
cd /scratchw/$SLURM_JOB_USER/
~
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 -n 32
#SBATCH -A My_project
#SBATCH -t 2-12
#SBATCH -o ./%N.out
#SBATCH -e ./%N.err
#SBATCH --mail-type=BEGIN,END
#SBATCH --mail-user=adresse@mail# chargement des modules
module purge
module load userspace/all
module load …
# déplacement sur le répertoire de travail
cd /scratch/$SLURM_JOB_USER/echo « Running on: $SLURM_NODELIST »
~
Pour l’utilisation de 2 gpu kepler et 10 coeurs pendant 10 heures
#!/bin/sh
#SBATCH -J Job_gpu
#SBATCH -p kepler
#SBATCH --gres=gpu:2
#SBATCH --gres-flags=enforce-binding # active l’affinité CPU:GPU
#SBATCH -n 10
#SBATCH -A My_project
#SBATCH -t 10:00:00
#SBATCH -o %x.out
#SBATCH -e %x.err
# chargement des modules
module purge
module load userspace/all
module load cuda/9.1
module load …
# déplacement sur le répertoire de travail
cd /scratch/$SLURM_JOB_USER/
~
Pour l’utilisation de /scratchfast sur coeur skylake
#!/bin/sh
#SBATCH -J Job_scratchfast
#SBATCH -p skylake
#SBATCH -n 1
#SBATCH -L scratchfast:10 #10Go
#SBATCH -A My_project
#SBATCH -t 10:00:00
#SBATCH -o %x.out
#SBATCH -e %x.err
# chargement des modules
module purge
module load userspace/all
module load …
# déplacement sur le répertoire de travail
cd /scratchfast/$SLURM_JOB_USER/$SLURM_JOB_ID/
~
Pour lancer 10 jobs identiques en parallèle utilisant chacun 4 cœurs sur 1 seul noeud
#!/bin/sh
#SBATCH -J 10_Jobs
#SBATCH -N 1
#SBATCH -A My_project
#SBATCH -n 4
#SBATCH -t 10:00:00
#SBATCH --array=0-9
#SBATCH -p skylake
#SBATCH -o Array_job.%A_%j.out
#SBATCH -e Array_job.%A_%j.err
# déplacement sur le répertoire de travail
cd /scratch/$SLURM_JOB_USER/
echo « My SLURM_ARRAY_TASK_ID: » $SLURM_ARRAY_TASK_ID
./mon_programme $SLURM_ARRAY_TASK_ID
~
Pour lancer 10 jobs paramétriques en indiquant une valeur de paramètre pour chaque job :
#!/bin/sh
#SBATCH -J Mes_Jobs_Paramétriques
#SBATCH -A My_project
#SBATCH -N 1
#SBATCH –ntasks-per-node=1
#SBATCH -t 10:00:00
#SBATCH –array=0-9%5 # 10 jobs, 5 jobs maximum tournant simultanément
#SBATCH -p skylake
#SBATCH Do Array_job.%A_%j.out
#SBATCH -e Array_job.%A_%j.err# déplacement sur le répertoire de travail
cd /scratch/$SLURM_JOB_USER/VALEURS=(0 1 1 2 3 5 8 13 21 34) # liste des paramètres (le nombre de valeurs doit correspondre au nombre de jobs)
mpirun /mon/programme ${VALEURS[$SLURM_ARRAY_TASK_ID]}
Suivi de consommation des heures allouées :
Le mésocentre alloue des heures par projet.
Un utilisateur n’a qu’un seul compte de login même lorsqu’il participe à plusieurs projets.
La commande rheticus_info liste les projets auxquels l’utilisateur participe ainsi que le décompte des heures utilisées / accordées pour chaque projet.
rheticus_info Recent jobs: [2018-09-12 16:25:28] 235851 'CDensL1.5' b032/skylake (23:42:54) [2018-09-12 16:23:28] 235850 'CDensL2Fast' b032/skylake (23:44:54) [2018-09-12 16:21:29] 235848 'CylDensL3' b073/skylake (23:46:53) [2018-09-11 14:45:15] 235733 'SXRTA005' b073/skylake (2-01:23:07) [2018-09-11 14:19:35] 235726 'S100RT15' b031/skylake (2-01:48:47) Relevant projects: b002: 30261 hours have been consumed (Used 24.2% of 125021 hours) b031: 2016 hours have been consumed (Used 2.7% of 73335 hours) b032: 944 hours have been consumed (Used 1.7% of 55723 hours) b073: 8072 hours have been consumed (Used 13.4% of 60185 hours) h111: 686 hours have been consumed (Used 3.4% of 20000 hours)