Skoči na vsebino

Izpis informacij o gruči

Slurm nudi vrsto ukazov za delo z gručo. V tem razdelku si bomo ogledali nekaj primerov uporabe ukazov sinfo, squeue, scontrol in sacct, ki služijo izpisu uporabnih informacij o konfiguraciji in stanju gruče. Podrobne informacijo o vseh ukazih, ki jih podpira Slurm, najdete na domači strani projekta Slurm.

Ukaz sinfo

Ukaz izpiše informacije o stanju gruče, particij (delov gruče) in vozlišč ter računske kapacitete, ki so na voljo. Na voljo je množica stikal, s katerimi lahko lahko bolj natančno določimo informacije, ki jih želimo izpisati o gruči (dokumentacija).

Izpis splošnih informacij o konfiguraciji gruče:

$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
gridlong*    up 14-00:00:0      4 drain* nsc-gsv001,nsc-lou001,nsc-msv001,nsc-vfp002
gridlong*    up 14-00:00:0      3  down* nsc-fp003,nsc-gsv003,nsc-msv006
gridlong*    up 14-00:00:0      1  drain nsc-vfp001
gridlong*    up 14-00:00:0      3  alloc nsc-lou002,nsc-msv[003,018]
gridlong*    up 14-00:00:0      3   resv nsc-fp[005-006],nsc-msv002
gridlong*    up 14-00:00:0     24    mix nsc-fp[002,004,007-008],nsc-gsv[002,004-007],nsc-msv[004-005,007-017,019-020]
gridlong*    up 14-00:00:0      1   idle nsc-fp001
e7           up 14-00:00:0      2 drain* nsc-lou001,nsc-vfp002
e7           up 14-00:00:0      1  drain nsc-vfp001
e7           up 14-00:00:0      1  alloc nsc-lou002
sinfo

V zgornjem izpisu lahko vidimo katere logične particije so na voljo, njihovo stanje, časovno omejitev poslov na posamezni particiji in sezname računskih vozlišč, ki jim pripadajo. Izpis lahko z ustreznimi stikali poljubno prilagajamo, glede na to, kaj nas zanima.

Izpis podrobnejših informacij po posameznih računskih vozliščih:

$ sinfo --Node --long
Tue Jan 05 11:06:02 2021
NODELIST    NODES PARTITION       STATE CPUS    S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON
nsc-fp001       1 gridlong*   allocated 16      2:8:1  64200        0   1000 intel,gp none
nsc-fp002       1 gridlong*   allocated 16      2:8:1  64200        0   1000 intel,gp none
nsc-fp003       1 gridlong*   allocated 16      2:8:1  64200        0   1000 intel,gp none
nsc-fp004       1 gridlong*   allocated 16      2:8:1  64200        0   1000 intel,gp none
nsc-fp005       1 gridlong*    reserved 16      2:8:1  64200        0   1000 intel,gp none
nsc-fp006       1 gridlong*    reserved 16      2:8:1  64200        0   1000 intel,gp none
nsc-fp007       1 gridlong*   allocated 16      2:8:1  64200        0   1000 intel,gp none
nsc-fp008       1 gridlong*   allocated 16      2:8:1  64200        0   1000 intel,gp none
nsc-gsv001      1 gridlong*    reserved 64     4:16:1 515970        0      1 AMD,bigm none
nsc-gsv002      1 gridlong*   allocated 64     4:16:1 515970        0      1 AMD,bigm none
sinfo --Node --long

Zgornji izpis nam za vsako računsko vozlišče v gruči pove: kateri particiji pripada (PARTITION), kakšno je njegovo stanje (STATE), število jeder (CPUS), število procesorskih rež (S), procesorskih jeder v reži (C), strojnih niti (T), količino sistemskega pomnilnika (MEMORY) in morebitne značilke (AVAIL_FEATURES), ki so pripisane danemu vozlišču (npr. tip procesorja, prisotnost grafičnih procesnih enot, itd.).

Deli gruče so lahko vnaprej rezervirani zaradi različnih razlogov (vzdrževalna dela, delavnice, projekti). Primer izpisa aktivnih rezervacij na gruči NSC:

$ sinfo --reservation
RESV_NAME     STATE           START_TIME             END_TIME     DURATION  NODELIST
fri          ACTIVE  2020-10-13T13:57:32  2021-10-13T13:57:32  365-00:00:00  nsc-fp[005-006],nsc-gsv001,nsc-msv002
sinfo --reservation

Zgornji izpis nam izpiše morebitne aktivne rezervacije na gruči, obdobje trajanja rezervacije in seznam vozlišč, ki so del rezervacije. Posamezni rezervaciji je pripisana skupina uporabnikov, ki jo lahko uporablja in se tako izogne čakanju na zaključek poslov uporabnikov, ki rezervacije nimajo.

Ukaz squeue

Poleg konfiguracije gruče nas seveda zanima tudi stanje vrste s posli. Z ukazom squeue lahko poizvedujemo po poslih, ki so trenutno v čakalni vrsti, tečejo ali pa so se že uspešno oziroma neuspešno zaključili (dokumentacija).

Izpis trenutnega stanja vrste s posli:

$ squeue
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
387388  gridlong mc15_14T prdatlas PD       0:00      1 (Priority)
387372  gridlong mc15_14T prdatlas PD       0:00      1 (Resources)
387437  gridlong mc15_14T prdatlas PD       0:00      1 (Priority)
387436  gridlong mc15_14T prdatlas PD       0:00      1 (Priority)
385913  gridlong mc15_14T prdatlas  R   15:57:58      1 nsc-msv004
385949  gridlong mc15_14T prdatlas  R   13:47:49      1 nsc-msv017
squeue

Iz izpisa lahko razberemo identifikator posameznega posla, particijo na kateri teče, ime posla, kateri uporabnik ga je zagnal ter trenutno stanje posla.

Nekaj pomembnejših stanj posla

  • PD (angl. PenDing) - posel čaka v vrsti,
  • R (angl. Running) - posel se izvaja,
  • CG (angl. CompletinG) - posel se zaključuje,
  • CD (angl. CompleteD) - posel je zaključen,
  • F (angl. Failed) - napaka pri izvajanju,
  • S (angl. Suspended) - izvajanje posla je začasno ustavljeno,
  • CA (angl. CAnceled) - posel je preklican,
  • TO (angl. TimeOut) - posel je prekinjen, potekla je časovna omejitev.

Izpis nam vrne tudi informacijo o skupnem času izvajanja posla ter seznam vozlišč, na katerih se posel izvaja, oziroma razlog, zakaj se posel še ni začel izvajati.

Ponavadi nas najbolj zanima stanje poslov, ki smo jih zagnali sami. Izpis lahko omejimo na posle izbranega uporabnika s pomočjo stikala --user.

Primer izpisa poslov, ki so last uporabnika gen012:

$ squeue --user gen012
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
381650  gridlong pmfuzzy_   gen012  R 7-03:13:06      1 nsc-msv020
381649  gridlong pmfuzzy_   gen012  R 7-03:15:06      1 nsc-msv018
381646  gridlong pmfuzzy_   gen012  R 7-03:18:28      1 nsc-msv008
381643  gridlong pmautocc   gen012  R 7-03:25:38      1 nsc-msv017
381641  gridlong pmautocc   gen012  R 7-03:28:26      1 nsc-msv007
381639  gridlong pmautocc   gen012  R 7-03:32:40      1 nsc-msv004
squeue --user gen012

Poleg tega lahko na primer omejimo izpis samo na tiste posle, ki so v določenem stanju. To storimo s pomočjo stikala --states.

Primer izpisa vseh poslov, ki trenutno čakajo na izvajanje (PD):

$ squeue --states=PD
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
387438  gridlong mc15_14T prdatlas PD       0:00      1 (Priority)
387437  gridlong mc15_14T prdatlas PD       0:00      1 (Priority)
387436  gridlong mc15_14T prdatlas PD       0:00      1 (Priority)
387435  gridlong mc15_14T prdatlas PD       0:00      1 (Priority)
387434  gridlong mc15_14T prdatlas PD       0:00      1 (Resources)
squeue --states=PD

Ukaz scontrol

Včasih želimo še bolj podrobne informacije o neki particiji, vozlišču ali poslu. Dobimo jih z ukazom scontrol (dokumentacija). Spodaj je navedenih nekaj primerov uporabe tega ukaza.

Primer izpisa podrobnejših informacij o posamezni particiji:

$ scontrol show partition gridlong
PartitionName=gridlong
  AllowGroups=ALL AllowAccounts=ALL AllowQos=ALL
  AllocNodes=ALL Default=YES QoS=N/A
  DefaultTime=00:30:00 DisableRootJobs=NO ExclusiveUser=NO GraceTime=0 Hidden=NO
  MaxNodes=UNLIMITED MaxTime=14-00:00:00 MinNodes=0 LLN=NO MaxCPUsPerNode=UNLIMITED
  Nodes=nsc-msv0[01-12,14-15],nsc-gsv0[01-03],nsc-fp0[01-04,06-08],nsc-lou0[01-16],nsc-vfp0[01-02]
  PriorityJobFactor=1 PriorityTier=1 RootOnly=NO ReqResv=NO OverSubscribe=NO
  OverTimeLimit=NONE PreemptMode=OFF
  State=UP TotalCPUs=4016 TotalNodes=42 SelectTypeParameters=NONE
  JobDefaults=(null)
  DefMemPerCPU=2000 MaxMemPerNode=UNLIMITED
  TRESBillingWeights=CPU=1.0,Mem=0.25G
scontrol show partition gridlong

Primer izpisa podrobnejših informacij o računskem vozlišču nsc-lou003:

$ scontrol show node nsc-lou003
NodeName=nsc-lou003 Arch=x86_64 CoresPerSocket=64
  CPUAlloc=128 CPUTot=128 CPULoad=114.57
  AvailableFeatures=AMD,zen3
  ActiveFeatures=AMD,zen3
  Gres=(null)
  NodeAddr=nsc-lou003 NodeHostName=nsc-lou003 Version=20.11.9
  OS=Linux 5.15.81-1.el8.vega.x86_64 #1 SMP Tue Dec 6 15:38:27 CET 2022
  RealMemory=257355 AllocMem=254968 FreeMem=89742 Sockets=1 Boards=1
  State=ALLOCATED ThreadsPerCore=2 TmpDisk=0 Weight=1000 Owner=N/A MCS_label=N/A
  Partitions=gridlong
  BootTime=2023-03-13T11:24:12 SlurmdStartTime=2023-03-13T11:24:32
  CfgTRES=cpu=128,mem=257355M,billing=128
  AllocTRES=cpu=128,mem=254968M
  CapWatts=n/a
  CurrentWatts=0 AveWatts=0
  ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
  Comment=(null)
scontrol show node nsc-lou003  

Primer izpisa podrobnejših informacij o poslu z identifikatorjem 387489:

$ scontrol show job 387489
JobId=387489 JobName=mc15_14TeV_5005
  UserId=prdatlas002(19002) GroupId=prdatlas(19000) MCS_label=N/A
  Priority=34890 Nice=69 Account=prdatlas QOS=normal
  JobState=PENDING Reason=Priority Dependency=(null)
  Requeue=0 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
  RunTime=00:00:00 TimeLimit=1-13:52:00 TimeMin=N/A
  SubmitTime=2021-01-07T19:40:00 EligibleTime=2021-01-07T19:40:00
  AccrueTime=2021-01-07T19:40:00
  StartTime=Unknown EndTime=Unknown Deadline=N/A
  SuspendTime=None SecsPreSuspend=0 LastSchedEval=2021-01-07T19:52:02
  Partition=gridlong AllocNode:Sid=ctrl:1835997
  ReqNodeList=(null) ExcNodeList=(null)
  NodeList=(null)
  NumNodes=1 NumCPUs=8 NumTasks=8 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
  TRES=cpu=8,mem=40000M,node=1,billing=9
  Socks/Node=* NtasksPerN:B:S:C=8:0:*:* CoreSpec=*
  MinCPUsNode=8 MinMemoryCPU=5000M MinTmpDiskNode=0
  Features=(null) DelayBoot=00:00:00
  OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)
  Command=/tmp/SLURM_job_script.rxZjWR
  WorkDir=/ceph/grid/session/C5FNDmdNpHynWeBumqyIfvmm6BJ3FoABFKDmXIwWDmABFKDmusGpDo
  StdErr=/ceph/grid/session/C5FNDmdNpHynWeBumqyIfvmm6BJ3FoABFKDmXIwWDmABFKDmusGpDo.comment
  StdIn=/dev/null
  StdOut=/ceph/grid/session/C5FNDmdNpHynWeBumqyIfvmm6BJ3FoABFKDmXIwWDmABFKDmusGpDo.comment
  Power=
  MailUser=(null) MailType=NONE
scontrol show job 387489

Lahko tudi preverimo, kateri uporabniki imajo dovoljenje za uporabo rezerviranih vozlišč.

$ scontrol show reservation
ReservationName=fri StartTime=2021-01-26T08:31:15 EndTime=2022-01-26T08:31:15 Duration=365-00:00:00
  Nodes=nsc-lou[001-002] NodeCnt=2 CoreCnt=256 Features=(null) PartitionName=(null) Flags=SPEC_NODES
  TRES=cpu=512
  Users=dsling01,dsling02mdsling03,root Groups=(null) Accounts=(null) Licenses=(null) State=ACTIVE BurstBuffer=(null) Watts=n/a
  MaxStartDelay=(null)
scontrol show reservation

Ukaz sacct

Z ukazom sacct lahko izvemo več podatkov o zaključenih poslih in poslih v izvajanju.

Na primer, preverimo lahko stanje vseh nalog zadnjega dneva.

$ sacct --starttime $(date -d '1 day ago' +%D-%R) --format JobID,JobName,Elapsed,State,ExitCode
JobID    JobName    Elapsed      State ExitCode
------------ ---------- ---------- ---------- --------
2911393            perf   00:00:16  COMPLETED      0:0
2911393.ext+     extern   00:00:16  COMPLETED      0:0
2911393.0          perf   00:00:16  COMPLETED      0:0
2911546            perf   00:00:16  COMPLETED      0:0
2911546.ext+     extern   00:00:17  COMPLETED      0:0
2911546.0          perf   00:00:16  COMPLETED      0:0
2911581            perf   00:00:34  COMPLETED      0:0
2911581.ext+     extern   00:00:35  COMPLETED      0:0
2911581.0          perf   00:00:34  COMPLETED      0:0
2911658            perf   00:00:14  COMPLETED      0:0
2911658.ext+     extern   00:00:14  COMPLETED      0:0
2911658.0          perf   00:00:14  COMPLETED      0:0
2912298      singulari+   00:00:00 CANCELLED+      0:0
2912302      singulari+   00:00:47 CANCELLED+      0:0
2912302.ext+     extern   00:00:47  COMPLETED      0:0
2912302.0    singulari+   00:00:47 CANCELLED+      0:2
2912321      singulari+   00:00:10     FAILED      1:0
2912321.ext+     extern   00:00:10  COMPLETED      0:0
2912321.0    singulari+   00:00:10     FAILED      1:0
2912337      singulari+   00:00:02     FAILED    127:0
2912337.ext+     extern   00:00:03  COMPLETED      0:0
sacct --starttime $(date -d '1 day ago' +%D-%R) --format JobID,JobName,Elapsed,State,ExitCode

Lahko poizvemo tudi o podrobnostih za izbrano nalogo.

$ sacct --job=2911581 --format JobID,JobName,Elapsed,State,ExitCode
JobID    JobName    Elapsed      State ExitCode
------------ ---------- ---------- ---------- --------
2911581            perf   00:00:34  COMPLETED      0:0
2911581.ext+     extern   00:00:35  COMPLETED      0:0
2911581.0          perf   00:00:34  COMPLETED      0:0
sacct --job=2911581 --format JobID,JobName,Elapsed,State,ExitCode  

Vaja

Na povezavi najdete naloge za utrditev znanja o ukazih za poizvedovanje po informacijah o gruči.