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 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“.
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 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“.
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