Aller au contenu principal

Le gestionnaire de travaux : Slurm

logo

Les calculs sur le cluster s'effectuent par l'intermédiaire du gestionnaire de travaux Slurm.

Ce dernier gère une file d'attente et lance les travaux soumis sur les serveurs dédiés au calcul lorsque les ressources demandées sont disponibles.

attention

Rappel : il est strictement interdit de calculer directement sur la frontale (zeus) !

Au lieu d'exécuter directement son programme, l'utilisateur soumet donc des scripts à Slurm. Ces scripts spécifient les ressources demandées - quel(s) machine(s) pour combien de temps? etc - et les commandes à exécuter sur les machines allouées.

Il est donc très important que les ressources demandées soient adéquates pour le code à executer. Tant que les ressources demandées ne sont pas disponibles, le script ne démarrera pas (demander trop est donc inutile, en plus d'être peu respectueux des autres utilisateurs) - et si les ressources sont insuffisantes, alors le code ne pourra pas s'exécuter correctement.

Ce document fournit les éléments nécessaires pour écrire et soumettre des scripts Slurm adaptés à vos besoins.

Walltime maximum

Attention, le walltime maximum dépend du nombre de cœurs demandés:

  • En dessous de 48 cœurs, la limite est de 384 heures (16 jours) et ne dépend pas du nombre de cœurs.
  • Au-délà, le walltime maximal decroît proportionellement au nombre de cœurs demandés.

Les ressources allouées à un seul job ne peuvent pas dépasser 48 x 384 cœur-heures. Le tableau ci-dessous vous présente quelques exemples, la variation est linéaire.

Nombre de cœursWalltime max (heures)Walltime max (jours)
<=4838416
6428812
961928
1281446
19296
25672
384482
512361.5
76824 

Jobs interactifs

Pour effectuer des tests de courte durée, vous pouvez utiliser les machines interactives suivantes :

 NomType CPUMemoire
 interactive-1CPU2x10 cœurs @2.20GHz, Intel Xeon Silver 4114192 Go
 interactive-2 CPU2x10 cœurs @2.20GHz, Intel Xeon Silver 4114192 Go

A partir de zeus, ces machines sont accessibles par ssh. Utilisez la commande

ssh interactive

pour vous connecter à une des machines interactive-[1,2].

Comme la frontale, ces nœuds sont partagé entre les utilisateurs.

Il faut donc éviter d'y lancer des calculs de longue durée et d'en tenir compte dans lors de toute mesure de performance effectuée sur cette machine. Il n'y a malheureusement pas de machine interactive avec GPU.

Pour les tests longs, vous devez soumettre un job via le gestionnaire de travaux.

Soumission de travaux (sbatch)

La soumission d'un job se fait avec la commande

 sbatch job.slurm

job.slurm est un fichier de script dans lequel sont contenues des instructions pour Slurm ainsi que des instructions pour le lancement de votre programme. Cette commande retourne un numéro de job (JOBID).

Par exemple, le script suivant décrit un job qui reserve un nœud (--nodes=1) pour une durée d'au plus 10 minutes et exécute la commande hostname suivi de la commande sleep 60.

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --time=00:10:00

hostname
sleep 60

Les instructions pour Slurm se trouvent dans l'en-tête dans les lignes commençant par #SBATCH. Ci-dessous vous trouvez les options les plus importantes.

Des exemples de scripts de soumission pour certains codes fréquemment utilisés sont disponibles dans le répertoire /share/doc/submission/. Si un exemple de script vous semble manquant ou erroné, faites le nous savoir (hpc@univ-lille.fr).

Des exemples plus génériques sont également disponibles ici.

--time, -t

Le temps (maximal) demandé. Au-délà de cette limite le job est terminé par le système.

Exemples de format valides :

  • #SBATCH --time 24:00:00 → 24 heures, valeur par défaut
  • #SBATCH --time 2-12 → 2 jours et 12 heures
  • #SBATCH --time 30 → 30 minutes
  • #SBATCH --time 30:00 → 30 minutes aussi

L'option courte est -t 24:00:00.

Un job qui demande plus de ressources que le walltime maximal autorisé reste indéfiniment dans la file d'attente.

--nodes, -N

Le nombre de nœuds demandés. Par exemple, pour demander 1 nœud (valeur par défaut)

  • #SBATCH --nodes=1

Pour demander au moins 2 et au plus 4 nœuds

  • #SBATCH --nodes=2-4

--ntasks-per-node

Le nombre de cœurs demandés par nœud (ici 1 cœur, valeur par défaut). L'option est à utiliser en combinaison avec --nodes

  • #SBATCH --ntasks-per-node=1

--job_name, -J

Le nom du job tel qu'il apparaît dans les différentes commandes de Slurm

  • #SBATCH --job-name=my_job

--mem

La taille mémoire maximum demandé par nœud (ici 1024 Mo ou 1 Go, valeur par défaut).

  • #SBATCH --mem=1024M

Slurm accepte d'autres formats que M (défaut), par exemple G. Les deux options suivantes sont équivalentes

  • SBATCH --mem=2048 → 2048 Mo
  • SBATCH --mem=2G → 2 Go → 2048 Mo
attention

à la différence entre --mem=128G et --mem=128000! Un job qui demande --mem=128G (131072 Mo) ne pourra pas utiliser les nœuds avec 128 Go de mémoire (voir ici), ces derniers étant configurés avec MEMORY=128000 dans Slurm.

Voir ceci pour plus d'informations pour bien choisir cette valeur.

--mail_user

Pour recevoir un email à la fin du job (ou en cas d'erreur)

#SBATCH --mail-type=ALL
#SBATCH --mail-user=you@univ-lille.fr

--gres

gres signifie consumable generic resources. Le plus souvent gres est utilisé pour réserver des GPUs (voir ici pour plus d'informations). Par exemple,

  • #SBATCH --gres=gpu:2

demande une réservation de 2 GPUs par nœud (sans spécifier le type de GPU) La commande sbatch --gres=help permet de lister les gres disponibles.

--output,--error

permettent de spécifier le nom des fichiers de sortie.

Par défaut, pour chaque job les sorties stdout et stderr sont redirigés vers un fichier slurm-%j.out (où %j est le SLURM_JOB_ID) localisé dans le dossier de lancement.

Il est possible de créer des fichiers de sortie par tâche ou par nœud, par exemple. La documentation de Slurm explique comment créer des noms de fichiers de sortie à partir des paramètres d'un job.