ParseError: syntax error, unexpected 'include' (T_INCLUDE), expecting identifier (T_STRING) or '{'
More info is available in the error log.
jdi na: Hledat / Uživatelské nástroje / Hlavní Obsah / Změnit šířku obsahu
Dokumentace ÚT AV ČR
Toto je starší verze dokumentu!
Od února 2022 je spouštění úloh na výpočetních uzlech clusteru Kraken možné výhradně přes frontový systém (SLURM). Výpočetní uzly nejsou 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“.
Administrativní uzel není určen k běhu výpočtů, užívejte ho především k práci s daty, zadávání úloh do front a kompilaci vlastních programů. Paralelní úlohy mimo fronty spouštět nelze. Pro výpočetně nenáročné paralelní programy (např. Paraview) je určena fronta „NoCompute“, která běží jen na administrativním uzlu (ten má kvůli zpracování velkých dat navýšenou RAM na 320GB).
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 se stará o optimální využití clusteru, přináší řadu nástrojů pro zadávání úloh, jejich kontrolu a paralelizaci. Všechny úkony provádíme po přihlášení na administrativní uzel „kraken“ (ssh username@kraken).
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.
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ě.
sacct
Vypíše informace o úlohách uživatele (včetně historie).
Úlohy je možné spouštěn na více uzlech, ale vždy jen na jedné části serveru kraken:
Úlohy lze spouštět:
srunsbatch--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“.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 months (max) | ||
| admin node only | NoCompute | 1 hour |
| 8 hours |
*bold=default
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.
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 .
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>“:
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
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