Suivi des jobs
Etat du service de la ferme
Pour évaluer l’état d’occupation de la ferme de calcul, vous pouvez vous référer au portail des utilisateurs ou lancer la commande suivante :
% sjstat | more
Scheduling pool data:
-------------------------------------------------------------
Pool Memory Cpus Total Usable Free Other Traits
-------------------------------------------------------------
htc* 265000Mb 64 190 190 0 htc,x86_64,el9
htc* 540000Mb 112 56 56 0 htc,x86_64,el9
htc_inter 192934Mb 64 1 1 0 htc_interactive,x86_64,el9
htc_inter 128361Mb 40 2 2 0 htc_interactive,x86_64,el9
htc_highm 1546522Mb 40 1 1 1 htc_highmem,x86_64,el9
gpu 191850Mb 24 9 9 0 gpu,x86_64,el9
[..]
Statut de soumission d’un job
La commande squeue
permet l’affichage de différentes informations concernant un job. Elle donne, entre autres, le temps d’exécution, l’état courant (colonne ST
, avec état possible R
pour running et PD
pour pending), le nom du job, et la partition dans laquelle le job est exécuté :
% squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
465 htc hello user R 0:01 1 ccwtbslurm01
Les principales options de squeue
sont :
-t [running|pending]
sélectionne l’état running ou pending pour les jobs à afficher
[[-v] -l] -j
affiche un job donné, avec
-l
pour un format dit long, et-v
pour une sortie plus détaillée, verbeuse.
Attention
La sortie de squeue
coupe à 8 caractères certains champs du job. Pour avoir le nom complet utilisez l’option -O
. Ci-dessous un exemple pour le nom du job :
% squeue -O JobID,Name
Pour plus d’informations sur cette commande et les codes de sorties, veuillez vous référer à la documentation officielle et la commande en ligne ci-dessous :
% man squeue
Efficacité d’un job
La commande seff
affiche les ressources utilisées par un job donné, et calcule son efficacité :
% seff <jobid>
Job ID: <jobid>
Cluster: ccslurmlocal
User/Group: <userid>/<groupid>
State: CANCELLED (exit code 0)
Cores: 1
CPU Utilized: 00:12:50
CPU Efficiency: 98.59% of 00:13:01 core-walltime
Job Wall-clock time: 00:13:01
Memory Utilized: 120.00 KB
Memory Efficiency: 0.00% of 0.00 MB
Attention
La commande seff
échantillonne l’activité de votre job environ tous les 30 secondes. La valeur du champ Memory Utilized
n’est pas donc le maximum absolu de mémoire utilisée, mais le maximum des valeurs échaintillonées. Pour avoir une évaluation plus précise de votre job, veuillez utiliser la méthode expliquée dans le paragraphe Profilage des jobs.
Suspension et altération d’un job
La commande scontrol
permet la gestion des jobs. Avec les options hold
, update
et release
, elle permet respectivement de suspendre un job (le sortir de la queue), de le modifier, puis de le remettre en queue :
% scontrol [hold|update|release] <liste des identifiants des jobs>
Seuls les attributs suivants peuvent être modifiés une fois le job soumis :
la durée d’exécution du job, wall clock limit ;
le nom du job ;
les dépendances du job.
Note
Dans certains cas, ces attributs ne pourront être modifiés que pour les jobs en queue. La durée d’exécution du job pourra être seulement réduite, jamais augmentée.
Les attributs suivants ne peuvent pas être modifiés lorsque le job est en exécution :
le nombre de GPU(s) demandé ;
node(s) ;
memory.
Pour plus de détails sur cette commande, veuillez vous référer à l’aide de la commande scontrol -h
et la doc suivante :
https://slurm.schedmd.com/scontrol.html#OPT_update
Annulation d’un job
La commande scancel
permet de retirer (annuler) un ou plusieurs jobs :
% scancel <jobid>
ou tous les jobs d’un utilisateur donné :
% scancel -u <userid>
ou encore toute une série de jobs ayant le même nom :
% scancel -n <jobname>
Il sera nécessaire d’avoir le nom complet de la série de jobs : veuillez vous référer à la commande squeue.
Pour plus de détails sur cette commande, veuillez vous référer à l’aide de la commande scancel -h
.
Statut de fin de job
La commande sacct
vérifie et affiche le statut, la partition et le compte account d’un job :
% sacct
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
1377 stress.sh htc ccin2p3 8 CANCELLED+ 0:0
1381 stress.sh htc ccin2p3 8 COMPLETED 0:0
1381.batch batch ccin2p3 8 COMPLETED 0:0
Il est possible de modifier ponctuellement le formattage via l’option --format
:
% sacct --format="Account,JobID,NodeList,CPUTime,MaxRSS"
Account JobID NodeList CPUTime MaxRSS
---------- ------------ --------------- ---------- ----------
ccin2p3 1523 ccwslurm0001 00:10:14
ccin2p3 1523.batch ccwslurm0001 00:10:14
ccin2p3 1524 ccwslurm0001 00:10:14
ou modifiez la variable d’environnement SACCT_FORMAT
pour définir une nouveau output :
% export SACCT_FORMAT=Account,JobID,NodeList,CPUTime,MaxRSS
% sacct
Account JobID NodeList CPUTime MaxRSS
---------- ------------ --------------- ---------- ----------
... ... ... ... ...
Pour avoir la liste complète des champs disponibles :
% sacct -e
Pour plus de détails sur cette commande, veuillez vous référer à l’aide de la commande sacct -h
.
Profilage des jobs
La plateforme de calcul permet de profiler un job, fournissant à l’utilisateur un fichier html
, qui peut être ouvert dans un navigateur affichant des informations de profilage et des graphiques, et un fichier xml
avec des valeurs de profilage brutes.
Si vous avez besoin de profiler un job, vous devez ajouter au moins une option à votre ligne de soumission :
% sbatch -t 0-01:00 -n 3 --mem 7G --profile=task [--acctg-freq=task=10] job.sh
--profile=task
active l’agent de profilage
--acctg-freq=task=<nombre>
définit la fréquence d’interrogation en secondes (entre 1 et 15 sec.). Par défaut :
<nombre>=15
Après avoir lancé votre job de production avec les options ci-dessus, vous pouvez lancer un second job avec la syntaxe suivante :
% sbatch -t 0-01:00 -n 1 --mem 1G -d <jobid> slurm_profiling <jobid>
<jobid>
étant l’ID du que vous souhaitez profiler. Les fichiers profile_<jobid>.html
et profile_<jobid>.xml
seront créés dans votre répertoire de travail.
Note
Il est tout à fait possible de profiler un job interactif :
Lancez la session (ici, l’exemple d’un job interactif GPU) :
% srun -t 0-02:00 -n 4 --profile=task [--acctg-freq=task=10] --mem 2G --pty --gpus 1 bash -i
Dans la session, récupérez le jobid :
% echo $SLURM_JOBID
Une fois la session terminée (
exit
ou Ctrl-d), lancez le job de profilage comme décrit plus haut ci-dessus.