meta data stránky
  •  
Překlady této stránky:

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

Seznam příkazů s parametry v PDF dokumentu.

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