meta data stránky
- Česky (cs)
- English (en)
Toto je starší verze dokumentu!
V únoru 2022 dochází na clusteru Kraken k přechodu na výhradní užití frontového systému (SLURM) pro spouštění úloh na výpočetních uzlech. Výpočetní uzly nebudou samostatně dostupné ze sítě. Pro připojení ke clusteru, přípravu a zadávání úloh do frontového systému, je vyhrazen administrativní uzel „kraken“.
- Na výpočetních uzlech úlohy mimo frontový systém nespouštějte!
- Administrativní uzel není určen k běhu výpočtů!
Níže naleznete základní popis práce s frontami, specifika spouštění konkrétních aplikací jsou popsány na samostatných stránkách:
Frontový systém SLURM
Frontový systém pomáhá optimálnímu využití prostředků clusteru, přináší řadu nástrojů pro spouštění a správu běhu úloh i jejich paralelizaci. Správa front a úloh v nich je možná po přihlášení na administrativní uzel „kraken“.
Základní příkazy:
Spouštění úloh
srun <volby> <spouštěný_program> <parametry_spouštěného_programu>
Klíčový příkaz pro zadání úlohy do fronty. Pro paralelní úlohy nahrazuje zároveň příkaz „mpirun“ (mpi knihovny v modulech proto ani příkaz mpirun nenabízí..).
sbatch <script_file>
Zadání úlohy do fronty dle připraveného skriptu, viz příklady níže. Součástí skriptu bývá řádka s příkazem „srun“ (komerční kódy bývají spouštěny bez srun). Nejběžnější způsob pro zadávání úlohy do fronty je právě sbatch+skript.
Řízení úloh
sinfo
Vypíše přehled front a jejich aktuální využití.
squeue
Vypíše informace o běžících úlohách ve frontovém systému.
scancel <number>
Ukončí úlohu <number> zařazenou ve frontě.
Informace o uživateli
sacct
Vypíše informace o úlohách uživatele (včetně historie).
Spouštění úloh
Úlohy je možné spouštěn na více uzlech, ale vždy jen na jedné části serveru kraken:
- část M - stroje kraken-m1 až m9 (všichni uživatelé)
- část L - stroje kraken-l1 až l4 (omezený přístup)
Úlohy lze spouštět:
- přímo z řádky příkazem
srun
- pomocí skriptu příkazem
sbatch
Pokyny ke spouštění úloh
- Úloha musí vždy běžet pod nějakou frontou (partition). Pokud není zadána žádná fronta, je použita Mexpress. Seznam definovaných front je uveden níže.
- Zadáním fronty je definován časový limit běhu.
- Úlohám ve frontách express a short nelze pomocí
-
-time
zadat delší dobu běhu. Defaultní čas front long je nastavený na 1 týden, ale umožňují běh až 2 týdny, např. 9 dní a 5 hodin zadáme „-p Llong
-
-time=9-05:00:0
“. - Slurm při zařazení do fronty čekajících úloh upřednostní úlohu a uživatele, který cluster méně vytěžuje. Není proto výhodné deklarovat delší čas výpočtu, než je nezbytně nutné.
Předdefinované fronty a časové limity
Na clusteru Kraken je k dispozici 6 front („partition“) rozdělených dle délky běhu úlohy (express, short, long) a části clusteru („Mxxx“ a „Lxxx“). Nespecifikuje-li uživatel frontu přepínačem --partition užije se defaultní hodnota (Mexpress):
cluster part | partition | time limit |
---|---|---|
M (nodes kraken-m[1-9]) | Mexpress | 6 hours |
Mshort | 2 days | |
Mlong | 1 week | |
2 weeks | ||
L (nodes kraken-l[1-4]) | Lexpress | 6 hours |
Lshort | 2 days | |
Llong | 1 week | |
2 weeks (max) |
*bold=default
Parametry příkazů ''srun'' a ''sbatch''
Běh programu se řídí pomocí parametrů. U příkazu srun
se zadávají přímo do příkazové řádky, u příkazu sbatch
se zapisují do spouštěcího skriptu. Ve skriptu je před každým parametrem zapsán identifikátor #SBATCH
.
Volby můžeme zadávat ve dvou tvarech, buď plný tvar -
-ntasks=5
(dvě pomlčky a rovnítko) nebo zkráceně -n 5
(jedna pomlčka a mezera).
volba | popis | příklad |
---|---|---|
-J, --job-name=<jobname> | Job name, shown e.g. in output of squeue | -J my_first_job |
-p, --partition=<partition_names> | Request a specific partition for the resource allocation | -p Mshort |
-n, --ntasks=<number> | Number of resources (~cores) to be allocated for the task | -n 50 |
-N, --nodes=<nodes> | Number of nodes to be used | -N 3 |
--mem | Job memory request | --mem=1gb |
-o, --output=<filename> | Name of file where slurm will output | -o out.txt |
-e, --error=<filename> | standard error to file | -e err.txt |
--mail-user=<user> | User to receive email notification of state changes as defined by –mail-type | --mail-user=my@email |
--mail-type=<type> | Send email with BEGIN, END, FAIL, ALL,… | --mail-type=BEGIN,END |
--ntasks-per-node=<ntasks> | Request that ntasks be invoked on each node | |
-t, --time=<time> | Set a limit on the total run time of the job allocation (days-hours:minutes:seconds) | -t 1:12 |
-w, --nodelist=<node_name_list> | Request a specific list of hosts | -w kraken-m2,kraken-m[5-6] |
-x, --exclude={<host1[,<host2>…]} | Request that a specific list of hosts not be included in the resources allocated to this job | --exclude=kraken-m[7-9] |
Do jmen souborů výstupu (output, error) lze začlenit proměnné jako jméno nodu (%N), číslo úlohy (%J), jméno uživatele (%u), apod… Výpis standardní chyby zadaný ve skriptu #SBATCH -e slurm.%N.%J.%u.err
bude v souboru slurm.kraken-m123.12345.username.err
Kompletní seznam parametrů naleznete např. na stránce Slurm-sbatch.
Příklad: kompilace paralelní úlohy a zadání do fronty
V adresáři /home/SOFT/modules/HelloMPI/ najdete připravený zdrojový kód jednoduchého paralelního programu pro výpočet čísla π a skript pro jeho zadání do systému front SLURM. Po zkopírování do vlastního adresáře můžete zkoušet nastavení front v souboru slurm.sh i náročnost výpočtu resp. přesnost výsledku, tj. parametr n ve zdrojovém souboru pi.c .
kompilace
Nejprve adresář zkopírujeme do našeho lokálního adresáře
cp -r /home/SOFT/modules/HelloMPI/ ./
do adresáře vstoupíme
cd HelloMPI
Adresář by měl obsahovat 2 soubory, zdrojový „pi.c“ a skript „slurm.sh“
ls
Ke kompilaci programu budeme potřebovat příkaz „mpicc“. Ten není dostupný ze systému, ale poskytne nám ho některý z modulů mpi knihoven (openmpi, mpich, intel-mpi, …), např.
ml openmpi
Po načtení modulu zvolené mpi knihovny máme k dispozici příkaz mpicc, s jehož pomocí program zkompilujeme
mpicc pi.c -o pi
V adresáři se nám nyní objevil spustitelný soubor „pi“
ls
Program „pi“ zařadíme do fronty buď pomocí příkazu „srun“ nebo „sbatch <script>“:
srun
Všechny volby vypíšeme jako jeden příkaz srun
srun -n 6 -N 2 pi
Slurm spustí program pi na 6 jádrech dvou nodů. POZOR: srun nahrazuje kvůli kompatibilitě s frontami SLURM v systému příkaz mpirun, který běžně poskytují samotné MPI knihovny, proto jsou mpi knihovny v modulech instalovány bez příkazu mpirun, ten není dostupný ani po načtení modulu! Pro běh paralelní úlohy je nutné použít příkaz srun.
Místo psaní příkazu srun a mnoha parametrů bývá výhodné použít
skript pro sbatch
Přepínače pro srun lze mít sepsány v souboru, který předáme příkazu sbatch. Jen proměnné příslušející frontovému systému jsou uvedeny #SBATCH, jinak jde o příkazy pro příkazovou řádku.
Obsahem souboru „slurm.sh“ z adresáře HelloMPI je tak:
#!/bin/bash # #SBATCH --job-name=HelloMPI_Pi #SBATCH --output=HelloMPI_Pi_log.txt #SBATCH -n 6 #SBATCH -N 2 srun pi
Předání úlohy systému:
sbatch slurm.sh
Úpravou souboru slurm.sh můžete volně testovat příkazy uvedené v tabulce výše.
Soubor pro sbatch může obsahovat i obecné příkazy pro příkazovou řádku. Rozšíříme-li předchozí:
. . . #SBATCH -N 2 echo "PI: starts in folder" pwd srun pi echo "PI:finished" mkdir Folder2 cd Folder2 echo "PI-second run in folder" pwd srun ../pi cd ../ ls
Veškeré výpisy do příkazové řádky, jak samotného programu pi tak příkazů echo a pwd naleznete v souboru HelloMPI_Pi_log.txt, zadaném výše pomocí #SBATCH –output