Partitionen und deren Laufzeit-Grenzen
Zur Vereinfachung und zur Vermeidung von Fehlern gibt es eine weitgehende Automatik für die Auswahl der richtigen Slurm-Partition.
Ausgenommen hiervon sind lediglich einige Spezialfälle wie beispielsweise Lehrveranstaltungen (Kurse). In diesen Fällen werden Sie gesondert darüber informiert, wie Partition, Reservierung oder Projekt-Account in Jobscripts angegeben werden müssen.
Je nach angegebener maximaler Laufzeit (-t oder --time=) werden Jobs in unterschiedliche Partitionen verteilt. Partitionen für Jobs längerer Laufzeit haben weniger Ressourcen (Rechenknoten), und darum kann die Wartezeit solcher Jobs länger sein.
|
Job runtime requirement ( -t / --time=…)
|
Partition Name | Nodes assigned | |
|---|---|---|---|
| MPI | Accelerators | ||
| ≦ 30' |
deflt_short
|
1206 all + 7 exclusive |
|
acc_short
|
17 all accelerator nodes |
||
| > 30' ≦ 24h |
deflt
|
1199 7 less than all |
|
mem
|
5 | ||
acc
|
17 all accelerator nodes |
||
| > 24h ≦ 7d |
long
|
607 | |
mem_long
|
3 | ||
acc_long
|
11 4 less than all accelerator nodes |
||
|
Jobs with a continuous runtime longer than 7d are only possible after coordination with the HPC team and with the use of a special reservation. However, there is a trick for using non-continuous runtime > 7d. |
|||
Konfiguration der Batchjobs für unterschiedliche Hardware
Standardmäßig werden Jobs auf dem gesamten Cluster und somit auf allen Arten von Knoten aller Phasen (Ausbaustufen) ausgeführt.
Damit Ihr Job auf einer bestimmten oder speziellen Hardware (-Ausstattung) bzw. Knotentyp zur Ausführung kommt, müssen Sie spezielle Ressourcen anfordern – wir unterscheiden grundsätzlich nach Prozessor-Typ und nach Beschleuniger-Typ, aber auch nach Ausbaustufen oder Sektionen, wie in der nachfolgenden Tabelle aufgeführt.
Alle anderen Eigenschaften Ihrer Jobs wie Laufzeit und Speicherverbrauch werden automatisch so ausgewertet, dass die Jobs auf die passenden Knoten-Typen bzw. Sektionen des Clusters verteilt werden.
| Expansion Stage / CPU Type | |||
|---|---|---|---|
| Resource | Section | Node Hostnames | Details |
| i01 | all |
mpscmpqcgvqcgaqcgaoc
|
LB 2 phase I |
| i02 | all |
mpsdmpqdmpzdghqd gpqdgaod
|
LB 2 phase II |
| avx512 | MPI |
mpscmpsd
|
MPI section, LB 2 phase I+II |
| ACC |
gvqcgaqcghqdgaod
|
ACC section, LB 2 phase I+II | |
| MEM |
mpqcmpqdmpzd
|
MEM section, LB 2 phase I+II | |
| avx2 (or dgx) | ACC |
gaoc
|
ACC section, LB 2 phase I, DGX A100 |
|
_______________________________________________ |
|||
|
Accelerator Type (selected by „Generic Resources“ instead of by „ |
|||
| GRes | Accelerator | Node Hostnames | Details |
|
--gres=gpu (not recommended due to referencing all 3 different types) |
Nvidia + Intel + AMD (all) |
gvqcgaqcgaocgaodghqdgpqd
|
ACC section (all) |
| --gres=gpu:v100 | Nvidia Volta 100 |
gvqc
|
ACC section, LB 2 phase I |
| --gres=gpu:a100 | Nvidia Ampere 100 |
gaqcgaoc
|
ACC section, LB 2 phase I |
| --gres=gpu:h100 | Nvidia Hopper 100 |
ghqd
|
ACC section, LB 2 phase II |
| --gres=gpu:pvc128g |
Intel Data Center GPU Max 1550 „Ponte Vecchio“ |
gpqd
|
ACC section, LB 2 phase II |
| --gres=gpu:mi300x | AMD MI300X |
gaod
|
ACC section, LB 2 phase II |
|
_______________________________________________ |
|||
| Sections | |||
| Resource | Section Name | Node Hostnames | Details |
| mpi | MPI |
mpsc
|
MPI section (all) |
mpsd
|
|||
| mem1536g | MEM |
mpqc
|
MEM section, LB 2 phase I |
| mem2048g |
mpqd
|
MEM section, LB 2 phase II | |
| mem6144g |
mpzd
|
||
All diese speziellen „Features“ (außer Beschleuniger/GPUs) können mit der Option -C (für „constraint“) angefordert und ausgewählt werden.
Entweder gibt man die Option direkt auf der Kommandozeile an: „sbatch -C <feature> meinJobScript“ (nicht empfohlen), oder im Batch/Job-Script als weiteres Pragma (empfohlen):
#SBATCH -C featureMehrere Feature-Anforderungen können über ein & (logisches UND) bzw. ein | (logisches ODER) verknüpft werden (siehe Beispiele weiter unten).
GPU-Beschleuniger jedoch werden nicht mehr einfach nur per „feature“, sondern mittels GRes angefordert:
--gres=Klasse:Typ:#: Beschleuniger-Anforderung, z.B. GPUs
(wenn nicht angegeben: Typ=<irgendeine Nvidia> und #=1)
--gres=gpu
fordert 1 Nvidia-GPU beliebigen Typs an--gres=gpu:3
fordert 3 Nvidia-GPUs beliebigen Typs an--gres=gpu:v100
fordert 1 Nvidia „Volta 100“-Karte an--gres=gpu:a100:3
fordert 3 Nvidia „Ampere 100“-Karten an--gres=gpu:h100:4
fordert 4 Nvidia „Hopper 100“-Karten an--gres=gpu:mi300x:6oder--gres=gpu:amd:6
fordert 6 AMD MI300X Karten an
(Infos zur Nutzung der MI300X (wird in neuem Tab geöffnet))--gres=gpu:pvc128g:2oder--gres=gpu:pvc:2
fordert 2 Intel „Ponte Vecchio“-Karten an
(Infos zur Nutzung der PVC (wird in neuem Tab geöffnet))
Um Ihre Job-Scripts nicht immer für wechselnde Anzahlen an GPUs doppelt umschreiben zu müssen, können Sie überall dort, wo Ihre Programme die Zahl der zu nutzenden GPUs erwarten, die Variable $SLURM_GPUS_ON_NODE verwenden.
Beispiel: „myCUDAprogram --num-devices=$SLURM_GPUS_ON_NODE“.
Da auf diese Weise immer ganze GPUs („Grafikkarten“) zugewiesen werden, gibt es keinen Weg, nur eine gewisse Anzahl an Tensor-Kernen oder Shadern oder G-RAM (Grafikkartenspeicher) pro GPU anzufordern. Wenn Ihrem Job eine GPU (Karte) zugewiesen wurde, können Sie daher alle ihre Ressourcen voll ausnutzen.
Wenn Sie für verteiltes Machine/Deep Learning mehrere GPU-Nodes benötigen (z.B. mit „horovod“), müssen Sie mit -N # (und dann -n >=#) explizit mehrere Nodes anfordern (wobei # = 2-8 gilt).
Da „GRes“ immer pro Node gelten, darf --gres=gpu:4 nur im Fall der DGX (8 GPUs) oder des AMD 300MIX Knotens überschritten werden, selbst wenn mehrere 4-GPU-Knoten angefordert werden.
Beispiele
-C avx512
-C "avx512&mem1536g"
-C avx512
--gres=gpu:v100:2