SLURM - Observer des jobs

Pour observer de plus près le comportement d’un job, on peut utiliser les commandes sstat, ssacct, scontrol et même squeue.

Extrait du man

L’aide des commandes précise :

  • squeue : afficher les informations sur les jobs dans la file d’attente
  • sstat : afficher le status des jobs
  • sacct : afficher les logs des jobs
  • scontrol : afficher/modifier des jobs, noeuds, partitions, réservations, configuration globale

Pour annuler un job :

  • scancel : annuler un job

Statut des jobs et de la nodelist

La commande squeue affiche les informations des jobs dans la file d’attente sous forme de plusieurs colonnes dont ST et NODELIST(REASON). La colonne ST indique le statut du job et NODELIST(REASON) donne plus d’informations sur la raison pour laquelle le job n’a pas démarré.

Statut des jobs

Les jobs passent généralement par plusieurs statuts au cours de leur exécution. Les statuts typiques sont PENDING, RUNNING, SUSPENDED, COMPLETING et COMPLETED :

  • PD : PENDING (en attente d’allocation de ressources)
  • S : SUSPENDED (exécution suspendue car ressources libérés pour d’autres jobs.)
  • R : RUNNING (le job est alloué)
  • CD : COMPLETED (tous les processus sont terminés avec comme code de sortie zéro)
  • CG : COMPLETING (certains processus peuvent encore être actifs)
  • F : FAILED (code de sortie non nul ou autres échecs)

Les autres status se trouvent également dans le MAN de squeue ou ici : http://n0tes.fr/2022/12/03/SLURM-Statut-des-jobs

Statut de la colonne nodelist

La colonne NODELIST(REASON) peut avoir les principaux statuts suivant :

JobHeldUser : le job est bloqué par l’utilisateur
Priority : des jobs de priorité supérieure existent
Resources : en attente que les ressources soient disponibles
BeginTime : heure de lancement pas encore atteinte
Dependency : en attente de fin d’un job dépendant

Les autres status se trouvent également dans le MAN de squeue ou ici : http://n0tes.fr/2022/12/03/SLURM-Statut-des-jobs

Vérification des jobs

Commande squeue

La commande squeue liste les jobs en cours d’exécution, en attente ou terminés. Elle peut également afficher un job précis ou appartenant à un utilisateur.

# squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
16874 n01_25 particule emmetbrown R 17:00 4 n13-[01-04]
16868 node quantique martymcfly R 17:45:45 1 node-01
16869 node timefutur martymcfly R 1:30:19 1 node-01
16873 node gigawatt emmetbrown R 17:08 1 node-02

Il est possible de vérifier les jobs d’un seul utilisateur :

# squeue -u emmetbrown
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
16874 n01_25 particule emmetbrown R 17:00 4 n13-[01-04]
16873 node gigawatt emmetbrown R 17:08 1 node-02

Ou de spécifier les colonnes à afficher ainsi que leur largeur avec l’option -o suivis de la taille comprise entre 0 et 1.

# squeue -j 16874 -o "%.18i %.9P %.8j %.8u %.8T %.10M %.9l %.6D %R %m"
JOBID PARTITION NAME USER STATE TIME TIME_LIMI NODES NODELIST(REASON) MIN_MEMORY
16874 n01_25 particule emmetbrown RUNNING 23:31 1:00:00 4 n13-[01-04] 2000M

Les valeurs par défaut sont :

  • default : %.18i %.9P %.8j %.8u %.2t %.10M %.6D %R
  • -l, --long : %.18i %.9P %.8j %.8u %.8T %.10M %.9l %.6D %R
  • -s, --steps : %.15i %.8j %.9P %.8u %.9M %N

Les autres options se trouvent dans le manuel : https://manpages.org/squeue

Commande sstat

La commande sstat afficher diverses informations sur le job. Exécutez la commande sacct pour vérifier les informations comptables des jobs et des étapes de job dans le journal ou la base de données Slurm.

# sstat -j 23221 -o JobID,NodeList,Pids,MaxRSS,AveRSS,MaxVMSize
JobID Nodelist Pids MaxRSS AveRSS MaxVMSize
------------ ------------ ----------- ---------- ---------- ----------
23221.0 node03-04 158503 3462088K 2681124K 8357328K

Commande sacct

La commande sacct affiche les données des jobs des logs de la base de données SLURM :

# sacct -j 6589 --format JobID,jobname,NTasks,nodelist,MaxRSS,MaxVMSize,AveRSS,AveVMSize
JobID JobName NTasks NodeList MaxRSS MaxVMSize AveRSS AveVMSize
------------ ----------- -------- --------------- ---------- ---------- ---------- ----------
6589 mpiexec+ mynode-[01-03]
6589.batch batch 1 mynode-01 149112K 208648K 149112K 113260K
6589.extern extern 3 mynode-[01-03] 0 4316K 0 4316K
6589.0 orted 2 mynode-[02-03] 141016K 370880K 140024K 370868K

Il est possible d’afficher les jobs pour un utilisateur en particulier :

# sacct --user martymcfly --format JobID,jobname,NTasks,nodelist
JobID JobName NTasks NodeList
------------ ----------- -------- ---------------
5899 mpiexec+ mynode-[04-06]
5899.batch batch 6 mynode-06
5899.extern extern 2 mynode-[04-06]

Il existe une option –-helpformat pour vérifier quelles colonnes de sortie sont disponibles.

Commande scontrol

La commande scontrol est une commande indispensable pour la gestion de SLURM, elle permet d’e configurer a’fficher/modifier les noeuds, partitions, réservations, configuration globale et donne une vue très détaillée des jobs :

# scontrol show job 10046
JobId=10046 Name=myhostname
UserId=da(1000) GroupId=da(1000)
Priority=66264 Account=none QOS=normal WCKey=*123
JobState=COMPLETED Reason=None Dependency=(null)
TimeLimit=UNLIMITED Requeue=1 Restarts=0 BatchFlag=0 ExitCode=0:0
SubmitTime=2010-01-05T10:58:40 EligibleTime=2010-01-05T10:58:40
StartTime=2010-01-05T10:58:40 EndTime=2010-01-05T10:58:40
SuspendTime=None SecsPreSuspend=0
Partition=debug AllocNode:Sid=snowflake:4702
ReqNodeList=(null) ExcNodeList=(null)
NodeList=snowflake0
NumNodes=1 NumCPUs=10 CPUs/Task=2 ReqS:C:T=1:1:1
MinCPUsNode=2 MinMemoryNode=0 MinTmpDiskNode=0
Features=(null) Reservation=(null)
OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)

Voir d’autres exemples : https://www.tigrillolinux.net/index.php/Scontrol_show_jobid_Examples

Annuler des jobs

Avec scancel

Envoyer SIGTERM aux étapes 1 et 3 du job 6660 :

# scancel --signal=TERM 6660.1 6660.3

Annuler le job 6660 ainsi que toutes ses étapes :

# scancel 6660

Envoyer SIGKILL à toutes les étapes du job 4440 sans annulez le job en lui-même :

# scancel --signal=KILL 4440

Envoyer SIGUSR1 aux processus shell batch du job 12333036 :

# scancel --signal=USR1 --batch 3330

Annuler tous les jobs en attente appartenant à bifftannen dans la partition debug:

# scancel --state=PENNDING --user=bifftannen --partition=debug

Annuler uniquement l’ID n°4 du tableau d’un job array ayant pour ID 6660 :

# scancel 6660_4

Avec skill

Il est également possible de faire appel à skill :

# skill <JOB_ID>

Documentation

https://sites.google.com/nyu.edu/nyu-hpc/training-support/general-hpc-topics/slurm-main-commands#h.v4c3l2r4728e
https://hpc.nmsu.edu/discovery/slurm/job-management/
https://manpages.org/sacct
https://manpages.org/sstat
https://manpages.org/squeue
https://manpages.org/scancel
https://slurm.schedmd.com/scontrol.html
https://www.tigrillolinux.net/index.php/Scontrol_Examples
https://www.tigrillolinux.net/index.php/Scontrol_show_jobid_Examples
https://hpc.nmsu.edu/discovery/slurm/slurm-commands/

> Partager <