SLURM
SLURM est un système de répartition de travaux pour clusters sous Linux. Il permet d’allouer des ressources aux travaux des utilisateurs parmi les nœuds de calcul.
Commandes de SLURM
Les commandes essentielles des utilisateurs sont les suivantes :
-
soumission :
sbatch script +on récupère une référence au travail appelée JobId -
suivi :
squeue,squeue -u $USER
la seconde commande limite la sortie aux travaux de l’utilisateur, en cours d’exécution ou en attente -
destruction d’un travail :
scancel JobId
destruction du travail et libération des ressources -
liste des partitions :
sinfo
Exemples de script de soumission SLURM
Script parallèle MPI multi-nœud Intel MPI
Par exemple ici pour lancer un code parallèle sur 80 processus qui utilise donc 4 nœuds Nazare.
#!/bin/bash
#
# Nom du job
#SBATCH -J MON_JOB_MPI
#
# Partition visee
#SBATCH --partition=MPI-short
#
# Nombre de noeuds
#SBATCH --nodes=4
# Nombre de processus MPI par noeud
#SBATCH --ntasks-per-node=20
#
# Usage reserve des noeuds
#SBATCH --exclusive
#
# Temps de presence du job
#SBATCH --time=01:00:00
#
# Adresse mel de l'utilisateur
#SBATCH --mail-user=mon.mel@domaine.fr
#
# Envoi des mails
#SBATCH --mail-type=abort,end
#
# Nom du fichier de log de Slurm pour le job
#SBATCH -o job_mpi-80-%j.out
module purge
module load intel/2016.3.210
module load intel/mkl/64/2016.3.210
module load intel/mpi/2016.3.210
export LD_PRELOAD=/lib64/psm2-compat/libpsm_infinipath.so.1
#
# Se placer dans le répertoire de soumission (optionnel)
cd $SLURM_SUBMIT_DIR
#
# Faire le lien entre SLURM et Intel MPI
export I_MPI_PMI_LIBRARY=/usr/lib64/libpmi.so
time srun -n 80 ./mon_code_mpi > ./output_80-${SLURM_JOB_ID}.txt 2>&1
Script parallèle MPI multi-nœud OpenMPI
#!/bin/bash
#
# Nom du job
#SBATCH -J MON_JOB_MPI
#
# Partition visee
#SBATCH --partition=MPI-short
#
# Nombre de noeuds
#SBATCH --nodes=4
# Nombre de processus MPI par noeud
#SBATCH --ntasks-per-node=20
#
# Usage reserve des noeuds
#SBATCH --exclusive
#
# Temps de presence du job
#SBATCH --time=01:00:00
#
# Adresse mel de l'utilisateur
#SBATCH --mail-user=mon.mel@domaine.fr
#
# Envoi des mails
#SBATCH --mail-type=abort,end
#
# Nom du fichier de log de Slurm pour le job
#SBATCH -o job_mpi-80-%j.out
module purge
module load openmpi/psm2/gcc92/4.0.1
module load gcc/10.1
#
# Se placer dans le répertoire de soumission (optionnel)
cd $SLURM_SUBMIT_DIR
export LD_PRELOAD=/lib64/psm2-compat/libpsm_infinipath.so.1
time mpirun -n ${SLURM_NTASKS} ./mon_code_mpi > ./output_ompi_`printf %03d ${SLURM_NTASKS}`_${SLURM_JOB_ID}.txt 2>&1
Script parallèle hybride multi-nœud avec Intel MPI
Par exemple MPI et OpenMP. Par exemple ici pour lancer un code parallèle sur 80 cœurs qui utilise donc 4 nœuds : 8 processus MPI et 10 threads OpenMP par processus MPI.
#!/bin/bash
#
# Nom du job
#SBATCH -J MON_JOB_HYB
#
# Partition visee
#SBATCH --partition=MPI-short
#
# Nombre de noeuds
#SBATCH --nodes=4
# Nombre de processus MPI par noeud
#SBATCH --ntasks-per-node=2
#SBATCH --cpus-per-task=10
#
# Usage reserve des noeuds
#SBATCH --exclusive
#
# Temps de presence du job
#SBATCH --time=01:00:00
#
# Adresse mel de l'utilisateur
#SBATCH --mail-user=mon.mel@domaine.fr
#
# Envoi des mails
#SBATCH --mail-type=abort,end
#
# Nom du fichier de log de Slurm pour le job
#SBATCH -o job_hyb-80-%j.out
module purge
module load intel/2020.0.166
module load intel/mpi/2020.0.166
export LD_PRELOAD=/lib64/psm2-compat/libpsm_infinipath.so.1
#
# Se placer dans le répertoire de soumission (optionnel)
cd $SLURM_SUBMIT_DIR
#
# Faire le lien entre SLURM et Intel MPI
export I_MPI_PMI_LIBRARY=/usr/lib64/libpmi.so
# On récupère le nombre de cœurs par processus MPI, i.e. le nombre de threads OpenMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
time srun -n ${SLURM_NTASKS} ./mon_code_hyb > ./output_impi-`printf %03d ${SLURM_NTASKS}`_omp-`printf %02d ${SLURM_CPUS_PER_TASK}`_${SLURM_JOB_ID}.txt 2>&1
Script parallèle intra-nœud
Ce script est utilisé pour des calculs parallélisés en mémoire partagée comme OpenMP ou les pthreads.
#!/bin/bash
#
# Nom du job
#SBATCH -J MON_JOB_OMP
#
# Partition visee
#SBATCH --partition=SMP-short
#
# Nombre de noeuds
#SBATCH --nodes=1
#
# Usage reserve du noeud
#SBATCH --exclusive
#
# Temps de presence du job
#SBATCH --time=01:00:00
#
# Adresse mel de l'utilisateur
#SBATCH --mail-user=mon.mel@domaine.fr
#
# Envoi des mails
#SBATCH --mail-type=abort,end
#
# Nom du fichier de log de Slurm pour le job
#SBATCH -o omp_10-%j.out
module purge
module load intel/2020.0.166
#
# Se placer dans le répertoire de soumission (optionnel)
cd $SLURM_SUBMIT_DIR
export OMP_NUM_THREADS=10
time ./mon_code_omp > output_10-${SLURM_JOB_ID} 2>&1