Aller au contenu principal

Utiliser SLURM sur eXplor-v2

SLURM est le gestionnaire de jobs et de ressources d’eXplor-v2. Il attribue les CPU, la mémoire, les GPU et le temps d’exécution aux utilisateurs selon les partitions, les projets et les règles de priorité du centre.

SLURM permet notamment de :

  • demander des ressources de calcul ;
  • lancer des jobs batch ;
  • ouvrir des sessions interactives ;
  • utiliser des CPU, de la mémoire et des GPU ;
  • suivre l’état de ses jobs ;
  • annuler ou arrêter un traitement ;
  • organiser des dépendances et des tableaux de jobs ;
  • gérer les ressources utilisées par Open OnDemand.
SLURM et Open OnDemand

Open OnDemand s’appuie sur SLURM pour lancer les terminaux, notebooks, environnements de développement et sessions graphiques. Une session interactive Open OnDemand correspond donc généralement à un job SLURM.

Les notions essentielles​

Un job SLURM est une demande de ressources et d’exécution. Il possède généralement :

  • un identifiant de job ;
  • un nom ;
  • une partition ;
  • un projet ou compte ;
  • une durée maximale ;
  • une quantité de CPU ;
  • une quantité de mémoire ;
  • éventuellement un ou plusieurs GPU ;
  • un script ou une commande à exécuter.

Les principaux objets à distinguer sont :

ÉlémentRôle
JobTraitement soumis à SLURM
TâcheProcessus ou unité de travail d’un job
CPU par tâcheNombre de CPU attribués à chaque tâche
PartitionEnsemble de ressources soumis à des règles communes
NœudMachine de calcul sur laquelle le job s’exécute
AllocationRessources réservées pour un job
Job arrayEnsemble de jobs similaires identifiés par des indices
DépendanceCondition qui contrôle le démarrage d’un job

Deux modes d’exécution​

Jobs batch​

Un job batch s’exécute sans intervention continue dans un script soumis avec sbatch.

sbatch mon-script.slurm

Les jobs batch sont recommandés pour :

  • les calculs longs ;
  • les traitements reproductibles ;
  • les campagnes de simulations ;
  • les workflows automatisés ;
  • les traitements à relancer ou à archiver.

Consultez Jobs batch.

Jobs interactifs​

Un job interactif ouvre une session temporaire sur une ressource de calcul.

salloc \
--partition=std \
--ntasks=1 \
--cpus-per-task=2 \
--mem=4G \
--time=00:15:00 \
srun --pty bash

salloc -A support -N 1 -p debug -n 8 -t 1:00:00 srun --pty bash

Les jobs interactifs sont adaptés à :

  • la découverte de l’environnement ;
  • la mise au point d’un script ;
  • le test d’un logiciel ;
  • le débogage ;
  • les traitements courts ;
  • les interfaces graphiques.

Consultez Jobs interactifs.

N’exécutez pas de calcul lourd sur le nœud de connexion

Le nœud de connexion sert à préparer les fichiers et à soumettre les jobs. Demandez une allocation SLURM avant d’exécuter un calcul consommant des CPU, de la mémoire ou un GPU.

Cycle de vie d’un job​

Un job suit généralement ce cycle :

flowchart LR
A[Préparer le script] --> B[Soumettre avec sbatch ou srun]
B --> C[En attente]
C --> D[En cours]
D --> E[Terminé]
D --> F[Échoué ou annulé]

États courants :

ÉtatSignification
PD ou PENDINGJob en attente de ressources ou de priorité
R ou RUNNINGJob en cours d’exécution
CG ou COMPLETINGJob en phase de finalisation
CD ou COMPLETEDJob terminé avec succès
F ou FAILEDJob terminé avec une erreur
CA ou CANCELLEDJob annulé
TO ou TIMEOUTDurée maximale atteinte
OOMMémoire demandée dépassée

Commandes essentielles​

Soumettre un job​

sbatch mon-script.slurm

Lancer une session interactive​

srun --pty bash

Consulter ses jobs​

squeue -u "$USER"

Afficher les détails d’un job​

scontrol show job <job_id>

Consulter l’historique​

sacct -j <job_id>

Annuler un job​

scancel <job_id>

Consulter les partitions​

sinfo

Consultez Suivi et contrôle des jobs pour les commandes de diagnostic et de gestion.

Partitions et ressources​

Le choix d’une partition dépend du type de traitement :

  • std pour les calculs CPU courants ;
  • highmem pour les jobs nécessitant beaucoup de mémoire RAM ;
  • gpu pour les applications utilisant des GPU ;
  • visu pour les sessions graphiques et la visualisation ;
  • debug, si disponible, pour les tests courts.

Les ressources demandées doivent être cohérentes avec le programme :

#SBATCH --partition=std
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=8G
#SBATCH --time=01:00:00

Consultez Ressources et partitions.

Exemple minimal de job batch​

#!/bin/bash
#SBATCH --job-name=mon-calcul
#SBATCH --partition=std
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=8G
#SBATCH --time=01:00:00
#SBATCH --output=logs/%x-%j.out
#SBATCH --error=logs/%x-%j.err

set -euo pipefail

mkdir -p logs

module load <module>
python script.py

Soumission :

sbatch mon-calcul.slurm

Les fichiers %x et %j sont remplacés respectivement par le nom et l’identifiant du job.

Suivre et contrôler ses jobs​

Pendant ou après l’exécution, vérifiez :

  • l’état du job ;
  • le nœud utilisé ;
  • la durée ;
  • la mémoire consommée ;
  • les CPU et GPU attribués ;
  • les messages écrits dans les fichiers de sortie.

Commandes utiles :

squeue -u "$USER"
scontrol show job <job_id>
sacct -j <job_id> --format=JobID,State,Elapsed,MaxRSS,AllocTRES

Pour arrêter un job :

scancel <job_id>

Un job peut être annulé lorsqu’il est en attente ou en cours d’exécution.

Choisir la bonne méthode​

BesoinMéthode recommandée
Tester une commandesrun sur une courte durée
Développer un codeJob interactif ou Open OnDemand
Lancer un calcul longsbatch
Répéter un même traitementJob array
Enchaîner plusieurs étapesDépendances SLURM
Utiliser une interface graphiqueOpen OnDemand et partition visu
Arrêter un traitementscancel

Bonnes pratiques générales​

  • Demandez uniquement les ressources nécessaires.
  • Utilisez debug pour les tests courts, lorsqu’elle est disponible.
  • Utilisez les jobs batch pour la production.
  • Estimez la durée sans ajouter une marge excessive.
  • Vérifiez la consommation réelle après chaque test.
  • N’utilisez pas de GPU si le programme ne les exploite pas.
  • Évitez les calculs lourds sur les nœuds de connexion.
  • Donnez un nom explicite à chaque job.
  • Conservez les scripts et les fichiers de sortie.
  • Utilisez des dépendances pour organiser les workflows.
  • Annulez les jobs inutiles.
  • Fermez les sessions Open OnDemand inutilisées.
  • Documentez les ressources utilisées pour assurer la reproductibilité.

Documentation SLURM​