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

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

  • 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 months (max)
admin node only NoCompute 1 hour
8 hours

*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