Slurm

SLURM est un job scheduler. Son rôle est de gérer la file d'attente et de lancer les calculs lorsque les ressources demandées sont disponibles.

Les partitions

Les différents nœuds de calcul sont regroupés selon des partitions. Lors de la soumission d'un job, il faut choisir une partition.

Les partitions à disposition sont les suivantes :

  • std : Comprend l'ensemble des nœuds CPU disponibles.
  • gpu : Comprend l'ensemble des nœuds GPU disponibles.
  • myXXX : Partitions cpu/gpu accessibles aux contributeurs (utilisateurs ayant financés des nœuds).

Pour lister les partitions tapez la commande $ sinfo

[cal01@vm-support01 explor-support]$ sinfo
PARTITION AVAIL    AVAIL_FEATURES   NODES   NODES(A/I/O/T) NODELIST
std          up BROADWELL,OPA,INT     121     107/10/4/121 cna[02-17,19-39,41-64],cnb[01-08,10-12,14-52,54-55,57-64]
std          up SKYLAKE,OPA,INTEL      48       31/17/0/48 cnc[01-48]
std          up SKYLAKE,OPA,INTEL      12         3/9/0/12 cnc[53-64]
std          up IVY,IB,INTEL,NOPR      12         8/4/0/12 cnd[01-12]
std          up BROADWELL,INTEL,H      16        1/15/0/16 cne[01-16]
std          up SKYLAKE,OPA,INTEL       8          1/7/0/8 cnf[01-08]
std          up CASCADELAKE,OPA,I      12        2/10/0/12 cng[01-12]
std          up CASCADELAKE,OPA,I       2          0/2/0/2 cnh[01-02]
std          up CASCADELAKE,IB,IN      28        5/23/0/28 cni[01-24,29-32]
std          up CASCADELAKE,IB,IN       4          3/1/0/4 cni[25-28]
std          up EPYC3,IB,AMD,NOPR      64       47/17/0/64 cnj[01-64]
std          up CASCADELAKE,IB,IN       8          0/8/0/8 cnk[01-08]
std          up      EPYC4,IB,AMD       2          0/2/0/2 cnl[02-03]
std          up EPYC4,IB,AMD,NOPR       1          1/0/0/1 cnl01
gpu          up BROADWELL,OPA,P10       6          6/0/0/6 gpb[01-06]
gpu          up BROADWELL,OPA,GTX       4          3/1/0/4 gpc[01-04]
gpu          up CASCADELAKE,OPA,T       3          3/0/0/3 gpd[01-03]
gpu          up CASCADELAKE,IB,RT       2          1/1/0/2 gpe[01-02]
gpu          up CASCADELAKE,L40,I       1          0/1/0/1 gpf01
(A/I/O/T): (allocated/idle/other/total)

Lister les jobs soumis

Pour lister les jobs soumis taper la commande $ squeue

[cal01@vm-support01 ~]$ squeue
             JOBID PARTITION     NAME     USER  ACCOUNT ST       TIME  NODES          QOS NODELIST(REASON)
           1047837       gpu  CoFe-Nv    xfb86    cit51 PD       0:00      1 qos_01_16-00 (Resources)
           1048214       gpu     Test    gnl27    hwn86  R   13:31:04      1 qos_01_16-00 gpc01
           1048329       gpu N_tim_ps    rgz30    efv45  R    2:02:43      1 qos_01_16-00 gpb06
           1047749       gpu   pestis    rgz30    efv45  R 2-04:52:27      1 qos_01_16-00 gpb01
           1046378       gpu  N_15dhz    rgz30    efv45  R 2-09:37:47      1 qos_01_16-00 gpb04
           1046377       gpu  N_10dhz    rgz30    efv45  R 2-09:38:59      1 qos_01_16-00 gpb03
           1047836       gpu  CoFe-Nv    xfb86    cit51  R 1-10:25:41      1 qos_01_16-00 gpb05
           1044080       gpu N_CBU_Z_    rgz30    efv45  R 3-09:17:28      1 qos_01_16-00 gpb02
           1044099       gpu  CoFe-Nv    xfb86    cit51  R 3-08:25:57      1 qos_01_16-00 gpe02
           1025352       std   0Ni_3N    mdl69    gzc01 CG 1-20:08:41      1 qos_08_04-00 cnj08
           1040704       std Fe2-TiO2    zbs34    iwj80 CG       4:56      1 qos_04_08-00 cnj48
           1040703       std Fe2-TiO2    zbs34    iwj80 CG       5:18      1 qos_04_08-00 cnj39
           1006501       std IrO2bulk    zbs34    iwj80 CG 8-00:00:17      1 qos_04_08-00 cnj16
           1048549       std VlemGril    fnk38    zmc46 PD       0:00      1 qos_01_16-00 (Resources)
           1048545       std      mpi    rhq14    bcc72 PD       0:00      4 qos_04_08-00 (Priority)
           1048334       std     1100    uwp08    nwe89 PD       0:00     16 qos_16_04-00 (Priority)
           1048421       std      800    uwp08    nwe89 PD       0:00     16 qos_16_04-00 (Priority)

en mode graphique, vous pouvez également taper la commande $ sview.

Soumission d'un job

Pour soumettre un job lancer la commande :

$ sbatch script.slurm

Avant de soumettre un job vous devez au préalable charger les modules nécessaires.

Quelques exemples de scripts de soumission :

Exemple : calcul de 3 jours mono-processeur

#!/bin/bash
## Partition
#SBATCH -p std
## Nombre de noeuds
#SBATCH -N 1  
## Nom du job
#SBATCH -J mono-proc
## Nombre de taches demandés
#SBATCH -n 1
#SBATCH -t 3-00:00:00
#SBATCH --mail-type=ALL
#SBATCH --mail-user=votremail@univ-lorraine.fr

module purge
module load gcc/7.1.0

## Creating temporary directory in $SCRATCHDIR
WORKDIR=$SCRATCHDIR/job.$SLURM_JOB_ID.$USER
mkdir -p $WORKDIR

## Copying files to $WORKDIR 
cp -rf input executable  $WORKDIR

## Moving to $WORKDIR
cd $WORKDIR
## Calculation
srun executable < input

## Copying back files to submit directory
cp -rf * $SLURM_SUBMIT_DIR/.

Exemple : calcul de 8 jours et 30 min avec OpenMP sur 8 cœurs

#!/bin/bash
#SBATCH -N 1  
#SBATCH -p std
#SBATCH -J openmp
## Nombre de cpu par tache
#SBATCH -c 8
#SBATCH -t 8-00:30:00
#SBATCH --mail-type=ALL
#SBATCH --mail-user=votremail@univ-lorraine.fr

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

module purge
module load intel/2018.0.128 mkl/2018.0.128


## Creating temporary directory in $SCRATCHDIR
WORKDIR=$SCRATCHDIR/job.$SLURM_JOB_ID.$USER
mkdir -p $WORKDIR

## Copying files to $WORKDIR 
cp -rf input executable  $WORKDIR

## Moving to $WORKDIR
cd $WORKDIR
## Calculation
srun executable < input

## Copying back files to submit directory
cp -rf * $SLURM_SUBMIT_DIR/.

Exemple : calcul de 15 jours et 3 heures avec MPI sur 2 nœuds, 32 cœurs chacun

#!/bin/bash

#SBATCH -N 2  
#SBATCH -p std
#SBATCH -J mpi
## Nombre de taches demandés
#SBATCH -n 64 
## Nombre de taches demandés par nœud
#SBATCH --ntasks-per-node=32
#SBATCH -t 15-03
#SBATCH --mail-type=ALL
#SBATCH --mail-user=votremail@univ-lorraine.fr

module purge
module load intel/2018.0.128  intelmpi/2018.0.128 mkl/2018.0.128

## Creating temporary directory in $SCRATCHDIR
WORKDIR=$SCRATCHDIR/job.$SLURM_JOB_ID.$USER
mkdir -p $WORKDIR

## Copying files to $WORKDIR 
cp -rf input executable  $WORKDIR

## Moving to $WORKDIR
cd $WORKDIR
## Calculation
srun executable < input

## Copying back files to submit directory
cp -rf * $SLURM_SUBMIT_DIR/.

Exemple : Calcul de 30min OpenMP + MPI sur 2x32 cœurs

#!/bin/bash
#SBATCH -N 2  
#SBATCH -p std
#SBATCH -J openmp
#SBATCH --ntasks-per-node=1
#SBATCH -c 32
#SBATCH -t 30:00
#SBATCH --mail-type=ALL
#SBATCH --mail-user=votremail@univ-lorraine.fr

module purge
module load intel/2018.0.128  intelmpi/2018.0.128 mkl/2018.0.128
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

## Creating temporary directory in $SCRATCHDIR
WORKDIR=$SCRATCHDIR/job.$SLURM_JOB_ID.$USER
mkdir -p $WORKDIR

## Copying files to $WORKDIR 
cp -rf input executable  $WORKDIR

## Moving to $WORKDIR
cd $WORKDIR
## Calculation
srun executable < input

## Copying back files to submit directory
cp -rf * $SLURM_SUBMIT_DIR/.

Exemple : Calcul de 30min MPI sur 8 cœurs et deux GPU sur un nœud gpu

#!/bin/bash
#SBATCH -N 1  
#SBATCH -p gpu
#SBATCH -J mpi+gpu
#SBATCH -n 8
#SBATCH --gres=gpu:2
#SBATCH -t 30:00
#SBATCH --mail-type=ALL
#SBATCH --mail-user=votremail@univ-lorraine.fr

module purge
module load intel/2018.0.128  intelmpi/2018.0.128 mkl/2018.0.128 cuda/8.0


## Creating temporary directory in $SCRATCHDIR
WORKDIR=$SCRATCHDIR/job.$SLURM_JOB_ID.$USER
mkdir -p $WORKDIR

## Copying files to $WORKDIR 
cp -rf input executable  $WORKDIR

## Moving to $WORKDIR
cd $WORKDIR
## Calculation
srun executable < input

## Copying back files to submit directory
cp -rf * $SLURM_SUBMIT_DIR/.

Si vous souhaitez utiliser la commande mpirun à la place de srun avec le module intelmpi il est nécessaire de rajouter dans vos scripts de soumission la commande : unset I_MPI_PMI_LIBRARY

Annulation d'un job

Pour annuler un job soumis taper la commande $ scancel #JOBID, #JOBID étant le numéro du job.

Réservation interactive d'un nœud de calcul (pour compilation/débogage)

Nous conseillons de compiler vos codes sources sur les nœud de calcul afin de profiter de l'ensemble des optimisations et d'éviter de surcharger la frontale.

Pour cela vous avez la possibilité de réserver un nœud et de vous y connecter en mode interactif.

Ex : pour demander un nœud de la partition std pendant 1 heure taper :

[****@vm-gce17 ~]$ salloc -A <id-projet> -N1 -p std -t 1:00:00 srun --pty bash
****@cna01's password: 
Last login: Fri Apr 21 21:10:16 2017 from vm-gce17.prod.explor
[****@cna01 ~]$ 

Pour quitter le mode interactif, taper la commande $ exit :

[****@cna01 ~]$ exit
logout
Connection to cna01 closed.
salloc: Job allocation 5232 has been revoked.