Preskočiť na obsah

Monitorovanie úloh

Monitorovanie úloh v SLURM je nevyhnutné pre pochopenie využitia zdrojov a riešenie problémov s výkonom úloh.

Štatistické metriky bežiacich úloh

Príkaz sstat umožňuje používateľom získať stavové informácie o momentálne bežiacich úlohách, vrátane detailov o využití CPU, informáciách o taskoch, informáciách o uzloch, využití pamäte (RSS) a virtuálnej pamäti (VM).

Na skontrolovanie štatistík úlohy použite:

sstat --jobs=<jobid>

Zobrazenie informácií o bežiacej úlohe

sstat --jobs=<jobid>
  JobID         MaxVMSize  MaxVMSizeNode  MaxVMSizeTask  AveVMSize     MaxRSS MaxRSSNode MaxRSSTask     AveRSS MaxPages MaxPagesNode   MaxPagesTask   AvePages     MinCPU MinCPUNode MinCPUTask     AveCPU   NTasks AveCPUFreq ReqCPUFreqMin ReqCPUFreqMax ReqCPUFreqGov ConsumedEnergy  MaxDiskRead MaxDiskReadNode MaxDiskReadTask  AveDiskRead MaxDiskWrite MaxDiskWriteNode MaxDiskWriteTask AveDiskWrite TRESUsageInAve TRESUsageInMax TRESUsageInMaxNode TRESUsageInMaxTask TRESUsageInMin TRESUsageInMinNode TRESUsageInMinTask TRESUsageInTot TRESUsageOutAve TRESUsageOutMax TRESUsageOutMaxNode TRESUsageOutMaxTask TRESUsageOutMin TRESUsageOutMinNode TRESUsageOutMinTask TRESUsageOutTot
  ------------ ---------- -------------- -------------- ---------- ---------- ---------- ---------- ---------- -------- ------------ -------------- ---------- ---------- ---------- ---------- ---------- -------- ---------- ------------- ------------- ------------- -------------- ------------ --------------- --------------- ------------ ------------ ---------------- ---------------- ------------ -------------- -------------- ------------------ ------------------ -------------- ------------------ ------------------ -------------- --------------- --------------- ------------------- ------------------- --------------- ------------------- ------------------- ---------------
  152295.0          2884M           n143              0   2947336K    253704K       n143          0    253704K       11         n143              0         11   00:06:04       n143          0   00:06:04        1     10.35M       Unknown       Unknown       Unknown              0     29006427            n143               0     29006427     11096661             n143                0     11096661 cpu=00:06:04,+ cpu=00:06:04,+ cpu=n143,energy=n+ cpu=00:00:00,fs/d+ cpu=00:06:04,+ cpu=n143,energy=n+ cpu=00:00:00,fs/d+ cpu=00:06:04,+ energy=0,fs/di+ energy=0,fs/di+ energy=n143,fs/dis+           fs/disk=0 energy=0,fs/di+ energy=n143,fs/dis+           fs/disk=0 energy=0,fs/di+

V predvolenom nastavení sstat poskytuje rozsiahly výstup. Na prispôsobenie zobrazovaných metrík použite --format. Príklad niektorých z týchto premenných je uvedený v tabuľke nižšie:

Zobrazenie formátovaných informácií o bežiacej úlohe

sstat --format JobID,NTasks,nodelist,MaxRSS,MaxVMSize,AveRSS,AveVMSize 152295
  JobID          NTasks             Nodelist     MaxRSS  MaxVMSize     AveRSS  AveVMSize
  ------------ -------- -------------------- ---------- ---------- ---------- ----------
  152295.0            1                 n143 183574492K 247315988K    118664K    696216K

Ak váš skript nepoužíva srun, sstat poskytuje informácie o kroku .batch. Pre metriky jednotlivých krokov pustite každý krok s srun: vaše batch skripty by mali dodržiavať nasledovný formát:

#!/bin/bash
#SBATCH ...
#SBATCH ...
# set environment up
module load ...

# launch job steps
srun <command to run> # that would be step 1
srun <command to run> # that would be step 2

Hlavné metriky, ktoré si môžete chcieť prejsť, sú uvedené nižšie.

Premenná Popis
avecpu Priemerný čas CPU všetkých úkonov v úlohe.
averss Priemerná veľkosť rezidentnej množiny (RSS) všetkých úkonov.
avevmsize Priemerná virtuálna pamäť všetkých úkonov v úlohe.
jobid ID úlohy.
maxrss Maximálna veľkosť rezidentnej množiny (RSS) všetkých úkonov v úlohe.
maxvsize Maximálna veľkosť virtuálnej pamäte všetkých úkonov v úlohe.
ntasks Počet úkonov v úlohe.

Viac informácií nájdete v dokumentácii sstat alebo zadajte sstat --help.

Monitorovanie využitia CPU bežiacich úloh

Po spustení úlohy vám bude poskytnuté číslo úlohy. Vracia sa okamžite po odoslaní úlohy. Napríklad:

sbatch my_script.sh 
  Submitted batch job 38678

V príklade vyššie je "38678" naše číslo úlohy. Ak ste to číslo nestihli zapísať, existujú ďalšie spôsoby, ako ho nájsť. Jedným je použitie ;squeue`:

squeue -u user1
  JOBID PARTITION     NAME     USER  ST       TIME  NODES NODELIST(REASON)
  38678 short         myjob.sh user1 R        3:35      1 n079

V príklade vyššie špecifikujeme filtre používateľa -u, čím obmedzíme output na úlohy daného používateľa. Opäť vidíme JOBID 38678. Vidíme aj stĺpec NODELIST;, ktorý nám ukazuje, že úloha je spustená na uzlen079`. Táto informácia je kľúčová pre monitorovanie výkonu úlohy.

Keď viete, na akom uzle (uzloch) vaša úloha beží, môžete sa k nemu priamo pripojiť pomocou SSH. Napríklad, ak vaša úloha beží na n079:

ssh n079

Najpriamejší spôsob monitorovania bežiacej úlohy je prihlásenie sa na príslušný uzol pomocou ssh a použitie rôznych nástrojov na monitorovanie kľúčových ukazovateľov výkonu, ako sú zaťaženie, využitie pamäte, správanie sa vlákien atď.

Užitočné príkazové riadkové nástroje

Mnohé príkazy sú prístupné priamo zo shellu a niektoré ďalšie sú poskytované ako inštalácie modulových súborov. Niektoré bežne používané príkazy sú:

  • top - zobrazuje zoznam bežiacich procesov so zhrnutím využitia CPU, využitia pamäte atď.
  • free - zobrazuje využitie pamäte. Pridajte -g na zobrazenie využitia pamäte v gigabytoch.
  • vmstat - zobrazuje štatistiky využitia pamäte
  • lsof - "list open files" (vypísať otvorené súbory) je užitočný na zobrazenie otvorených súborov, ktoré sa čítajú a/alebo zapisujú
  • uptime - zobrazuje zaťaženie systému pre 1-, 5- a 15-minútové priemery
  • ps -e - zobrazuje aktívne bežiace procesy
  • pstree - zobrazuje schématický strom procesov

Každý z vyššie uvedených príkazov možno vypísať ako je, alebo s rôznymi modifikáciami. Iné príkazy, ako je grep, môžu byť užitočné na filtrovanie výstupu príkazov a izoláciu žiadaných položiek. Možnosti použitia týchto príkazov sú prakticky neobmedzené a tento dokument nemože pokrývať všetky. Možnosti príkazov ktoréhokoľvek z nich môžete zistiť použitím príkazu man <command name>. Nižšie je uvedených niekoľko užitočných príkladov, ktoré sa môžu hodiť.

Príkaz uptime a zaťaženie uzla

Príkaz uptime sa dá použiť na odhad zaťaženia výpočtového uzla.

Hodnota load average (priemeru zaťaženia) približne zodpovedá počtu procesov, ktoré sú aktívne bežiace alebo čakajú na čas CPU.

Všeobecné pravidlo: ak je load average blízko počtu CPU jadier dostupných na uzle, uzol je plne využitý. Napríklad na uzle so 64 CPU jadrami naznačuje load average blízko 64, že všetky jadrá sú obsadené.

ssh n079
uptime
  13:56:51 up 150 days, 22:48, 1 user, load average: 63.8, 64.1, 62.6

V príklade vyššie sú load average pre 1, 5 a 15 minút blízko počtu CPU jadier na uzle, čo naznačuje, že uzol je plne využitý.

Príkaz top a využitie CPU podľa procesov

Príkaz top je obzvlášť užitočný, keď sa snažíte zistiť, koľko procesorov vaše úlohy používajú. Napríklad, ak vidíte, že na uzle beží viacero úloh (vrátane vašej), a kontrola zaťaženia ukazuje, že uzol je príliš zaťažený. Ako môžete zistiť či ide o váš proces, alebo niekoho iného? Príkaz "top" pomáha rozložiť využitie CPU podľa procesov:

ssh n079
top
  top - 14:01:15 up 150 days, 22:43,  1 user,  load average: 63.8, 64.1, 62.6
  Tasks: 716 total,  65 running, 651 sleeping,   0 stopped,   0 zombie
  %Cpu(s): 99.1 us,  0.9 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  KiB Mem : 26379443+total, 21490476+free, 36416432 used, 12473228 buff/cache
  KiB Swap:        0 total,        0 free,        0 used. 21900358+avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  2080 user1     20   0   10.2g 427328  85664 R 100.0  0.2  11:55.89 vasp_std
  2081 user1     20   0   10.2g 404920  64316 R 100.0  0.2  11:55.70 vasp_std
  2082 user1     20   0   10.2g 390936  57336 R 100.0  0.1  11:56.08 vasp_std
  2083 user1     20   0   10.2g 415048  78996 R 100.0  0.2  11:55.64 vasp_std
  ...
  2144 user1     20   0   10.2g 388968  84112 R  99.0  0.1  13:19.48 vasp_std
  365  root      20   0       0      0      0 S   0.3  0.0   0:07.53 kworker/8:1
  373  root      20   0       0      0      0 S   0.3  0.0   0:07.10 kworker/5:1
  2718 root      20   0  173692   3012   1624 R   0.3  0.0   0:00.74 top

Obmedzený SSH prístup

Pozor, priamy prístum máte len k uzlom, na ktorých vaša aplikácia beží. Keď úloha skončí, vaše `ssh; spojenie sa tiež ukončí.

Štatistické metriky minulých úloh

sacct - accounting informácie o úlohách

Príkaz sacct je možné použiť na zobrazenie stavových informácií z histórie úloh používateľa na základe mena používateľa a/alebo ID úlohy SLURM. V predvolenom nastavení sacct zobrazuje iba informácie o úlohách používateľa za aktuálny deň.

sacct --jobs=<jobid> [--format=metric1,...]

Zobrazenie informácií o dokončenej úlohe

 sacct --jobs=<jobid>
   JobID            JobName  Partition    Account  AllocCPUS      State ExitCode
   ------------- ---------- ---------- ---------- ---------- ---------- --------
   <jobid>             name      short  <project>        512    TIMEOUT      0:0
   <jobid>.batch      batch             <project>         64  CANCELLED     0:15
   <jobid>.exte+     extern             <project>        512  COMPLETED      0:0
   <jobid>.0     hydra_bst+             <project>        512     FAILED      5:0

Použite -X slúži na agregáciu štatistík relevantných pre samotnú alokáciu úlohy, bez zohľadnenia krokov úlohy.

Zobrazenie agregovaných informácií o dokončenej úlohe

 sacct -X --jobs=<jobid>
   JobID            JobName  Partition    Account  AllocCPUS      State ExitCode
   ------------- ---------- ---------- ---------- ---------- ---------- --------
   <jobid>             name      short  <project>        512    TIMEOUT      0:0

Použitím --starttime (-S) príkaz hľadá ďalej do minulosti až po zadaný dátum. Môže sa kombinovať s --endtime (-E):

sacct [-X] -u <user>  [-S YYYY-MM-DD] [-E YYYY-MM-DD] [--format=metric1,...] # Specify user and start and end dates

--format sa dá použiť na výber výstupu príkazu (úplný zoznam premenných nájdete s príznakom --helpformat):

sacct [-X] -A <account> --format=JobID,JobName,Partition,State,Elapsed,MaxRSS # Display account jobs in a custom format

sacct názvy premenných formátu
Premenná Popis
Account Účet, pod ktorým sa úloha spúšťala.
AveCPU Priemerný (systém + používateľ) čas CPU všetkých úkonov v úlohe.
AveRSS Priemerná veľkosť rezidentnej množiny (RSS) všetkých úkonov v úlohe.
AveVMSize Priemerná veľkosť virtuálnej pamäte všetkých úkonov v úlohe.
CPUTime Formátovaný (uplynutý čas * CPU) počet použitého úlohou alebo krokom.
Elapsed Uplynutý čas úlohy formátovaný ako DD-HH:MM:SS.
ExitCode Exit kód vrátený skriptom úlohy alebo salloc.
JobID ID úlohy.
JobName Názov úlohy.
MaxRSS Maximálna veľkosť rezidentnej množiny (RSS) všetkých úkonov v úlohe.
MaxVMSize Maximálna veľkosť virtuálnej pamäte všetkých úkonov v úlohe.
MaxDiskRead Maximálny počet bajtov prečítaných všetkými úkonmi v úlohe.
MaxDiskWrite Maximálny počet bajtov zapisaných všetkými úkonmi v úlohe.
ReqCPUS Požadovaný počet CPU.
ReqMem Požadované množstvo pamäte.
ReqNodes Požadovaný počet uzlov.
NCPUS Počet CPU použitých v úlohe.
NNodes Počet uzlov použitých v úlohe.
User Prihlasovacie meno osoby, ktorá spúšťala úlohu.

Úplný zoznam premenných je možné zobrasiť s využitím --helpformat, v dokumentácii sacct alebo pomocou príkazu sacct --help.

seff - accounting informácie o úlohách

Tento príkaz sa dá použiť na zistenie informácií o efektívnosti úloh, ktoré sa dokončili a opustili frontu. Ak tento príkaz spustíte, keď je úloha ešte v stave R (Running), môže poskytovať nesprávne informácie.

Utility seff vám pomôže sledovať efektívnosť CPU/pamäte. Príkaz sa volá takto:

seff <jobid>

Úlohy s rozdielnou efektívnosťou využitia CPU/pamäte
seff <jobid>
  Job ID: <jobid>
  User/Group: user1/group1
  State: COMPLETED (exit code 0)
  Nodes: 1
  Cores per node: 32
  CPU Utilized: 41-01:38:14
  CPU Efficiency: 99.64% of 41-05:09:44 core-walltime
  Job Wall-clock time: 1-11:19:38
  Memory Utilized: 2.73 GB
  Memory Efficiency: 2.13% of 128.00 GB
seff <jobid>
  Job ID: <jobid>
  User/Group: user1/group1
  State: COMPLETED (exit code 0)
  Nodes: 1
  Cores per node: 16
  CPU Utilized: 14:24:49
  CPU Efficiency: 23.72% of 2-12:46:24 core-walltime
  Job Wall-clock time: 03:47:54
  Memory Utilized: 193.04 GB
  Memory Efficiency: 75.41% of 256.00 GB
seff <jobid>
  Job ID: <jobid>
  User/Group: user1/group1
  State: COMPLETED (exit code 0)
  Nodes: 1
  Cores per node: 64
  CPU Utilized: 87-16:58:22
  CPU Efficiency: 86.58% of 101-07:16:16 core-walltime
  Job Wall-clock time: 1-13:59:19
  Memory Utilized: 212.39 GB
  Memory Efficiency: 82.96% of 256.00 GB

Tento príklad ilustruje veľmi zlú úlohu z hľadiska efektívnosti využitia CPU/pamäte (pod 4%): úloha používateľa zaberala celý 64-jadrový uzol, pričom využila len 3,55 % prideleného core-walltime.

seff <jobid>
  Job ID: <jobid>
  User/Group: user1/group1
  State: COMPLETED (exit code 0)
  Nodes: 1
  Cores per node: 64
  CPU Utilized: 00:08:33
  CPU Efficiency: 3.55% of 04:00:48 core-walltime
  Job Wall-clock time: 00:08:36
  Memory Utilized: 55.84 MB
  Memory Efficiency: 0.05% of 112.00 GB

seff <jobid>
  Job ID: <jobid>
  User/Group: user1/group1
  State: COMPLETED (exit code 0)
  Nodes: 1
  Cores per node: 64
  CPU Utilized: 34-17:07:26
  CPU Efficiency: 95.80% of 36-05:41:20 core-walltime
  Job Wall-clock time: 13:35:20
  Memory Utilized: 5.18 GB
  Memory Efficiency: 0.00% of 0.00 MB
  Nvidia SXM A100 40GB #1:
    GPU Efficiency: 36.90%
    Memory Utilized: 0.00 GB (0.00%)
  Nvidia SXM A100 40GB #2:
    GPU Efficiency: 36.82%
    Memory Utilized: 0.00 GB (0.00%)
  Nvidia SXM A100 40GB #3:
    GPU Efficiency: 36.92%
    Memory Utilized: 0.00 GB (0.00%)
  Nvidia SXM A100 40GB #4:
    GPU Efficiency: 36.74%
    Memory Utilized: 0.00 GB (0.00%)
Created by: Marek Štekláč, Marek Štekláč