> MesoPSL/ slurm

Gestionnaire de tâches SLURM

La nouvelle configuration du gestionnaire de tâches SLURM sur MesoPSL repose sur la combinaison de plusieurs éléments.
Pour pouvoir lancer un job, vous devrez préciser les éléments suivants :

  • un account
  • un cluster
  • une partition
  • une QoS

Accounts

Les accounts sont les comptes sur lesquels sont crédités les allocations horaires qui vous sont attribuées lorsque vos demandes de temps de calcul sont validées.
En règle générale, les accounts portent le nom du demandeur. À chaque demande sont associées deux accounts, l'un contenant les heures de calcul normales et l'autre les heures de calcul prioritaires.

Clusters

Le gestionnaire de tâches SLURM gère maintenant dans des clusters séparés les noeuds des différentes générations et des projets (ERC) qui composent MesoPSL.
Les commandes squeue et sinfo par ex. afficheront séparément les informations concernant ces clusters.
Les clusters actuellement définis sont :

  • mesopsl1 : 94 noeuds NEC 16 coeurs, 64 Go RAM
  • mesopsl2 : 24 noeuds DELL 24 coeurs, 96 Go RAM
  • astro_fat : 12 noeuds larges DELL 96 coeurs, 768 Go RAM, réservés prioritairement pour la communauté astro
  • astro_thin : 92 noeuds fins DELL, 24 coeurs, 96 Go RAM, réservés prioritairement pour la communauté astro
  • totoro : 16 noeuds DELL, 40 coeurs, 192 Go RAM, réservés exclusivement aux membres de l'ERC MIST

Vous trouverez plus d'informations sur le matériel ici.

Partitions

Les partitions de MesoPSL sont définies de la manière suivante : chaque cluster peut être utilisé grâce à une partition normale ou prioritaire (en dehors de totoro qui a son propre mode de fonctionnement).

Ainsi, vous pouvez trouver sur MesoPSL les partitions :

  • def
  • hi

pour chacun des cluster mesopsl1, mesopsl2, astro_fat et astro_thin.

Un job lancé sur une partition prioritaire pourra suspendre un job lancé sur une partition normale pour s'exécuter. Lorsque le job prioritaire sera terminé, l'exécution du job normal reprendra.

QoS

Les QoS permettent de répartir l'usage des noeuds entre des jobs longs et des jobs courts, évitant ainsi que l'intégralité des noeuds d'une partition soient bloqués pour des jobs durant quelques jours inversement que des jobs longs restent trop longtemps en queue.

Les partitions normales disposent des QoS :

  • _long : jusqu'à 5 jours de temps d'exécution ;
  • _vlong : jusqu'à 15 jours de temps d'exécution.

Les partitions haute priorité disposent des QoS :

  • _short : jusqu'à 1 heure de temps d'exécution ;
  • _normal : jusqu'à 1 jour de temps d'exécution.

Le nombre de noeuds utilisables par les QoS varie d'un cluster à l'autre :

  • 50 noeuds dans chaque QoS de mesopsl1 ;
  • 15 noeuds dans chaque QoS de mesopsl2 ;
  • 12 noeuds dans chaque QoS de astro_fat ;
  • 60 noeuds dans chaque QoS de astro_thin.
Partition QoS limites
def mesopsl1_def_long 50 noeuds, 5 jours
def mesopsl1_def_vlong 50 noeuds, 15 jours
hi mesopsl1_hi_short 50 noeuds, 1 heure
hi mesopsl1_hi_normal 50 noeuds, 1 jour
def mesopsl2_def_long 15 noeuds, 5 jours
def mesopsl2_def_vlong 15 noeuds, 15 jours
hi mesopsl2_hi_short 15 noeuds, 1 heure
hi mesopsl2_hi_normal 15 noeuds, 1 jour
def astro_fat_def_long 12 noeuds, 5 jours
def astro_fat_def_vlong 12 noeuds, 15 jours
hi astro_fat_hi_short 12 noeuds, 1 heure
hi astro_fat_hi_normal 12 noeuds, 1 jour
def astro_thin_def_long 60 noeuds, 5 jours
def astro_thin_def_vlong 60 noeuds, 15 jours
hi astro_thin_hi_short 60 noeuds, 1 heure
hi astro_thin_hi_normal 60 noeuds, 1 jour

Commandes essentielles

  • squeue : indique les jobs en queue

    • -u user : indique seulement les jobs de l'utilisateur user
    • -M cluster : indique seulement les jobs sur le cluster cluster
  • sinfo : indique l'état des partitions de l'ensemble des clusters

  • sbatch mon_job : soummet l'exécution du job défini par le script mon_job
  • scancel -M cluster jobid : annule le job numéro jobid sur le cluster cluster
  • squota : liste les heures disponibles et utilisées sur chaque cluster pour chaque accounts.

Exemples de scripts

Prenons l'exemple de l'utilisateur martin, dont les allocations d'heures ont été créditées sur les accounts martin et martin_hi, pour les clusters mesopsl1 et mesopsl2.
Voici quelques exemples de scripts lui permettant de lancer des jobs sur les différentes partitions, avec différentes QoS, pour différents types d'exécution.

Job MPI simple

Demande de 12 noeuds sur mesopsl1, pour 2 jours, en priorité normale.
Le code sera exécuté sur l'espace de travail BeeGFS.

#!/bin/sh
#SBATCH --job-name=mon_job
#SBATCH --time=2-00:00:00  
#SBATCH --mail-user=mon-mail@mail.fr --mail-type=ALL
#SBATCH --clusters=mesopsl1
#SBATCH --partition=def
#SBATCH --qos=mesopsl1_def_long
#SBATCH --account=martin
#SBATCH --nodes=12 
#SBATCH --ntasks-per-node=16

module load ma_liste_de_modules

RUNDIR=/travail/martin/job.${SLURM_JOB_ID}
mkdir -p ${RUNDIR}
cd ${RUNDIR}

mpirun -np ${SLURM_NTASKS} /travail/martin/mon/beau/code

exit 0

Job hybride MPI/OpenMP

Demande de 8 noeuds sur mesopsl2, pour 30 minutes, en priorité haute.
Sur chaque noeud, on veut lancer 4 processus avec 6 threads chacun.
Le code sera exécuté sur l'espace de travail BeeGFS.

#!/bin/sh
#SBATCH --job-name=mon_job
#SBATCH --time=00:30:00  
#SBATCH --mail-user=mon-mail@mail.fr --mail-type=ALL
#SBATCH --clusters=mesopsl2
#SBATCH --partition=hi
#SBATCH --qos=mesopsl2_hi_short
#SBATCH --account=martin_hi
#SBATCH --nodes=8
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=6

module load ma_liste_de_modules

RUNDIR=/travail/martin/job.${SLURM_JOB_ID}
mkdir -p ${RUNDIR}
cd ${RUNDIR}

OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} mpirun -np ${SLURM_NTASKS} /travail/martin/mon/beau/code

exit 0

Jobs interactifs

Il est possible de demander des ressources à SLURM et d'être connecté automatiquement aux ressources attribuées lorsque le job commence. Ceci permet d'utiliser MesoPSL de manière intéractive.
Pour cela, il faut utiliser la commande srun comme dans l'exemple suivant :

srun --job-name "InteractiveJob" --ntasks=24 --time 0:15:00 --account=martin --qos=astro_thin_def_long --partition=def --clusters=astro_thin --pty bash 

Cette demande ouvre une session interactive pour 24 processus/threads sur astro_thin, pour 15 minutes, en priorité normale.
Il faut penser à quitter sa session intéractive avec exit si on veut y mettre un terme avant la fin du temps réservé.