> DIO/ Calcul/ SLURM

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