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ů
sruna
sbatch==== Běh programu se řídí pomocí parametrů. U příkazu
srunse zadávají přímo do příkazové řádky, u příkazu
sbatchse 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.errbude 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