Gestionnaire de travaux et soumission

Gestionnaire de travaux SLURM

Les calculs sur le Cluster s’effectuent par l’intermédiaire d’un gestionnaire de travaux qui s’occupe de gérer la file d’attente et de lancer les calculs lorsque les ressources demandées sont disponibles.

Le gestionnaire de travaux du Cluster est SLURM (Simple Linux Utility for Resource Management).

 

Soumission des travaux

La soumission d’un job se fait avec la commande

sbatch slurm.job

ou slurm.job  est un fichier de script dans lequel sont contenues des instructions pour SLURM ainsi que des instructions pour le lancement de votre programme. Cette commande retourne un numéro de job (JOBID).

 

Less instructions pour SLURM commencent par l’instruction #SBATCH suivi par une option. Les principales options sont :

  • Le nombre de nœuds demandés (ici 1 nœud, valeur par défaut) :
#SBATCH --nodes=1
  • Le nombre de cœurs demandés par nœud (ici 1 cœur, valeur par défaut) :
#SBATCH --ntasks-per-node=1
  • Le temps demandé sous la forme HH:MM:SS (ici 1 heure, valeur par défaut) :
#SBATCH --time=01:00:00
  • Le nom du job tel qu’il apparaît dans les différentes commandes de SLURM :
#SBATCH --job-name=my_job
  • La taille mémoire maximum demandé par nœud (ici 1024 Mo ou 1 Go, valeur par défaut) :
#SBATCH --mem=1024M
  • [Optionnel] Pour recevoir un email à la fin du job (ou en cas d’erreur) :
#SBATCH --mail-type=ALL
#SBATCH --mail-user=you@emse.fr

 

Un script scécifique é été développé pour générer automatiquement différents fichiers SLURM modèles. Pour utiliser ce script, chargez d’abord le module correspondant :

module load tools/cluster-bin

Le fichier .job est créé en exécutant la commande

cluster-create-slurm-script-01.sh

suivie d'une option permettant de spécifier le modèle de fichier .job que vous voulez créer (fichier pour lancer Abaqus, Zset, ...). La commande cluster-create-slurm-script-01.sh  -h permet de connaître les différents modèles disponibles.

Gestion des travaux

 

La commande pour voir l’état des jobs est :

squeue

Cette commande ne montre que vos propres jobs !

La commande pour arrêter un job est :

scancel JOBID

avec JOBID le numéro du job.

 

La commande pour vérifier l’état des noeuds est :

sinfo

La commande pour obtenir l’historique des jobs à partir d’une date précise est :

sacct -S MMDD

où MM correspond au mois et DD au jour.

Par exemple, pour obtenir l’historique depuis le 15 juillet :

sacct -S 0715

Vous pouvez également définir une date de fin avec l’option -E en utilisant la même syntaxe :

sacct -S MMDD -E MMDD

Exemple de scripts SLURM

#!/bin/bash
#SBATCH --job-name=job-slurm-mpi
#SBATCH --mail-user=you@emse.fr
#SBATCH --mail-type=ALL
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=2
#SBATCH --time=01:00:00

module load mpi/openmpi-x86_64

echo ------------------------------------------------------
echo SLURM_NNODES: $SLURM_NNODES
echo SLURM_JOB_NODELIST: $SLURM_JOB_NODELIST
echo SLURM_SUBMIT_DIR: $SLURM_SUBMIT_DIR
echo SLURM_SUBMIT_HOST: $SLURM_SUBMIT_HOST
echo SLURM_JOB_ID: $SLURM_JOB_ID
echo SLURM_JOB_NAME: $SLURM_JOB_NAME
echo SLURM_JOB_PARTITION: $SLURM_JOB_PARTITION
echo SLURM_NTASKS: $SLURM_NTASKS
echo SLURM_TASKS_PER_NODE: $SLURM_TASKS_PER_NODE
echo SLURM_NTASKS_PER_NODE: $SLURM_NTASKS_PER_NODE
echo ------------------------------------------------------

echo Generating hostname list...
COMPUTEHOSTLIST=$( scontrol show hostnames $SLURM_JOB_NODELIST |paste -d, -s )
echo ------------------------------------------------------

echo Creating SCRATCH directories on nodes $SLURM_JOB_NODELIST...
SCRATCH=/scratch/$USER-$SLURM_JOB_ID
srun -n$SLURM_NNODES mkdir -m 770 -p $SCRATCH  || exit $?
echo ------------------------------------------------------
echo Transferring files from frontend to compute nodes $SLURM_JOB_NODELIST
srun -n$SLURM_NNODES cp -rvf $SLURM_SUBMIT_DIR/* $SCRATCH  || exit $?
echo ------------------------------------------------------

echo Run -mpi program...
mpirun -np 4 -npernode 2 --mca btl openib,self -host $COMPUTEHOSTLIST $SLURM_SUBMIT_DIR/mpi_hello_world-host
echo ------------------------------------------------------

echo Transferring result files from compute nodes to frontend
srun -n$SLURM_NNODES cp -rvf $SCRATCH  $SLURM_SUBMIT_DIR   || exit $?
echo ------------------------------------------------------
echo Deleting scratch...
srun -n$SLURM_NNODES rm -rvf $SCRATCH  || exit 0
echo ------------------------------------------------------