English versionEN
 Mésocentre de Calcul PSL

Soumission de tâches

Sommaire

Le gestionnaire de tâches SLURM

Quotas

Priorités

Script de soumission d'un job

Exemple de script pour un job mpi

Exemple de script pour un job openmp

Exemple de script pour un job hybride (openmp-mpi)

Les commandes de base

Les outils de gestion

Le gestionnaire de tâches SLURM

Pour une répartition optimale des jobs que vous aurez à exécuter sur la grappe de calcul mesopsl1, nous utilisons le système de gestion de tâches SLURM (Simple Linux Utility for Resource Management).

Ce système permet une utilisation optimale des noeuds/processeurs disponibles.

Ce système de batch a été organisé en plusieurs queues de soumission :

 

1 - Sur mesopsl1

  • la queue dédiée aux jobs séquentiels
    • seq : 1 coeur, maximum 1j, sur le noeud 2 ;
  • les queues dédiées aux jobs parallèles
    • short : maximum 1h, sur les noeuds 3 à 19 ;
    • normal : maximum 12h, sur les noeuds 5 à 19, par défaut ;
    • medium : maximum 1j, 8 noeuds sur les noeuds 12 à 19 ;
    • long : maximum 5j, 4 noeuds sur les noeuds 12 à 19 ;
    • verylong : maximum 15j, 2 noeuds sur les noeuds 15 à 19 ;
  • les queues de basse priorité dédiées aux jobs parallèles
    • short_low : maximum 1h, sur les noeuds 3 à 19 ;
    • normal_low : maximum 12h, sur les noeuds 3 à 19, par défaut ;
    • medium_low : maximum 1j, 8 noeuds sur les noeuds 5 à 19 ;
    • long_low : maximum 5j, 4 noeuds sur les noeuds 5 à 19 ;
    • verylong_low : maximum 15j, 2 noeuds sur les noeuds 9 à 19 ;

Pour OpenMP, le nombre maximum de threads par noeud est de *12* (dans le cas d'un thread par coeur).

 

2- Sur mesopsl

  • les queues dédiées aux jobs parallèles
    • short : maximum 1h, sur 36 noeuds  ;
    • long : maximum 24h, sur 46 noeuds ;
  • les queues de basse priorité dédiées aux jobs parallèles
    • long_low : maximum 5j, sur 80 noeuds  ;
    • verylong_low : maximum 15j, sur 12 noeuds ;

Pour OpenMP, le nombre maximum de threads par noeud est de *16* (dans le cas d'un thread par coeur).

 

3- Sur mesopsl2 (sous ensemble de noeuds de mesopsl)

  • les queues dédiées aux jobs parallèles
    • short2 : maximum 1h, sur 12 noeuds  ;
    • long2 : maximum 24h, sur 16 noeuds ;
  • les queues de basse priorité dédiées aux jobs parallèles
    • long_low2 : maximum 5j, sur 16 noeuds  ;
    • verylong_low2 : maximum 15j, sur 24 noeuds ;

Pour OpenMP, le nombre maximum de threads par noeud est de *24* (dans le cas d'un thread par coeur).

 

Quotas

Lors de votre demande d'accès, un quota horaire a été attribué au projet.

En cas de dépassement de quota, vous pourrez utiliser un deuxième quota d'heures en basse priorité (par défaut 20.000 h, extensible sur demande). Cela vous permettra de continuer à utiliser la grappe s'il y a de la place même après avoir épuisé vos heures.

Vous serez prévenus par mail en cas de dépassement de votre quota normal et basse priorité.

Priorités

Un job de basse priorité s'exécute s'il y a la place sur la grappe et si aucun job de plus haute priorité ne peut s'exécuter avant.

Si un job de haute priorité est lancé, alors que les ressources nécessaires sont prises par un job de basse priorité, le job de basse priorité est mis en sommeil (et en swap) pour laisser la place au job prioritaire. C'est ce qu'on appelle préemption. À la fin du job prioritaire, le job non prioritaire reprend son exécution.

Script de soumission d'un job

L'en-tête du script est de la forme :

#!/bin/sh
#SBATCH --job-name=test
#SBATCH --time=12:00:00
#SBATCH --mail-user=prenom.nom@obspm.fr --mail-type=ALL
#SBATCH --partition=medium
## Pour reserver 1 coeur
#SBATCH --ntasks=1

Ensuite vient le corps du script : recopie des fichiers dans l'espace de travail, compilation, execution...

RUNDIR=/mnt/lnec/travail/$USER/run.${SLURM_JOBID}
mkdir ${RUNDIR}
cd ${RUNDIR}
cp /obs/$USER/MonProg.f90 .

ifort MonProg.f90 -o MonProg

/usr/bin/time -o MonProg.log MonProg

 

Exemple de script pour un job mpi

#!/bin/sh
#SBATCH --job-name=test
#SBATCH --time=12:00:00
#SBATCH --mail-user=prenom.nom@obspm.fr --mail-type=ALL
#SBATCH --partition=medium
## Pour reserver 2 noeuds
#SBATCH --nodes=2

RUNDIR=/mnt/lnec/travail/$USER/run.${SLURM_JOBID}
mkdir ${RUNDIR}
cd ${RUNDIR}
cp /obs/$USER/MonProg.f90 .
mpif90 MonProg.f90 -o MonProg

/usr/bin/time -o MonProg.log mpirun --prefix ${NEC_MPI_ROOT} --bind-to-core -np 24 MonProg

 

Exemple de script pour un job openmp

#!/bin/sh
#SBATCH --job-name=test
#SBATCH --time=12:00:00
#SBATCH --mail-user=prenom.nom@obspm.fr --mail-type=ALL
#SBATCH --partition=medium
## Pour reserver 1 noeud
#SBATCH --nodes=1

export OMP_NUM_THREADS=12
RUNDIR=/mnt/lnec/travail/$USER/run.${SLURM_JOBID}
mkdir ${RUNDIR}
cd ${RUNDIR}
cp /obs/$USER/MonProg.f90 .
ifort -openmp MonProg.f90 -o MonProg

/usr/bin/time -o MonProg.log MonProg


NB: le nombre maximum de threads par noeud est de 12 sur mesopsl1 et 16 sur mesopsl.

 

Exemple de script pour un job hybride (openmp-mpi)

#!/bin/sh
#SBATCH --job-name=hybride
#SBATCH --time=12:00:00
#SBATCH --mail-user=prenom.nom@obspm.fr --mail-type=ALL
#SBATCH --partition=medium
## Pour reserver 4 noeud
#SBATCH --nodes=4

export OMP_NUM_THREADS=16
RUNDIR=/mnt/lnec/travail/$USER/run.${SLURM_JOBID}
mkdir ${RUNDIR}
cd ${RUNDIR}
cp /obs/$USER/MonProg.f90 .
mpiifort -openmp MonProg.f90 -o MonProg

scontrol show hostname $SLURM_JOB_NODELIST > /tmp/hosts.$SLURM_JOB_ID
mpirun -f /tmp/hosts.$SLURM_JOB_ID -ppn 1 -np 4 ./MonProg

Les commandes de base

Voici ci-dessous quelques commandes utiles pour gérer un job depuis la frontale :

sbatch : soumission d'un job

mesopsl1:~$ sbatch MonProg.slurm
Submitted batch job 1633


ou pour soumettre dans la queue séquentielle :

mesopsl1:~$ sbatch -p seq MonProg.slurm
Submitted batch job 1634

scancel : destruction d'un job

mesopsl1:~$ scancel 1633

squeue : suivi d'un job

mesopsl1:~$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
1638 def MonPorg marchand R 0:05 2 noeud[003-004]
1634 def test marchand R 0:10 1 noeud003
1614 seq PDR flepetit R 2:43:36 1 noeud019

 

sinfo : état des partitions et des noeuds

mesopsl1:~$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
def* up infinite 1 alloc noeud018
def* up infinite 16 idle noeud[003-017,019]
all up infinite 1 alloc noeud018
all up infinite 17 idle noeud[002-017,019]
seq up infinite 1 alloc noeud018
seq up infinite 1 idle noeud019

 

squota : consultation des quotas utilisateur

mesopsl1:~$ squota
Account Usage Quota Available
sio 166 20000 19834
sio-low 0 20000 20000

 

utilisation du quota de basse priorité

 mesopsl1:~$ sbatch -A sio-low -p medium_low MonJob.slurm

 

Liste des variables d'environnement

(définies par SLURM lors de l'exécution d'un job)

SLURM_CHECKPOINT_IMAGE_DIR=/mnt/lnec/obs/marchand
SLURM_NODELIST=noeud[003-004]
SLURM_JOB_NAME=MonProg
SLURMD_NODENAME=noeud003
SLURM_TOPOLOGY_ADDR=noeud003
SLURM_PRIO_PROCESS=0
SLURM_TOPOLOGY_ADDR_PATTERN=node
SLURM_NNODES=2
SLURM_JOBID=1631
SLURM_TASKS_PER_NODE=12(x2)
SLURM_JOB_ID=1631
SLURM_NODEID=0
SLURM_SUBMIT_DIR=/mnt/lnec/obs/marchand
SLURM_TASK_PID=25434
SLURM_CPUS_ON_NODE=12
SLURM_PROCID=0
SLURM_JOB_NODELIST=noeud[003-004]
SLURM_LOCALID=0
SLURM_JOB_CPUS_PER_NODE=12(x2)
SLURM_GTIDS=0
SLURM_JOB_NUM_NODES=2

 

Les outils de gestion

SLURM propose une interface graphique qui permet de voir l'état général du système : sview

Sview.png

Dernière mise à jour 11-09-2013 16:11 / Aurélia Marchand

Voir aussi dans la même rubrique