Preskočiť na obsah

Evidencia čerpaných zdrojov

Funkcia evidencie spotreby zdrojov (accounting) batchového systému SLURM sleduje zdroje spotrebované používateľmi počas spúšťania úloh na HPC clustroch SAV.

Na odoslanie úlohy na cluster musí mať používateľ prístup k projektu (testing, regular alebo commercial), ktorý má dostatočnú voľnú alokáciu na spustenie úlohy.

Viac informácií o získaní prístupu a vytvorení projektu používateľa je uvedených v návode Get Project.

Pre projekty sú k dispozícii dva typy alokácií:

  • CPU alokácia – určená na spotrebu zdrojov na univerzálnych výpočtových uzloch
  • GPU alokácia – určená pre úlohy vyžadujúce akcelerované uzly

Maximálne časové limity sa nastavujú automaticky výberom fronty, v ktorej sa má úloha spúšťať.

Zostávajúcu alokáciu je možné overiť pomocou príkazu sprojects.

Note

Po vyčerpaní celej alokácie projektu je možné nové úlohy naďalej odosielať. Úlohy však zostanú v stave pending, kým nebude k dispozícii ďalšia alokácia.

Ak dôjde k prekročeniu kvóty projektu, odosielanie úloh bude naďalej fungovať bežným spôsobom. Úlohy však zostanú v stave pending, ako ukazuje nasledujúci príklad:

Vyčerpaná kvóta projektu


squeue
    JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
    224     short    example     user PD       0:00      1 (QOSGrpBillingMinutes)

Dôvod QOSGrpBillingMinutes označuje, že projekt spotreboval celú dostupnú alokáciu.

Výpočtové jednotky

Alokácie projektov sa udeľujú v jadro-hodinách (core-hours). Keďže výpočtové uzly obsahujú viacero CPU jadier, spustenie úlohy na jednu hodinu spotrebuje množstvo alokácie úmerné zdrojom, ktoré úloha rezervuje.

Niektoré úlohy však nemusia využívať všetky CPU jadrá a napriek tomu môžu obsadzovať veľké množstvo zdrojov uzla, napríklad pri pracovných záťažiach náročných na pamäť alebo pri GPU úlohách. Na zabezpečenie spravodlivej evidencie spotreby zdrojov clusteru sa v SLURM používajú výpočtové jednotky (BU).

Interpretácia:

  • Ak úloha plne využíva CPU jadrá, BU je určená počtom jadier.
  • Ak úloha potrebuje veľké množstvo pamäte, ale málo CPU jadier, BU sa určuje podľa využitia pamäte.
  • Ak úloha používa GPU, BU sa určuje podľa počtu GPU pridelených úlohe.

Výpočtové uzly Devana obsahujú 64 CPU jadier.

Výpočtové jednotky sa vypočítavajú ako:

BU = MAX(number_of_cores, memory_in_GB * 0.256)                # Universal nodes
BU = MAX(number_of_cores, memory_in_GB * 0.256, GPUs * 16)     # Accelerated nodes

Výpočtové uzly Perun obsahujú 320 CPU jadier.

Výpočtové jednotky sa vypočítavajú ako:

BU = MAX(number_of_cores, memory_in_GB * 0.280)                # Universal nodes
BU = MAX(number_of_cores, memory_in_GB * 0.140)                # High memory nodes
BU = MAX(number_of_cores, memory_in_GB * 0.605, GPUs * 72)     # Accelerated nodes

Warning

Billing systém zabezpečuje, že úlohy rezervujúce veľké množstvo pamäte alebo GPU sú účtované primerane aj v prípade, že používajú len malé množstvo CPU jadier.

Billing units úlohy je možné overiť pomocou príkazu scontrol show job JOBID. Nasledujúce príklady podrobnejšie ukazujú správanie výpočtových jednotiek:

Note

V ukážkových výstupoch nižšie je Partition=ncpu interné označenie fronty short (pozri Devana fronty).

Rôzne využitie úloh

V tomto prípade sa úloha spúšťa na všetkých 64 jadrách jedného uzla. BUs sú preto 64.


 srun -n 64 --pty bash
   srun: job 30925 queued and waiting for resources
   srun: job 30925 has been allocated resources
 
scontrol show job 30925 JobId=30925 JobName=bash UserId=demovic(187000051) GroupId=demovic(187000051) MCS_label=N/A Priority=18994 Nice=0 Account=p70-23-t QOS=p70-23-t JobState=RUNNING Reason=None Dependency=(null) Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=00:00:07 TimeLimit=UNLIMITED TimeMin=N/A SubmitTime=2023-08-08T15:08:13 EligibleTime=2023-08-08T15:08:13 AccrueTime=2023-08-08T15:08:13 StartTime=2023-08-08T15:08:14 EndTime=Unknown Deadline=N/A SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-08-08T15:08:14 Scheduler=Main Partition=ncpu AllocNode:Sid=login02:9298 ReqNodeList=(null) ExcNodeList=(null) NodeList=n043 BatchHost=n043 NumNodes=1 NumCPUs=64 NumTasks=64 CPUs/Task=1 ReqB:S:C:T=0:0:: TRES=cpu=64,mem=250G,node=1,billing=64 Socks/Node=* NtasksPerN:B:S:C=0:0:: CoreSpec=* MinCPUsNode=1 MinMemoryCPU=4000M MinTmpDiskNode=0 Features=(null) DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=bash WorkDir=/home/demovic Power=

Podobne je to pri využití dvoch celých uzlov. BUs sú teda 128 (2 × 64).


 srun -N 2 --ntasks-per-node=64 --pty bash
 srun: job 30927 queued and waiting for resources
 srun: job 30927 has been allocated resources
 
scontrol show job 30927 JobId=30927 JobName=bash UserId=demovic(187000051) GroupId=demovic(187000051) MCS_label=N/A Priority=18993 Nice=0 Account=p70-23-t QOS=p70-23-t JobState=RUNNING Reason=None Dependency=(null) Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=00:00:04 TimeLimit=UNLIMITED TimeMin=N/A SubmitTime=2023-08-08T15:20:25 EligibleTime=2023-08-08T15:20:25 AccrueTime=2023-08-08T15:20:25 StartTime=2023-08-08T15:20:26 EndTime=Unknown Deadline=N/A SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-08-08T15:20:26 Scheduler=Main Partition=ncpu AllocNode:Sid=login02:9298 ReqNodeList=(null) ExcNodeList=(null) NodeList=n[037-038] BatchHost=n037 NumNodes=2 NumCPUs=128 NumTasks=128 CPUs/Task=1 ReqB:S:C:T=0:0:: TRES=cpu=128,mem=500G,node=2,billing=128 Socks/Node=* NtasksPerN:B:S:C=64:0:: CoreSpec=* MinCPUsNode=64 MinMemoryCPU=4000M MinTmpDiskNode=0 Features=(null) DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=bash WorkDir=/home/demovic Power=

Pri využití len časti uzla sa účtovaná hodnota upraví úmerne. V tomto prípade sa využíva 32 jadier, takže BUs sú preot znížené na polovicu.


 srun -n 32 --pty bash
   srun: job 30929 queued and waiting for resources
   srun: job 30929 has been allocated resources
 
scontrol show job 30929 JobId=30929 JobName=bash UserId=demovic(187000051) GroupId=demovic(187000051) MCS_label=N/A Priority=18994 Nice=0 Account=p70-23-t QOS=p70-23-t JobState=RUNNING Reason=None Dependency=(null) Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=00:00:04 TimeLimit=UNLIMITED TimeMin=N/A SubmitTime=2023-08-08T15:26:13 EligibleTime=2023-08-08T15:26:13 AccrueTime=2023-08-08T15:26:13 StartTime=2023-08-08T15:26:14 EndTime=Unknown Deadline=N/A SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-08-08T15:26:14 Scheduler=Main Partition=ncpu AllocNode:Sid=login02:9298 ReqNodeList=(null) ExcNodeList=(null) NodeList=n043 BatchHost=n043 NumNodes=1 NumCPUs=32 NumTasks=32 CPUs/Task=1 ReqB:S:C:T=0:0:: TRES=cpu=32,mem=125G,node=1,billing=32 Socks/Node=* NtasksPerN:B:S:C=32:0:: CoreSpec=* MinCPUsNode=32 MinMemoryCPU=4000M MinTmpDiskNode=0 Features=(null) DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=bash WorkDir=/home/demovic Power=

Tento príklad ukazuje správanie pri požiadavke na celú dostupnú pamäť uzla. Hoci úloha vyžaduje iba jedno jadro, BUs zodpovedajú využitiu celého uzla (64), pretože pre úlohy iných používateľov už nie je k dispozícii žiadny priestor.


 srun -n 1 --mem=250GB --pty bash
   srun: job 30930 queued and waiting for resources
   srun: job 30930 has been allocated resources
 
scontrol show job 30930 JobId=30930 JobName=bash UserId=demovic(187000051) GroupId=demovic(187000051) MCS_label=N/A Priority=18994 Nice=0 Account=p70-23-t QOS=p70-23-t JobState=RUNNING Reason=None Dependency=(null) Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=00:00:05 TimeLimit=UNLIMITED TimeMin=N/A SubmitTime=2023-08-08T15:33:50 EligibleTime=2023-08-08T15:33:50 AccrueTime=2023-08-08T15:33:50 StartTime=2023-08-08T15:33:51 EndTime=Unknown Deadline=N/A SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-08-08T15:33:51 Scheduler=Main Partition=ncpu AllocNode:Sid=login02:9298 ReqNodeList=(null) ExcNodeList=(null) NodeList=n043 BatchHost=n043 NumNodes=1 NumCPUs=1 NumTasks=1 CPUs/Task=1 ReqB:S:C:T=0:0:: TRES=cpu=1,mem=250G,node=1,billing=64 Socks/Node=* NtasksPerN:B:S:C=1:0:: CoreSpec=* MinCPUsNode=1 MinMemoryNode=250G MinTmpDiskNode=0 Features=(null) DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=bash WorkDir=/home/demovic Power=

Rovnaký princíp platí aj pri využití 32 jadier na uzle. Tento príklad ukazuje, že rozhodujúci je vyšší faktor využitia, v tomto prípade pamäť.


 srun -n 32 --mem=250GB --pty bash
   srun: job 30931 queued and waiting for resources
   srun: job 30931 has been allocated resources
 
scontrol show job 30931 JobId=30931 JobName=bash UserId=demovic(187000051) GroupId=demovic(187000051) MCS_label=N/A Priority=18994 Nice=0 Account=p70-23-t QOS=p70-23-t JobState=RUNNING Reason=None Dependency=(null) Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=00:00:02 TimeLimit=UNLIMITED TimeMin=N/A SubmitTime=2023-08-08T15:36:12 EligibleTime=2023-08-08T15:36:12 AccrueTime=2023-08-08T15:36:12 StartTime=2023-08-08T15:36:13 EndTime=Unknown Deadline=N/A SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-08-08T15:36:13 Scheduler=Main Partition=ncpu AllocNode:Sid=login02:9298 ReqNodeList=(null) ExcNodeList=(null) NodeList=n043 BatchHost=n043 NumNodes=1 NumCPUs=32 NumTasks=32 CPUs/Task=1 ReqB:S:C:T=0:0:: TRES=cpu=32,mem=250G,node=1,billing=64 Socks/Node=* NtasksPerN:B:S:C=0:0:: CoreSpec=* MinCPUsNode=1 MinMemoryNode=250G MinTmpDiskNode=0 Features=(null) DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=bash WorkDir=/home/demovic Power=

Keďže akcelerované uzly majú 4 GPU, pridelenie jedného GPU predstavuje ¼ celkového počtu BUs hodnoty uzla. Všimnite si, že alokáciu RAM nastavil SLURM automaticky na 62,5 GB (¼ celkovej RAM).


 srun --partition=gpu -G 1 --pty bash
   srun: job 30934 queued and waiting for resources
   srun: job 30934 has been allocated resources
 
scontrol show job 30934 JobId=30934 JobName=bash UserId=demovic(187000051) GroupId=demovic(187000051) MCS_label=N/A Priority=18994 Nice=0 Account=p70-23-t QOS=p70-23-t_gpu JobState=RUNNING Reason=None Dependency=(null) Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=00:00:03 TimeLimit=UNLIMITED TimeMin=N/A SubmitTime=2023-08-08T15:52:39 EligibleTime=2023-08-08T15:52:39 AccrueTime=2023-08-08T15:52:39 StartTime=2023-08-08T15:52:40 EndTime=Unknown Deadline=N/A SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-08-08T15:52:40 Scheduler=Main Partition=gpu AllocNode:Sid=login02:9298 ReqNodeList=(null) ExcNodeList=(null) NodeList=n143 BatchHost=n143 NumNodes=1 NumCPUs=1 NumTasks=1 CPUs/Task=1 ReqB:S:C:T=0:0:: TRES=cpu=1,mem=62.50G,node=1,billing=16,gres/gpu=1 Socks/Node=* NtasksPerN:B:S:C=0:0:: CoreSpec=* MinCPUsNode=1 MinMemoryNode=0 MinTmpDiskNode=0 Features=(null) DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=bash WorkDir=/home/demovic Power= MemPerTres=gpu:64000 TresPerJob=gres:gpu:1

Pri použití 2 GPU sa spotrebuje 32 BUs.


 srun --partition=gpu -G 2 --pty bash
   srun: job 30937 queued and waiting for resources
   srun: job 30937 has been allocated resources
 
scontrol show job 30937 JobId=30937 JobName=bash UserId=demovic(187000051) GroupId=demovic(187000051) MCS_label=N/A Priority=18994 Nice=0 Account=p70-23-t QOS=p70-23-t_gpu JobState=RUNNING Reason=None Dependency=(null) Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=00:00:04 TimeLimit=UNLIMITED TimeMin=N/A SubmitTime=2023-08-08T16:04:17 EligibleTime=2023-08-08T16:04:17 AccrueTime=2023-08-08T16:04:17 StartTime=2023-08-08T16:04:17 EndTime=Unknown Deadline=N/A SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-08-08T16:04:17 Scheduler=Main Partition=gpu AllocNode:Sid=login02:9298 ReqNodeList=(null) ExcNodeList=(null) NodeList=n143 BatchHost=n143 NumNodes=1 NumCPUs=1 NumTasks=1 CPUs/Task=1 ReqB:S:C:T=0:0:: TRES=cpu=1,mem=125G,node=1,billing=32,gres/gpu=2 Socks/Node=* NtasksPerN:B:S:C=0:0:: CoreSpec=* MinCPUsNode=1 MinMemoryNode=0 MinTmpDiskNode=0 Features=(null) DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=bash WorkDir=/home/demovic Power= MemPerTres=gpu:64000 TresPerJob=gres:gpu:2

Nakoniec, hoci úloha potrebuje iba jedno GPU, BUs sú 64, pretože využíva všetku dostupnú pamäť.


 srun --partition=gpu -G 1 --mem=250GB --pty bash
   srun: job 30936 queued and waiting for resources
   srun: job 30936 has been allocated resources
 
scontrol show job 30936 JobId=30936 JobName=bash UserId=demovic(187000051) GroupId=demovic(187000051) MCS_label=N/A Priority=18994 Nice=0 Account=p70-23-t QOS=p70-23-t_gpu JobState=RUNNING Reason=None Dependency=(null) Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=00:00:06 TimeLimit=UNLIMITED TimeMin=N/A SubmitTime=2023-08-08T15:59:37 EligibleTime=2023-08-08T15:59:37 AccrueTime=2023-08-08T15:59:37 StartTime=2023-08-08T15:59:38 EndTime=Unknown Deadline=N/A SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-08-08T15:59:38 Scheduler=Main Partition=gpu AllocNode:Sid=login02:9298 ReqNodeList=(null) ExcNodeList=(null) NodeList=n143 BatchHost=n143 NumNodes=1 NumCPUs=1 NumTasks=1 CPUs/Task=1 ReqB:S:C:T=0:0:: TRES=cpu=1,mem=250G,node=1,billing=64,gres/gpu=1 Socks/Node=* NtasksPerN:B:S:C=0:0:: CoreSpec=* MinCPUsNode=1 MinMemoryNode=0 MinTmpDiskNode=0 Features=(null) DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=bash WorkDir=/home/demovic Power= MemPerTres=gpu:64000 TresPerJob=gres:gpu:1


sprojects – Zobrazenie informácií o projektoch

Tento príkaz zobrazuje informácie o projektoch dostupných pre používateľa a podrobnosti projektov, ako sú dostupné alokácie, zdieľané adresáre a členovia tímu projektu.

Skript sprojects zobrazuje dostupné SLURM účty (projekty) pre zadané ID používateľa. Ak používateľ nie je zadaný pomocou -u, skript zobrazí informácie o aktuálnom používateľovi.

Zobrazenie dostupných účtov aktuálneho používateľa

sprojects
   The following slurm accounts are available for user user1:
   p70-23-t

Možnosť -a spôsobí, že skript zobrazí alokácie v CPU hodinách a GPU hodinách vo formáte spotrebované/udelené.

Zobrazenie všetkých dostupných alokácií aktuálneho používateľa

sprojects -a
   +=================+=====================+
   |     Project     |     Allocations     |
   +-----------------+---------------------+
   | p70-23-t        | CPU:      10/50000  |
   |                 | GPU:       0/12500  |
   +=================+=====================+

Pomocou možnosti -f skript zobrazí podrobnejšie informácie vrátane dostupných alokácií.

Zobrazenie kompletných informácií o aktuálnom používateľovi

sprojects -f
   +=================+=========================+============================+=====================+
   |     Project     |       Allocations       |      Shared storages       |    Project users    |
   +-----------------+-------------------------+----------------------------+---------------------+
   | p371-23-1       | CPU:    182223/500000   | /project/p371-23-1         | user1               |
   |                 | GPU:       542/1250     | /scratch/p371-23-1         | user2               |
   |                 |                         |                            | user3               |
   +-----------------+-------------------------+----------------------------+---------------------+
   | p81-23-t        | CPU:     50006/50000    | /project/p81-23-t          | user1               |
   |                 | GPU:       766/781      | /scratch/p81-23-t         | user2               |
   +-----------------+-------------------------+----------------------------+---------------------+
   | p70-23-t        | CPU:    485576/5000000  | /project/p70-23-t          | user1               |
   |                 | GPU:       544/31250    | /scratch/p70-23-t         | user2               |
   |                 |                         |                            | user4               |
   |                 |                         |                            | user5               |
   |                 |                         |                            | user6               |
   |                 |                         |                            | user7               |
   +=================+=========================+============================+=====================+
Created by: Lukas Demovic, Lukas Demovic, Marek Štekláč, Marek Štekláč