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    <username>   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: <username>/<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 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 <username>

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=15 job.sh
--profile=task

Active l’agent de profilage

--acctg-freq=task=<nombre>

Paramètre optionnel. Définit la fréquence d’interrogation en secondes (entre 1 et 15 sec.). Si absent, le défaut est : <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 :

  1. Lancez la session (ici, l’exemple d’un job interactif GPU) :

    % srun -t 0-02:00 -n 4 --profile=task --mem 2G --pty --gpus 1  bash -i
    
  2. Dans la session, récupérez le jobid :

    % echo $SLURM_JOBID
    
  3. Une fois la session terminée (exit ou Ctrl-d), lancez le job de profilage comme décrit plus haut ci-dessus.