Le gestionnaire de tâches SLURM
Pour une répartition optimale des jobs que vous aurez à exécuter
sur la grappe de calcul mesopsl1, nous utilisons le système de
gestion de tâches SLURM
(Simple Linux Utility for Resource Management).
Ce système permet une utilisation optimale des noeuds/processeurs
disponibles.
Ce système de batch a été organisé en plusieurs queues de
soumission :
la queue dédiée aux jobs séquentiels
- seq : 1 coeur, maximum 1j, sur le noeud 2 ;
les queues dédiées aux jobs parallèles
- short : maximum 1h, sur les noeuds 3 à 19 ;
- normal : maximum 12h, sur les noeuds 5 à 19, par défaut ;
- medium : maximum 1j, 8 noeuds sur les noeuds 12 à 19 ;
- long : maximum 5j, 4 noeuds sur les noeuds 12 à 19 ;
- verylong : maximum 15j, 2 noeuds sur les noeuds 15 à 19 ;
les queues de basse priorité dédiées aux jobs parallèles
- short_low : maximum 1h, sur les noeuds 3 à 19 ;
- normal_low : maximum 12h, sur les noeuds 5 à 19, par défaut ;
- medium_low : maximum 1j, 8 noeuds sur les noeuds 5 à 19 ;
- long_low : maximum 5j, 4 noeuds sur les noeuds 5 à 19 ;
- verylong_low : maximum 15j, 2 noeuds sur les noeuds 9 à 19 ;
Pour OpenMP, le nombre maximum de threads par noeud est de 12 (dans le cas d'un thread par coeur).
Quotas
Lors de votre demande d'accès, un quota horaire a été attribué au projet.
En cas de dépassement de quota, vous pourrez utiliser un deuxième quota d'heures en basse priorité (par défaut 20 000 h, extensible sur demande). Cela vous permettra de continuer à utiliser la grappe s'il y a de la place même après avoir épuisé vos heures.
Vous serez prévenus par mail en cas de dépassement de votre quota normal et basse priorité.
Priorités
Un job de basse priorité s'exécute s'il y a la place sur la grappe et si aucun job de plus haute priorité ne peut s'exécuter avant.
Si un job de haute priorité est lancé, alors que les ressources nécessaires sont prises par un job de basse priorité, le job de basse priorité est mis en sommeil (et en swap) pour laisser la place au job prioritaire. C'est ce qu'on appelle préemption. À la fin du job prioritaire, le job non prioritaire reprend son exécution.
Script de soumission d'un job
L'en-tête du script est de la forme :
#!/bin/sh
#SBATCH --job-name=test
#SBATCH --time=12:00:00
#SBATCH --mail-user=prenom.nom@obspm.fr --mail-type=ALL
#SBATCH --partition=medium
## Pour reserver 1 coeur
#SBATCH --ntasks=1
Ensuite vient le corps du script : recopie des fichiers dans l'espace de travail, compilation, execution...
RUNDIR=/mnt/lnec/travail/$USER/run.${SLURM_JOBID}
mkdir ${RUNDIR}
cd ${RUNDIR}
cp /obs/$USER/MonProg.f90 .
ifort MonProg.f90 -o MonProg
/usr/bin/time -o MonProg.log MonProg
Exemple de script pour un job mpi
#!/bin/sh
#SBATCH --job-name=test
#SBATCH --time=12:00:00
#SBATCH --mail-user=prenom.nom@obspm.fr --mail-type=ALL
#SBATCH --partition=medium
## Pour reserver 2 noeuds
#SBATCH --nodes=2
RUNDIR=/mnt/lnec/travail/$USER/run.${SLURM_JOBID}
mkdir ${RUNDIR}
cd ${RUNDIR}
cp /obs/$USER/MonProg.f90 .
mpif90 MonProg.f90 -o MonProg
/usr/bin/time -o MonProg.log mpirun --prefix ${NEC_MPI_ROOT} --bind-to-core -np 24 MonProg
Exemple de script pour un job openmp
#!/bin/sh
#SBATCH --job-name=test
#SBATCH --time=12:00:00
#SBATCH --mail-user=prenom.nom@obspm.fr --mail-type=ALL
#SBATCH --partition=medium
## Pour reserver 1 noeud
#SBATCH --nodes=1
export OMP_NUM_THREADS=12
RUNDIR=/mnt/lnec/travail/$USER/run.${SLURM_JOBID}
mkdir ${RUNDIR}
cd ${RUNDIR}
cp /obs/$USER/MonProg.f90 .
ifort -openmp MonProg.f90 -o MonProg
/usr/bin/time -o MonProg.log MonProg
Le nombre maximum de threads par noeud est de 12.
Les commandes de base
Voici ci-dessous quelques commandes utiles pour gérer un job depuis la frontale :
sbatch : soumission d'un job
mesopsl1:~$ sbatch MonProg.slurm Submitted batch job 1633
ou pour soumettre dans la queue séquentielle :
mesopsl1:~$ sbatch -p seq MonProg.slurm Submitted batch job 1634
scancel : destruction d'un job
mesopsl1:~$ scancel 1633
squeue : suivi d'un job
mesopsl1:~$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 1638 def MonPorg marchand R 0:05 2 noeud[003-004] 1634 def test marchand R 0:10 1 noeud003 1614 seq PDR flepetit R 2:43:36 1 noeud019
sinfo : état des partitions et des noeuds
mesopsl1:~$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST def* up infinite 1 alloc noeud018 def* up infinite 16 idle noeud[003-017,019] all up infinite 1 alloc noeud018 all up infinite 17 idle noeud[002-017,019] seq up infinite 1 alloc noeud018 seq up infinite 1 idle noeud019
squota : consultation des quotas utilisateur
mesopsl1:~$ squota Account Usage Quota Available sio 166 20000 19834 sio-low 0 20000 20000
Liste des variables d'environnement définit par SLURM lors de l'exécution d'un job :
SLURM_CHECKPOINT_IMAGE_DIR=/mnt/lnec/obs/marchand
SLURM_NODELIST=noeud[003-004]
SLURM_JOB_NAME=MonProg
SLURMD_NODENAME=noeud003
SLURM_TOPOLOGY_ADDR=noeud003
SLURM_PRIO_PROCESS=0
SLURM_TOPOLOGY_ADDR_PATTERN=node
SLURM_NNODES=2
SLURM_JOBID=1631
SLURM_TASKS_PER_NODE=12(x2)
SLURM_JOB_ID=1631
SLURM_NODEID=0
SLURM_SUBMIT_DIR=/mnt/lnec/obs/marchand
SLURM_TASK_PID=25434
SLURM_CPUS_ON_NODE=12
SLURM_PROCID=0
SLURM_JOB_NODELIST=noeud[003-004]
SLURM_LOCALID=0
SLURM_JOB_CPUS_PER_NODE=12(x2)
SLURM_GTIDS=0
SLURM_JOB_NUM_NODES=2