Utiliser SLURM l'ordonnanceur de la plateforme
Sur cette page vous trouverez les commandes de bases permettant de se connecter à la plateforme de calcul de BIOSP et de lancer vos jobs, les supprimer, les contrôler.
pour simplement accéder au résumé des commandes cliquez ici.
Au Menu de cette page:
-
Prérequis à l'utilisation:
-
Pour accéder au serveur maître
-
Soumettre rapidement un job
-
Créer un batch de soumission
-
Soumettre un job en mode interactif
-
Les différentes partitions
-
Contrôler un job
-
Supprimer/annuler un job en cours
-
Utilisation Avancée
-
Trucs et astuces
-
Prérequis à l'utilisation:
Avoir un compte sur l'ensemble des serveurs de la plateforme donc avoir au préalable fait une demande
Avoir signé la charte du cluster.
-
Pour accéder au serveur maître
Il vous faut vous connecter à slurm01 par le biais d'une commande ssh
Prérequis: Avoir accès au réseau local du centre PACA soit en étant sur le site lui même soit en utilisant le VPN de l'INRAE soit en utilisant la passerelle de PACA.
La commande ssh: ---> lien pour linux windows mac
ssh mon_ldap@147.100.14.120
Note: Si vous êtes amené à utiliser une session graphique (non recommandé) il faudra utiliser l'option -X
exemple: ssh -X lhoude@147.100.14.120
A ce stade vous devez voir un écran comme celui-ci et êtes en mesure de lancer un job.
Note: Comme indiqué dans la charte on ne doit pas lancer de programme directement sur le serveur maitre(slurm01), il ne peut que lancer des scripts permettant de faire tourner vos programmes sur les autre noeuds(serveurs) de la plateforme de calcul.
Lorsque vous êtes connectés votre espace (/home/votre_ldap/ ou ~/ ) vous suivra quelque soit le serveur sur lequel vos jobs tourneront.
-
Soumettre rapidement un job:
La commande sbatch (qsub sous SGE) permet de soumettre un batch job ou directement un job sur la partition (queue sous SGE) par défaut
La commande srun permet desoumettre directement un programme
Exemple:
sbatch mon_batch.sh
srun mon_job.sh
à l'image de ce qui se faisait sur l'ancien ordonnanceur de BIOSP (SGE/OGE) il existe donc la possibilité de faire des "batch job" qui permettent de manière claire d'utiliser les options de SLURM voir de paralléliser les differents jobs.
Pour rédiger un batch chaque ligne commençant #SBATCH sera interprété par l'ordonnanceur lors de l'exécution au même titre que l'on aurait mis les options sur une seule ligne de commande le #! désigne le shell d'exécution (bash dans l'exemple) toutes autres chaines derriere un '#' sera considérée comme un commentaire.
-
Créer un batch de soumission:
Nous reviendrons plus tard sur les différents types de batch et sur les options possibles mais dans un premier temps voici un exemple de batch pour mieux comprendre le fonctionnement:
A noter:#SBATCH (le ‘#SBATCH’ ne désigne pas un commentaire ici) sera interprété par l'ordonnanceur lors de l'exécution au même titre que l'on aurait mis les options sur une seule ligne de commande le #! désigne le shell d'exécution (bash dans l'exemple) toutes autres chaines derriere un '#' sera considérée comme un commentaire.
#!/bin/bash
#SBATCH --time=00:10:00 # fixer une limite de temps au job
#SBATCH -J testjob #job name
#SBATCH -o output.out #le fichier de sortie d écran
#SBATCH -e error.out # le fichier de sortie d erreur
#SBATCH --mem=8G #je veux au moins 8G
#SBATCH --cpus-per-task=4 #nombre de cpu sur un même noeud
#SBATCH --mail-type=BEGIN,END,FAIL # ou ALL pour tout événement (email address = compte LDAP)
#SBATCH --mail-user=loic.houde@inrae.fr
#Exemple charger l'environnement de l'application
# on va charger les éléments essentiels pour l'utilisation du package spatial rgdal
module load geos gdal proj/7.0.1
#chargement du module R
module load R/4.0.0
# et enfin les lignes de commande de mon programme
R CMD BATCH monprogramme.r
- Les différentes partitions
Nous l'avons vu précédemment lorsque l'on soumet un job à l'image de ce qui se faisait avec SGE nous pouvons préciser sur quel type de noeuds (serveurs) nous le soumettons:
Une partition correspond à un type de serveur, le choix du type de serveur dépend des ressources estimées qui seront utilisées par votre job.
Nous disposons sur notre plateforme de calcul de 4 catégories (type) de serveurs, chacune de ces catégories ayant des caractéristiques physiques différentes, identifiées principalement par 2 composantes principales:(RAM,PROCESSEUR)
RAM: Quantité disponible en Go
Processeurs: Fréquence (rapidité) , nombre de coeurs/processeur/serveur
Les partitions:
Type de partition/serveur:
- pcbiom5x --> 16 coeurs , fréquence moyenne ,64 Go de RAM
- pcbiom2x ---> 8 à 12 coeurs, fréquence moyenne à rapide, 48 Go de RAM
- pcbiom0x ---> 8 coeurs fréquence très élevée, 128 Go de RAM
- pcbiom9x- 40 coeurs , fréquence moyenne,440 à 512 Go de RAM
Partition "système"
- all* -> partition actuellement par défaut lorsque rien n'est précisé
- sge -> partition réservée pour le basculement de SGE à SLURM (pas de soumission possible)
Quand un job est soumis l'ordonnanceur SLURM choisit le serveur sur lequel il y a le moins de charge, et si la partition n'est pas précisée il choisira par défaut la partition "all"
Pour choisir sa partition il faut utiliser l'option -p nom_de_la_partition
Exemples:
srun -p pcbiom2x --pty bash
sbatch -p pcbiom0x monprg.sh
- Soumettre un job en mode interactif:
Les options de la commande srun sont sensiblement les même que pour sbatch.
Pour lance un terminal actif:
srun --pty bash
-
controler un job
A] Voir l'état d'un job (file d'attente, execution,node) :
squeue [JOBID]
Exemple: squeue -j 91
B) Pendant l'exécution:
sstat -j jobid
Exemple: sstat -j 85
Il existe un grand nombre de paramètres et d'options de formatage pour voir comment tourne son job.
Exemple pour voir la quantité totale de RAM utilisée et le node surlequel tourne le job:
sstat -j 89 --format MaxRSS,Node
L'ensemble des formats peuvent être obtenus grace à la commande qacct --helpformat
C) Une fois terminé
sacct -j jobid
Exemple: sacct -j 85
Les formats principaux dont les noms sont suffisamment parlants sauf MaxRSS qui correspond à la quantité de RAM utilisée (?):
User,JobName,Elapsed,Node,Submit,End,ExitCode,Workdir,MaxRDD
Exemple: sacct -j 85 --format User,JobName,Elapsed,Node,Submit,End,ExitCode
Les options types: - l tous les champs ,-u nom user , -j jobid
L'ensemble des formats peuvent être obtenus grace à la commande qacct --helpformat
-
Supprimer/annuler un job en cours
scancel jobid
Exemple: scancel 387
-
Utilisation Avancée:(La liste ci dessous est à compléter au fur et à mesure)
Soumettre un job quand un autre job est terminé:
<dependency_list> is on the form <type :jobID[:jobID][,type :jobID[:jobID]]>
Exemple:
sbatch --dependency=afterok:1234 mon_premier_job
Choisir une liste de serveur ou un seul (--nodelist ou -w)
Exemple:
sbatch --nodelist=pcbiom08,pcbiom03 mon_premier_job
Lancer un job directement depuis son poste de travail
Exemple:
ssh slurm01 bash --login -i -c /home/lhoude/cluster/lance.sh
exemple de fichier de lancement :
#!/bin/bash
srun /home/lhoude/cluster/monjob.sh
Lancer des jobs en paralleles
Commandes BIOSP :
quelques scripts shell "maison" qui peuvent être utiles
qui -> permet de voir qui utilise le cluster
qui2 -> permet de voir surquels serveurs sont les utilisateurs et les jobs
qlogin -> alias de la commande "srun --pty bash "
jobs -> voir les coeurs et l'espace de stockage disponibles sur le cluster
qhost -> un rapide coup d'oeil sur les différents serveurs et leur ressources disponibles plus d'information avec la commande 'scontrol show nodes'