Notions de base à connaître

Notions de base Slurm :

  1. Batch
  2. Job
  3. Job steps
  4. Tasks
  5. Partition

Batch :

Un Batch Slurm est un fichier dans lequel sont définis les différents éléments nécessaires à la création d'un Job. Il décrit une demande d'allocation de ressources pour l'exécution d'un ou plusieurs processus, et contient principalement les informations suivantes (non exhaustif) :

- Les paramètres du Job et les ressources demandées (Nom du Job, e-mail de suivi, CPUs, RAM...) via des options #SBATCH

- Le traitement à effectuer (script shell).

Le Batch est transmis à Slurm via la commande "sbatch" qui, sauf erreur ou refus, crée un Job et le place dans la file d'attente.


Job :

Un Job est une allocation de ressources (CPUs, RAM, temps...) réservées pour l'exécution d'un traitement spécifique.

- L'allocation est définie dans le Batch en nombre de Tasks (ntasks) multiplié par le nombre de CPUs par Task (cpus-per-task) et correspond aux ressources maximum utilisables en parallèle

- Le script crée un ou plusieurs Job Steps et gère la distribution des Tasks sur les nœuds de Calcul.


Job Steps :

Un Job Step représente une étape ou section du traitement effectué par le Job. Il exécute une ou plusieurs Tasks via la commande "srun". Ce découpage en Job Steps offre une grande flexibilité dans l'organisation des étapes du Job et la gestion et l'analyse des ressources allouées :

- les Steps peuvent être exécutés séquentiellement ou en parallèle,

- un Step peut initier une ou plusieurs Tasks exécutées en parallèle,

- les Steps sont pris en charge par les commandes sstat/sacct, permettant à la fois un suivi de l'avancement Step-by-Step du Job pendant l'exécution, et des statistiques détaillées d'utilisation des ressources pour chaque Step (pendant et après exécution).


Tasks :

Une Task est un processus auquel sont allouées les ressources définies dans le Batch par l'option "--cpus-per-task". Une Task peut disposer de ces ressources comme n'importe quel processus (création de threads, de sous-processus éventuellement eux-mêmes multi-threadés).

Il s'agit de l'unité d'allocation de ressources du Job. Les CPUs non utilisés par une Task seront "perdus", non-utilisables par aucune autre Task ou Step. Si la Task crée plus de processus/threads que de CPUs alloués, ces threads se partageront l'allocation.


Partition :

Une Partition est un groupement logique de nœuds de calcul. Le Cluster OSIRIM est scindé en deux partitions distinctes : « 64CPUNodes » et « 8CPUNodes », chacune composée de nœuds de calcul de dimension différente. Cette séparation permet de spécialiser et optimiser chaque partition pour un type de jobs particulier.


Pour mieux comprendre ces principes, voyons un exemple de batch.