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.