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).

$ 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 zgronjem 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.

$ 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,
  • CD (angl. CompleteD) - posel je zaključen,
  • F (angl. Failed) - napaka pri izvajanju.

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
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-20],nsc-gsv0[01-07],nsc-fp0[01-08]
  PriorityJobFactor=1 PriorityTier=1 RootOnly=NO ReqResv=NO OverSubscribe=NO
  OverTimeLimit=NONE PreemptMode=OFF
  State=UP TotalCPUs=1856 TotalNodes=35 SelectTypeParameters=NONE
  JobDefaults=(null)
  DefMemPerCPU=2000 MaxMemPerNode=UNLIMITED
  TRESBillingWeights=CPU=1.0,Mem=0.25G
scontrol show partition

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

$ scontrol show node nsc-fp005
NodeName=nsc-fp005 Arch=x86_64 CoresPerSocket=8 
  CPUAlloc=0 CPUTot=16 CPULoad=0.00
  AvailableFeatures=intel,gpu,k40
  ActiveFeatures=intel,gpu,k40
  Gres=gpu:2
  NodeAddr=nsc-fp005 NodeHostName=nsc-fp005 Version=20.02.5
  OS=Linux 5.7.12-1.el8.elrepo.x86_64 #1 SMP Fri Jul 31 16:22:54 EDT 2020 
  RealMemory=64200 AllocMem=0 FreeMem=56851 Sockets=2 Boards=1
  State=RESERVED ThreadsPerCore=1 TmpDisk=0 Weight=1000 Owner=N/A MCS_label=N/A
  Partitions=gridlong 
  BootTime=2020-11-09T12:54:17 SlurmdStartTime=2020-12-01T10:36:37
  CfgTRES=cpu=16,mem=64200M,billing=16,gres/gpu=2
  AllocTRES=
  CapWatts=n/a
  CurrentWatts=0 AveWatts=0
  ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
scontrol show node nsc-fp005  

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 poslaih v izvajanju.

Za izbranega uporabnika na primer lahko preverimo stanje vseh nalog v določenem časovnem obdobju.

$ sacct --starttime '2021-01-10' --enddtime '2021-01-13' --user <ime>
391812           ffmpeg   gridlong  fri-users          1 CANCELLED+      0:0
391812.exte+     extern             fri-users          1  COMPLETED      0:0
391812.0         ffmpeg             fri-users          1     FAILED    127:0
391813           ffmpeg   gridlong  fri-users          1  COMPLETED      0:0
391813.exte+     extern             fri-users          1  COMPLETED      0:0
391813.0         ffmpeg             fri-users          1  COMPLETED      0:0
391825           ffmpeg   gridlong  fri-users          1  COMPLETED      0:0
391825.exte+     extern             fri-users          1  COMPLETED      0:0
391825.0         ffmpeg             fri-users          1  COMPLETED      0:0
sacct --starttime '2021-01-10' --enddtime '2021-01-13' --user <ime>

Lahko poizvemo tudi o podrobnostih za izbrano nalogo.

$ sacct --job 391812
391812           ffmpeg   gridlong  fri-users          1 CANCELLED+      0:0
391812.exte+     extern             fri-users          1  COMPLETED      0:0
391812.0         ffmpeg             fri-users          1     FAILED    127:0
sacct --job 391812  

Vaja

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