Débuter avec SLURM
SLURM (Simple Linux Utility for Resource Management) est un planificateur de tâches gratuit et open source pour les noyaux de type Linux et Unix, utilisé par de nombreux superordinateurs et grappes d’ordinateurs dans le monde.
Principales commandes
Commmande |
Utilité |
---|---|
|
interrogation des files d’attente |
|
soumission d’un job dans une file d’attente (appelées partitions dans SLURM) |
|
réservation de ressources en interactif |
|
crée une allocation de ressources, à utiliser avec |
|
suppression d’un job |
|
suppression d’un job |
|
liste des jobs dans les files d’attente |
|
prorités relatives des jobs en attente |
|
affiche des données relatives aux tâches |
|
affiche l’efficatité d’un job terminé |
L’usage de chaque commande peut être explicité avec le manuel en ligne, par exemple comme
man sinfo
Avant de soumettre un job
Il peut être utile de regarder quelles sont les ressources immédiatement disponibles. Pour cela, vous pouvez utiliser la commande sinfo
avec l’option :
sinfo -s
qui affiche un tableau contenant le nom des partitions (la partition par défaut est indiquée avec une étoile *), leur disponibilité, le temps maximal de calcul permis dans cette partition (qui diffère du temps proposé par défaut), le nombre de noeuds total (T) et la liste des noeuds présents dans la partition :
PARTITION AVAIL TIMELIMIT NODES(A/I/O/T) NODELIST
haswell* up 14-00:00:0 33/31/0/64 haswell-f20-[01-03],haswell-t16-[03-54],haswell-x20-[01-08],haswell-x44-01
skylake up 7-00:00:00 20/0/0/20 skylake-f32-[01-06],skylake-t32-[01-14]
cascade up 7-00:00:00 49/3/0/52 cascade-f32-[01-08],cascade-t32-[01-40],cascade-x32-[01-04]
gpu up 4-00:00:00 1/1/0/2 cascade-gpu-[01-02]
test up 1:00:00 0/2/0/2 haswell-t16-[01-02]
Pour donner les informations sur une partition donnée :
sinfo -p <partition>
par exemple :
sinfo -p haswell
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
haswell* up 14-00:00:0 3 mix haswell-x20-[01,04,06]
haswell* up 14-00:00:0 58 alloc haswell-f20-[01-03],haswell-t16-[03-47,49-54],haswell-x20-[05,07-08],haswell-x44-01
haswell* up 14-00:00:0 3 idle haswell-t16-48,haswell-x20-[02-03]
Pour connaître le détail de la configuration de chaque partition, vous pouvez faire
scontrol show partition <partition-name>
PartitionName=haswell
AllowGroups=ALL AllowAccounts=ALL AllowQos=ALL
AllocNodes=ALL Default=YES QoS=N/A
DefaultTime=01:00:00 DisableRootJobs=NO ExclusiveUser=NO GraceTime=0 Hidden=NO
MaxNodes=UNLIMITED MaxTime=14-00:00:00 MinNodes=0 LLN=NO MaxCPUsPerNode=UNLIMITED
Nodes=haswell-t16-[03-54],haswell-f20-[01-03],haswell-x20-[01-08],haswell-x44-01
PriorityJobFactor=1 PriorityTier=1 RootOnly=NO ReqResv=NO OverSubscribe=YES:4
OverTimeLimit=NONE PreemptMode=OFF
State=UP TotalCPUs=1096 TotalNodes=64 SelectTypeParameters=NONE
JobDefaults=(null)
DefMemPerNode=UNLIMITED MaxMemPerNode=UNLIMITED
Notez que la limite de la ressource mémoire par noeud n’est pas spécifiée lorsque la partition est hétérogène. Pour connaître le détail de la mémoire de chaque noeud, vous pouvez regarder une commande équivalente par noeud
scontrol show node haswell-t16-26
NodeName=haswell-t16-26 Arch=x86_64 CoresPerSocket=8
CPUAlloc=0 CPUTot=16 CPULoad=0.01
AvailableFeatures=Haswell,QLogic
ActiveFeatures=Haswell,QLogic
Gres=(null)
NodeAddr=haswell-t16-26 NodeHostName=haswell-t16-26 Version=20.11.8
OS=Linux 3.10.0-1160.66.1.el7.x86_64 #1 SMP Wed May 18 16:02:34 UTC 2022
RealMemory=64000 AllocMem=0 FreeMem=62993 Sockets=2 Boards=1
State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=haswell
BootTime=2022-05-20T15:16:56 SlurmdStartTime=2022-05-20T15:18:11
CfgTRES=cpu=16,mem=62.50G,billing=16
AllocTRES=
CapWatts=n/a
CurrentWatts=0 AveWatts=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
Comment=(null)
où la mémoire du noeud est donnée en Mo
par
RealMemory=64000
et la mémoire effectivement disponible, inférieure au maximum de l’architecture, est donnée en Mo
par
FreeMem=62993
Ici, le noeud regardé étant libre (idle
), vous pourriez demander le maximum de la mémoire du noeud dans votre script SLURM, en spécifiant
%SBATCH --mem=64000
ce qui vous allouera, par noeud, la ressource maximale disponible, à savoir :
mem=62.50G
Pour connaître la mémoire de chaque architecture, vous pouvez faire :
sinfo -N -l
ce qui retourne une liste du type
NODELIST NODES PARTITION STATE CPUS S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON
cascade-f32-01 1 cascade allocated 32 2:16:1 384000 0 10 CascadeL none
cascade-f32-02 1 cascade allocated 32 2:16:1 384000 0 10 CascadeL none
(...)
cascade-f32-08 1 cascade allocated 32 2:16:1 384000 0 10 CascadeL none
cascade-gpu-01 1 gpu down* 16 2:8:1 190000 0 50 GPU,Mell Not responding
cascade-gpu-02 1 gpu completing~ 16 2:8:1 190000 0 50 GPU,Mell none
cascade-gpu-03 1 gpu drained* 16 2:8:1 380000 0 50 GPU,Mell need nvidia driver
cascade-t32-01 1 cascade allocated 32 2:16:1 190000 0 1 CascadeL none
(...)
cascade-t32-40 1 cascade allocated 32 2:16:1 190000 0 1 CascadeL none
cascade-x32-01 1 cascade allocated 32 2:16:1 768000 0 20 CascadeL none
(...)
cascade-x32-04 1 cascade allocated 32 2:16:1 768000 0 20 CascadeL none
haswell-f20-01 1 haswell* mixed 20 2:10:1 270000 0 10 Haswell, none
(...)
haswell-f20-03 1 haswell* allocated 20 2:10:1 270000 0 10 Haswell, none
haswell-t16-01 1 test idle 16 2:8:1 64000 0 1 Haswell, none
(...)
haswell-t16-54 1 haswell* idle 16 2:8:1 64000 0 1 Haswell, none
haswell-x20-01 1 haswell* allocated 20 2:10:1 384000 0 20 Haswell, none
(...)
haswell-x20-08 1 haswell* idle 20 2:10:1 384000 0 20 Haswell, none
haswell-x44-01 1 haswell* allocated 44 2:22:1 512000 0 30 Haswell none
skylake-f32-01 1 skylake allocated 32 2:16:1 384000 0 10 SkyLake, none
(...)
skylake-f32-06 1 skylake allocated 32 2:16:1 384000 0 10 SkyLake, none
skylake-t32-01 1 skylake allocated 32 2:16:1 190000 0 1 SkyLake, none
(...)
skylake-t32-14 1 skylake allocated 32 2:16:1 190000 0 1 SkyLake, none
Soumettre un job
La commande qui soumet une tâche au gestionnaire de tâches est
sbatch <script.slurm>
où <script.slurm>
est un fichier de soumission, dans laquelle les ressources demandées sont spécifiées dans un en-tête et les commandes à effectuer sur ces ressources sont scriptées ensuite, en bash.
Pour modifier les ressources demandées, il est possible de les passer en options avant le nom du script. Par exemple, pour aller sur la partition test
avec 2 processus, vous pouvez faire
sbatch -p test -n 2 <script.slurm>
Une demande d’allocation de ressources en interactive exploite généralement la spécification des options en ligne de commande. Par exemple pour réserver 1 noeud de la queue test
avec 1Go de mémoire, et 4 processus par noeud :
salloc -p test -N 1 -n 4 -mem=1G $SHELL
ou directement
srun -p test -N 1 -n 4 -mem=1G --pty $SHELL
Après soumission du job
Lister ses job en queue
squeue -u <user>
Avoir une estimation de l’heure à laquelle le job démarre
squeue --start
Détailler l’ensemble des informations traitées par SLURM pour un job donné
scontrol show job <jobid>
Une fois l’exécution du job achevée
Vous pouvez consulter votre historique en faisant
sreport cluster UserUtilizationByAccount account=<user> -t hours
Si le job s’est terminé avec succès, une estimation de l’efficacité de l’usage des ressources peut être obtenu par
seff <jobid>
Pour obtenir la liste des jobs que vous avez traités, vous pouvez utiliser la commande sacct
. Par exemple
sacct -u <user> -S 2020-01-01 --partition cascade
retourne l’ensemble des jobs de <user>
sur la partition cascade
depuis le 1er janvier 2020.