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.
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ément | Rôle |
|---|---|
| Job | Traitement soumis à SLURM |
| Tâche | Processus ou unité de travail d’un job |
| CPU par tâche | Nombre de CPU attribués à chaque tâche |
| Partition | Ensemble de ressources soumis à des règles communes |
| Nœud | Machine de calcul sur laquelle le job s’exécute |
| Allocation | Ressources réservées pour un job |
| Job array | Ensemble de jobs similaires identifiés par des indices |
| Dépendance | Condition 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.
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 :
| État | Signification |
|---|---|
PD ou PENDING | Job en attente de ressources ou de priorité |
R ou RUNNING | Job en cours d’exécution |
CG ou COMPLETING | Job en phase de finalisation |
CD ou COMPLETED | Job terminé avec succès |
F ou FAILED | Job terminé avec une erreur |
CA ou CANCELLED | Job annulé |
TO ou TIMEOUT | Durée maximale atteinte |
OOM | Mé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 :
stdpour les calculs CPU courants ;highmempour les jobs nécessitant beaucoup de mémoire RAM ;gpupour les applications utilisant des GPU ;visupour 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
| Besoin | Méthode recommandée |
|---|---|
| Tester une commande | srun sur une courte durée |
| Développer un code | Job interactif ou Open OnDemand |
| Lancer un calcul long | sbatch |
| Répéter un même traitement | Job array |
| Enchaîner plusieurs étapes | Dépendances SLURM |
| Utiliser une interface graphique | Open OnDemand et partition visu |
| Arrêter un traitement | scancel |
Bonnes pratiques générales
- Demandez uniquement les ressources nécessaires.
- Utilisez
debugpour 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é.