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.