Průvodce pro začátečníky

From MetaCentrum
Jump to navigation Jump to search

(English version)


Metacentrum wiki is deprecated after March 2023
Dear users, due to integration of Metacentrum into https://www.e-infra.cz/en (e-INFRA CZ service), the documentation for users will change format and site.
The current wiki pages won't be updated after end of March 2023. They will, however, be kept for a few months for backwards reference.
The new documentation resides at https://docs.metacentrum.cz.

Gridové počítání: základní myšlenka

Příbuzná témata
Gridy a superpočítače (EN)
Čelní uzel
Příkazy plánovacího systému (EN)
Výpočetní zdroje a fronty úloh (EN)

Metacentrum nabízí zdroje pro takzvané gridové počítání. Grid je v podstatě síť mnoha propojených počítačů, které mohou být umístěny na různých místech (městech, institucích) a jejich vlastnosti (typ a velikost disku, RAM, CPU, GPU apod.) se mohou lišit.

Plánovací systém si udržuje přehled o zdrojích gridu (paměť, CPU čas, místo na disku) a nechává výpočetní úlohy čekat ve frontách, dokud se neuvolní dostatek zdrojů pro jejich běh. Uživatelé připravují a posílají své úlohy z takzvaných čelních uzlů, které jsou rezervovány pro aktivity uživatelů. Zbytek strojů jsou výpočetní uzly, které vykonávají samotné počítání.

The grid graphics.jpg

Přihlášení na čelní uzel

Příbuzná témata
Jak funguje PUTTY (EN)
Další možnosti přihlášení ke gridu z Linuxu
Další možnosti přihlášení ke gridu z Windows
Vzdálená virtuální plocha (EN)
Kerberos: systém jednotného přihlášením (EN)
Kerberos na Linuxu
Kerberos na Windows

Přístup ke gridu zajišťují čelní uzly, ke kterým se uživatelé přihlašují. Všechny čelní uzly běží pod OS Linux. Uživatelům Linuxu k přihlášení stačí otevřít terminál. Uživatelé systému Windows potřebují program PuTTY, který umožňuje otevřít Linuxový terminál ve Windows.

Otevřete terminál a napište následující příkaz. Poznámka: text následující za "#" je pouze komentář. Tento text nekopírujte.

ssh jenicek@skirit.ics.muni.cz # Uživatel "jenicek" se chce přihlásit na čelní uzel skirit.ics.muni.cz.

Čelní uzel skirit.ics.muni.cz můžete zaměnit za jakýkoliv jiný. Zde najdete seznam všech čelních uzlů.

Na čelních uzlech je zakázáno provádět operace náročné na výpočetní zdroje, jako výpočty, kompilování velkých zdrojových kódů nebo archivování. Provádění náročných operací omezuje ostatní přihlášené uživatele, a proto je nutné je odeslat jako interaktivní úlohy

Při prvním přihlášení pravděpodobně uvidíte podobný dotaz:

The authenticity of host 'skirit.ics.muni.cz (2001:718:ff01:1:216:3eff:fe20:382)' can't be established. ECDSA key fingerprint is SHA256:Splg9bGTNCeVSLE0E4tB30pcLS80sWuv0ezHrH1p0xE. Are you sure you want to continue connecting (yes/no)?

Napište "ano" a zmáčkněte Enter. Následně budete požádáni o heslo k MetaCentru. Napište ho a zmáčkněte Enter. Objeví se logo MetaCentra a informace ohledně vašeho posledního přihlášení, domovských adresářích apod. Poslední řádka na terminálu bude vypadat takto:

jenicek@skirit:~$ # Uživatel "jenicek" je nyní přihlášen na čelním uzlu "skirit", blikající kurzor čeká na zadání příkazu.

Pro přístup ke gridu existují i další nástroje, jako je např. Autentizační systém Kerberos (EN). Pro plný seznam článků o možnostech přístupu vizte tuto část průvodce (EN).

Seznamte se s příkazovou řádkou OS Linux

Všechny stroje čelních uzlů běží pod OS Linux, což znamená, že pro práci s nimi je potřeba alespoň základní znalost linuxové příkazové řádky (Linux CLI - command line interface). Protože existuje řada stránek, které pokrývají základy Linuxu, tento průvodce se jimi nezabývá. V internetovém vyhledávači zkuste zadat slova jako Linux pro začátečníky, základy příkazové řádky Linux, základní příkazy Linuxu apod. Všechny příklady, které se v tomto průvodci objevují jsou okomentovány a vysvětleny.

Vizte též základní UNIXové příkazy a on-line příručky a výukové materiály pro BASH.

Příprava vstupních souborů

Příbuzná témata
Nekompatibilní konce řádků z Windows (EN)

Řekněme, že máme v našem PC soubor s názvem h2o.com, který chceme použít jako vstupní soubor pro výpočty na gridu. Pro přesunutí souboru na čelní uzel otevřete terminál a napište:

scp h2o.com jenicek@skirit.metacentrum.cz: # Zkopíruj soubor ze stroje na stroj.

Uživatelé systému Windows mohou použít stejný příkaz v nástrojích PuTTY (EN) nebo WinSCP (EN).

Textové editory pro OS Windows používají pro konec řádků jiný znak než editory na OS Linux, což nemusí způsobovat problémy ve vstupních souborech, ale skripty (textové soubory obsahující sérii příkazů) napsané na počítači s Windows v Linuxu padají s následující chybou:

jenicek@skirit.metacentrum.cz: ./windows_script.sh # Uživatel jenicek se snaží spustit "windows_script.sh" s Windows EOLs.
-bash: ^M: command not found

Konce řádků je potřeba změnit na kompatibilní s OS Linux příkazem dos2unix.

jenicek@skirit.metacentrum.cz: dos2unix windows_script.sh # Převeď "windows_script.sh" z Windows EOLs na Linux EOLs.

Poznámka 1: Linux rozlišuje malá a velká písmena. K souborům "h2o.com”, "H2o.com" a "H2O.com" tedy přistupuje jako ke třem různým souborům. Totéž platí pro příkazy. Například příkaz ls vypíše obsah adresáře, zatímco pro Ls či LS dostaneme chybové hlášení “command not found”.

Poznámka 2: Pro pojmenovávání souborů a adresářů nepoužívejte žádné speciální znaky jako hvězdička, středník, ampersand apod. Použití mezery (např. “my file”) je možné, ale nedoporučuje se. Mezera je normálně na příkazové řádce interpretována jako oddělovač příkazů a má-li být explicitně použita, musí jí předcházet zpětné lomítko nebo musí být celý název v uvozovkách.

jenicek@skirit~: ls my file # V aktuálním adresáři najdi 2 soubory s názvy "my" a "file".
jenicek@skirit~: ls my\ file # V aktuálním adresáři najdi soubor "my file".
jenicek@skirit~: ls "my\ file" # ekvivalentní předchozímu příkazu

Textové editory na čelním uzlu

Pokud chcete vytvořit či upravit soubor, jedna z možností je ho zkopírovat na své PC, provést změny v preferovaném textovém editoru a soubor zkopírovat zpět na čelní uzel. Tato cesta však bývá poměrně zdlouhavá, a tak může být užitečné naučit se otevírat a upravovat soubory přímo na čelním uzlu.

Všechny čelní uzly mají dva Linuxové textové editory: vi a pico.

jenicek@skirit~: vi h2o.com # Otevři soubor "h2o.com" v textovém editoru vi.
jenicek@skirit~: pico h2o.com # Otevři soubor "h2o.com" v textovém editoru pico.

Oba tyto editory se mohou na první pohled zdát poněkud neintuitivní, jsou ale mocnými a efektivními nástroji pro editování textu. Pokud potřebujete své soubory často upravovat, je vhodné se s některým z nich naučit pracovat. Na internetu lze najít četné návody k těmto editorům, vyzkoušejte klíčová slova jako editor vi pro začátečníky, základy editoru vi, příkazy editory vi apod.

Midnight commander

Soubory je také možné prohlížet pomocí programu Midnight commander, vizuálního správce souborů podobný Norton commanderu.

jenicek@skirit~: mc # Spusť Midnight commander.

Vyberte si aplikaci

Příbuzná témata
Abecední seznam aplikací (EN)
Seznam aplikací podle tématu (EN)
Moduly aplikací (EN)
Jak nainstalovat aplikaci (EN)

Na strojích MetaCentra je nainstalováno mnoho vědeckých programů pro řadu oborů: od matematiky a statistiky přes výpočetní chemii a bioinformatiku po techniku a matematické modelování.

Vybranou aplikaci je možné načíst do výpočetní úlohy nebo stroje příkazem module add + jméno vybrané aplikace. Pokud si nejste jisti, kterou verzi aplikace chcete použít, navštivte nejdříve stránku s kompletním přehledem aplikací (EN).

Například:

jenicek@skirit:~$ module avail # Vypiš všechny dostupné aplikace.
jenicek@skirit:~$ module avail 2>&1 | grep g16 # Vypiš všechny moduly, které ve svém názvu obsahují řetězec “g16”.
jenicek@skirit:~$ module add g16-B.01 # Načti aplikaci Gaussian 16, v. B.01.
jenicek@skirit:~$ module list # Vypiš všechny aktuálně načtené moduly.
jenicek@skirit:~$ module unload g16-B.01 # Odeber aplikaci Gaussian 16, verze B.01.

Uživatelé si také mohou nainstalovat vlastní software. Pokud si přejete nainstalovat novou aplikaci nebo novou verzi aplikace, přečtěte si tohoto průvodce (EN) nebo kontaktujte uživatelskou podporu.

Žádání o zdroje a specifikace adresáře scratch

Příbuzná témata
Detailní průvodce příkazy PBS (EN)
Jak zvolit konkrétní frontu nebo PBS server (EN)
Přehled nejdůležitějších příkazů PBS [PDF]
Fairshare (EN)

Počítání na gridu není tak přímočaré jako na lokálním počítači. Nelze například udělat následující:

jenicek@skirit:~$ g16 <h2o.inp # Přímo na čelním uzlu spusť výpočet v programu Gaussian 16 se vstupním souborem h2o.inp.

nebo

jenicek@skirit:/cmake/my_code/build$ make # Zkompiluj VELMI rozsáhlý kód.

Výše uvedené nikdy nedělejte! Toto jsou operace, které vyžadují výpočetní zdroje a jak již bylo zmíněno, jejich spouštění na čelních uzlech je zakázáno. Místo toho je potřeba poslat výpočetní úlohy přes plánovací systém PBS (portable batch system) na stroje vyhrazené pro výpočty. PBS má přehled o výpočetních zdrojích celého gridu a úlohu spouští pouze, pokud je k dispozici dostatek výpočetních zdrojů.

Aby plánovač mohl určit, kdy spustit danou úlohu, uživatel musí zadat očekávané požadavky na zdroje (počet procesorů, čas běhu a operační paměť) a kam se budou ukládat případné dočasné soubory. Tyto informace se plánovači předávají v podobě možností příkazu qsub.

Základní (a také minimální) syntax příkazu qsub se zmíněnými možnostmi je následující. Dvojtečka (:) a malé “L” (l) jsou oddělovače, zelený text představuje dvojice <resource>=<value>.

qsub -l select=mem=4gb:scratch_local=1gb -l walltime=2:00:00

Kde

  • mem je operační paměť, která bude úloze přidělena (v tomto příkladu 4GB, defaultně 400 MB),
  • scratch_local=1gb určuje velikost a typ disku, kde budou uloženy dočasné soubory (v tomto příkladu, žádná defaultní hodnota není nastavena)
  • walltime je maximální čas běhu úlohy, zadává se ve formátu hh:mm:ss (v tomto příkladě 2 hodiny, defaultně 24 hodin)

Příkazu qsub lze nastavit mnohem více možností, než je zde zmíněno. Například můžete specifikovat počet výpočetních uzlů a procesorů nebo nastavit posílání emailů s upozorněním po skončení úlohy. Podrobnější informace o příkazech PBS Pro (spolu s příklady) najdete na stránce O plánovacím systému (EN).

Typy scratch adresářů

Příbuzná témata
Typy adresářů scratch

Většina aplikací vytváří během výpočtů dočasné soubory. Tyto soubory se ukládají do tzv. scratch adresáře. Typ a velikost scratche nejsou defaultně nastaveny. Uživatel si proto vždy musí zvolit typ scratche, a to některý z následujících tří:

Jako základní volbu doporučujeme lokální scratch, např.

qsub -l select=1:ncpus=1:mem=4gb:scratch_local=100gb

Takto získáte scratch adresář na místním disku o velikosti 100 GB.

Základní proměnnou obsahující cestu ke scratch adresáři je systémová proměnná SCRATCHDIR

echo $SCRATCHDIR      
/scratch/melounova/job_9309132.meta-pbs.metacentrum.cz

Kromě lokálního scratche existují další typy scratchů: SSD scratch, sdílený scratch a scratch v RAM. Více se o jejich použití dozvíte na samostatné stránce.

Jakmile úloha skončí, scratch adresář a veškerý jeho obsah bude smazán, a to buď okamžitě, nebo v řádu dní v závislosti na volném místě na výpočetním uzlu.

Dávková nebo interaktivní úloha?

Příbuzná témata
Grafické rozhraní u interaktivní úlohy (EN)
Použití příkazu trap v dávkovém skriptu (EN)

Úloha může běžet dvěma způsoby – buď vytvoříte dávkový skript, nebo úlohu spustíte interaktivně. Oba přístupy dělají v zásadě totéž, ale každý je vhodný pro jinou situaci.

MC2.png

Poznámka: Nezaměňujte spouštění interaktivních úloh za spuštění úloh přímo na čelním uzlu. I pro spuštění interaktivní úlohy je nutné požádat o zdroje a vyčkat na jejich přidělení.

Spuštění interaktivní úlohy

O interaktivní úlohu požádáte příkazem qsub s volbou -I (velké “i”).

jenicek@elmo5-26~: qsub -I -l select=1:ncpus=2:mem=4gb:scratch_local=10gb -l walltime=1:00:00

Příkaz v tomto příkladu odešle interaktivní úlohu na stroj se dvěma procesory. Spotřebuje maximálně 4 GB RAM a poběží maximálně 1 hodinu. Po stisknutí Enter se objeví řádka podobná této.

qsub: waiting for job 11681412.meta-pbs.metacentrum.cz to start

Po chvíli se objeví 2 řádky podobné následujícímu příkladu:

qsub: job 11681412.meta-pbs.metacentrum.cz ready # 11681412 je ID interaktivní úlohy
jenicek@elmo5-26:~$ # Všimněte si, že uživatel "jenicek" už není po spuštění interaktivní úlohy přihlášen na čelním uzlu skirit. Přesunul se přímo na výpočetní uzel, kde běží interaktivní úloha (elmo5-26).

Nyní je možné spustit výpočet, kompilaci, archivování souborů z příkazového řádku apod.

jenicek@elmo5-26:~$ module load g16-B.01 # Načti Gaussian 16.
jenicek@elmo5-26:~$ g16 <h2o.com >h2o.out   # Spusť výpočet v aplikaci Gaussian se vstupním souborem "h2o.com". Výstup ulož do souboru "h2o.out".

Jestliže se do 1 hodiny neodhlásíte, obdržíte následující zprávu:

jenicek@elmo5-26:~$ =>> PBS: job killed: walltime 3630 exceeded limit 3600
logout

qsub: job 11681412.meta-pbs.metacentrum.cz completed

Tato zpráva znamená, že PBS plánovací systém poslal upozornění, že úloha vyčerpala některé zdroje (v tomto případě čas běhu), a proto byla plánovacím systémem ukončena.

Výhody interaktivních úloh:

  • Máte lepší přehled, co děláte, interaktivní úloha je flexibilní (výhodné při kompilacích, archivování apod.)
  • Pravděpodobně jednodušší na naučení (není potřeba psát dávkový skript).
  • Máte k dispozici grafické uživatelské rozhraní (EN) pro interaktivní úlohy

Nevýhody interaktivních úloh

  • Využití výpočetního uzlu není optimální (čeká se na vstup uživatele).
  • Není vhodný pro dlouhé úlohy (při zavření terminálu nebo výpadku internetu se úloha ukončí).
  • Je obtížné pracovat s úlohami, které využívají více souborů.

Dávkové úlohy

V případě dávkové úlohy jsou všechny informace obsaženy ve skriptu. Jakmile skript odešlete příkazem qsub, není potřeba se o úlohu dále starat. Parametry PBS můžete specifikovat buď v příkazové řádce, nebo přímo ve skriptu. Obě cesty jsou zcela správné, použijte tu, která vám více vyhovuje.

Možnosti PBS se do skriptu přidávají pomocí předpony #PBS následované příslušnou možností. Dávkový skript v následujícím příkladu se jmenuje 'myJob.sh'


#!/bin/bash
#PBS -N myFirstJob
#PBS -l select=1:ncpus=4:mem=4gb:scratch_local=10gb
#PBS -l walltime=1:00:00 
#PBS -m ae
# The 4 lines above are options for scheduling system: job will run 1 hour at maximum, 1 machine with 4 processors + 4gb RAM memory + 10gb scratch memory are requested, email notification will be sent when the job aborts (a) or ends (e)

# define a DATADIR variable: directory where the input files are taken from and where output will be copied to
DATADIR=/storage/brno3-cerit/home/jenicek/test_directory # substitute username and path to to your real username and path

# append a line to a file "jobs_info.txt" containing the ID of the job, the hostname of node it is run on and the path to a scratch directory
# this information helps to find a scratch directory in case the job fails and you need to remove the scratch directory manually 
echo "$PBS_JOBID is running on node `hostname -f` in a scratch directory $SCRATCHDIR" >> $DATADIR/jobs_info.txt

#loads the Gaussian's application modules, version 03
module add g03

# test if scratch directory is set
# if scratch directory is not set, issue error message and exit
test -n "$SCRATCHDIR" || { echo >&2 "Variable SCRATCHDIR is not set!"; exit 1; }

# copy input file "h2o.com" to scratch directory
# if the copy operation fails, issue error message and exit
cp $DATADIR/h2o.com  $SCRATCHDIR || { echo >&2 "Error while copying input file(s)!"; exit 2; }

# move into scratch directory
cd $SCRATCHDIR 

# run Gaussian 03 with h2o.com as input and save the results into h2o.out file
# if the calculation ends with an error, issue error message an exit
g03 <h2o.com >h2o.out || { echo >&2 "Calculation ended up erroneously (with a code $?) !!"; exit 3; }

# move the output to user's DATADIR or exit in case of failure
cp h2o.out $DATADIR/ || { echo >&2 "Result file(s) copying failed (with a code $?) !!"; exit 4; }

# clean the SCRATCH directory
clean_scratch

Úlohu můžete odeslat příkazem qsub.

jenicek@skirit:~$ qsub myJob.sh # Odešli dávkový skript "myJob.sh".
11733571.meta-pbs.metacentrum.cz # Úloha běží na serveru meta-pbs.metacentrum.cz, její ID je 11733571.
jenicek@skirit:~$

Pokud chcete o zdroje požádat mimo dávkový skript, přesuňte možnosti PBS do příkazu qsub:

qsub -l select=1:ncpus=4:mem=4gb:scratch_local=10gb -l walltime=1:00:00 myJob.sh

Pro kompletní popis možností PBS, navštivte sekci O plánovacím systému (EN).

Omezení funkčnosti modulu na část skriptu v komplexních úlohách

Aplikační programy dostupné skrze modulový systém automaticky načítají všechny potřebné závislosti. Jako závislostmi se typicky rozumí další moduly. Při tvorbě dlouhých a komplexních úloh, kdy je nutné aktivovat mnoho modulů, může docházet ke konfliktu načtených závislostí a následnému havarování některých programů. Když uživatel potřebujete v jedné úloze použít moduly, u kterých nemá jistotu, že nejsou v konfliktu, je vhodné omezit použití modulu jen na nezbytnou část úlohy. Takové omezení se provede pomocí kulatých závorek. V podstatě se jedná o náhradu příkazů module add a module rm, ovšem rychlejší a bezpečnější. Omezení modulu na část výpočtu pomocí závorek se provede takto:

(module add module_1
program_1 ... <input> <output>
)

# Zde, po pravé kulaté závorce, již není modul module_1 aktivní (včetně jeho závislostí) a může se pokračovat s použitím modulu module_2

(module add module_2
program_2 ... <input> <output>
)

PBS servery

Protože kapacita každého serveru je omezená a úloh může být velmi mnoho, MetaCentrum má tři PBS servery: meta-pbs.metacentrum.cz, cerit-pbs.cerit-sc.cz a elixir-pbs.elixir-czech.cz. Stroje, které využívají elixir-pbs.elixir-czech.cz jsou rezervovány pro skupinu Elixir (EN). Bežný uživatel proto zpravidla narazí na první dva: meta a cerit.

Každý PBS server “vidí” jinou množinu výpočetních uzlů. Podobně každý čelní uzel připojen k právě jednomu PBS serveru. To, ze kterého čelního uzlu byla úloha spuštěna, tedy určuje, na kterých výpočetních uzlech může být počítána. V tomto smyslu čelní uzly nejsou ekvivalentní.

Trojice: čelní uzel – PBS server – příslušné výpočetní uzly shrnuje následující tabulka. Vezměte na vědomí, že seznam výpočetních uzlů není kompletní.

PBS server Čelní uzel Výpočetní stroje
meta-pbs.metacentrum.cz skirit.ics.muni.cz
alfrid.meta.zcu.cz
tarkil.grid.cesnet.cz
nympha.zcu.cz
charon.metacentrum.cz
minos.zcu.cz
perian.ncbr.muni.cz
onyx.ncbr.muni.cz
lex.ncbr.muni.cz
zubat.ncbr.muni.cz
perian41-56.ncbr.muni.cz
aman.ics.muni.cz
...
cerit-pbs.cerit-sc.cz zuphux.cerit-sc.cz ursa.cerit-sc.cz
urga.cerit-sc.cz
zefron.cerit-sc.cz
phi.cerit-sc.cz
...
All physical machines with cerit-sc.cz ending are managed by cerit, and vice versa
elixir-pbs.elixir-czech.cz elmo.elixir-czech.cz elmoXX.hw.elixir-czech.cz
All physical machines with elixir-czech.cz ending are managed by elixir, and vice versa

ZarovkaMala.png Note: Plánování každé úlohy vyžaduje určité zdroje. V případě, že se jedná o velmi krátké úlohy, může plánování trvat i déle než samotný výpočet. Z tohoto důvodu doporučujeme úlohy sdružit do jedné, pokud potřebujete počítatvelmi mnoho (tisíc a více) krátkých (do 10 minut) úloh. Aby se zabrátnilo zahlcení plánovače, byl stanoven limit 10 000 úloh (běžících nebo čekajících ve frontě) na jednoho uživatele.

Tipy pro odesílání výpočetních úloh

  • PBS servery sdílí některé fronty a mohou si mezi sebou předávat úlohy pro efektivnější využití výpočetních zdrojů. Ne všechny fronty jsou ale sdílené, což může zapříčinit dlouhé čekání, pokud úlohu pošlete na PBS server, jehož výpočetní uzly jsou aktuálně přetížené. Obzvlášť před odesláním náročné výpočetní úlohy je dobré zkontrolovat aktuální vytížení fyzických strojů a vybrat méně vytížený PBS server (= odeslat úlohu z čelního uzlu připojeného na méně zaneprázdněný server)
  • PBS servery mají každý svůj fairshare (EN), což znamená, že jednotlivé PBS servery nezohledňují, kolik zdrojů vaše úloha již využila na zbylých serverech. Pokud mají vaše úlohy nízkou prioritu, protože již spotřebovaly mnoho výpočetních zdrojů, výběr jiného PBS serveru může zkrátit čekání.

Sledujte svou úlohu

Příbuzná témata
[Seznam vašich úloh (EN)]

Příkaz qsub vrací jobID (ID úlohy), které můžete použít k nalezení nebo smazání vaší úlohy (e.g. 1733571). Jestliže jste přihlášeni na čelní uzel zpravovaný stejným PBS serverem, který sleduje úlohu, bude vám pro vyhledání úlohy stačit toto číslo. V opačném případě budete muset použít plné ID úlohy = číslo + jméno PBS serveru. (Např.: 1733571.meta-pbs.metacentrum.cz).

Úlohu je možné sledovat přes on-line aplikaci PBSmon:

Další možnost je sledovat vaši úlohu na CLI pomocí jobID příkazem qstat. Například:

qstat -u jenicek # Vypiš všechny úlohy uživatele "jenicek", které běží nebo čekají ve frontě na aktuálním PBS serveru. 
qstat -u jenicek @meta-pbs.metacentrum.cz @cerit-pbs.cerit-sc.cz @elixir-pbs.elixir-czech.cz # Vypište všechny úlohy uživatele "jenicek", které běží nebo čekají na všech PBS serverech.
qstat -xu jenicek # Vypiš dokončené úlohy uživatele "jenicek".
qstat -f <jobID> # Vypiš podrobnosti o běžící nebo čekající úloze s příslušným jobID.
qstat -xf <jobID> # Vypiš podrobnosti o dokončené úloze s příslušným jobID.

Po odeslání úlohy a zkontrolování jejího stavu se vám typicky zobrazí takováto tabulka

jenicek@skirit~: qstat -u jenicek # Ukaž stav všech běžících nebo čekajících úloh odeslaných uživatelem "jenicek".
meta-pbs.metacentrum.cz: 
                                                                 Req'd  Req'd   Elap
Job ID               Username Queue    Jobname    SessID NDS TSK Memory Time  S Time
-------------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
11733550.meta-pbs.*  jenicek q_2h     myJob.sh         --    1   1    1gb 00:05 Q   --

Písmena pod hlavičkou ‘S’ (status) představují stav úlohy. Nejběžnější stavy úlohy:

  • Q – queued: čeká ve frontě
  • R – running: běží
  • F – finished: skončila

Kromě těchto stavů můžete v PBSmon job list narazit na stav popsaný písmenem “M” (moved), což znamená, že úloha byla přesunuta z původního PBS serveru na jiný.

Sledování běžících úloh

Zkontrolovat výstupní soubory dosud běžící úlohy můžete následovně:

1. Zjistěte, na kterém stroji běží vaše úloha. Po klinutí na tento odkaz se vám zobrazí následující stránka:

Job pbsmon 1.png

Klikněte na ID úlohy. Zobrazí se stránka s informacemi o úloze, jako jsou hostname(= jméno stoje, na kterém úloha běží) a cesta do scratche.

Job pbsmon 2.png

2. Přihlaste se na daný stroj z jakéhokoli čelního uzlu přes ssh. Například:

ssh zapat112.cerit-sc.cz

3. Přejděte do adresáře /var/spool/pbs/spool/ a zkontrolujte soubory:

  • $PBS_JOBID.OU for standard output (stdout – e.g. “1234.meta-pbs.metacentrum.cz.OU”)
  • $PBS_JOBID.ER for standard error output (stderr – e.g. “1234.meta-pbs.metacentrum.cz.ER”)

Pro nepřetržité sledování úlohy můžete použít příkaz tail -f.

jenicek@zapat112.cerit-sc.cz:/var/spool/pbs/spool$ tail -f 1234.meta-pbs.metacentrum.cz.OU # Vypisuj průběžně řádky přibývající v souboru 1234.meta-pbs.metacentrum.cz.OU.

Jak nastavit upozornění na změnu stavu úlohy

V plánovacím systému lze nastavit požadavek na zaslání notifikačního e-mailu při změně stavu úlohy, a to takto:

#PBS -M your.name@your.email.com # NPošli notifikační e-mail na uvedenou adresu. Pokud adresu nevyplníte, bude e-mail zaslán na tu, kterou jste zadali při registraci do MetaCentra.
#PBS -m abe # Pošli e-mail, jakmile úloha začne (b = '''b'''egins), je přerušena (a = '''a'''borts) nebo skončí (e = '''e'''nds).

nebo

#PBS -m ae # Pošli e-mail, pokud se úloha přeruší nebo skončí
#PBS -m n # Neposílej žádný e-mail.

Upozornění: Pokud máte spuštěno více úloh, může se stát, že notifikační e-maily skončí ve spamu. Pokud vám emaily nechodí, zkontrolujte nastavení spamového filtru ve vašem emailovém klientu. Agregace emailů: Abychom se vyhnuli výše zmíněnému problému v případě, že by došlo k odeslání mnoha upozornění v krátkém čase, jsou emailové notifikace agregovány do dávek po 30 minutách. Více se o algoritmu agregace dozvíte na stránce Email_notifications.

Standardní výstup a standardní chybový výstup

V adresáři, odkud byla úloha odeslána, se po jejím skončení (bez ohledu na to, jak skončila) vždy objeví dva soubory: standardní výstup a standardní chybový výstup.

 <job_name>.o<jobID> # standardní výstup úlohy
 <job_name>.e<jobID> # standardní chybový výstup úlohy

Často se stává, že úloha skončí s chybou a uživatel potřebuje zjistit proč. Standardní chybový výstup obsahuje všechny chybové zprávy vygenerované za běhu úlohy a je tím pádem cenným zdrojem informací. Pokud vaše úloha předčasně skončila, přečte si nejdříve standardní chybový výstup. Pokud ohledně tohoto problému plánujete kontaktovat uživatelskou podporu, standardní chybový výstup nemažte, ale pošlete ho současně s vaší žádostí o pomoc.

Soubory si také můžete zkopírovat na svůj PC příkazem scp a zde je dále analyzovat. Nebo to samé udělat na v CLI pomocí některého z následujících příkazů.

jenicek@skirit.cz:~$ cat myjob.sh.o1234 # Vypiš celý obsah souboru "myjob.sh.o1234". 
jenicek@skirit.cz:~$ cat myjob.sh.o1234 | more # Vypiš celý obsah souboru "myjob.sh.o1234" po jednotlivých obrazovkách (na další obrazovku poskočíte mezerníkem).
jenicek@skirit.cz:~$ vi myjob.sh.o1234 # Otevři soubor "myjob.sh.o1234" v textovém editoru vi.
jenicek@skirit.cz:~$ less myjob.sh.o1234 # Otevři soubor "myjob.sh.o1234" pouze pro čtení.

Ukončení úlohy

Nucené ukončení úlohy uživatelem

Pokud si po odeslání úlohy všimnete nějakého problému, můžete úlohu smazat příkazem qdel.

jenicek@skirit~: qdel 21732596.elixir-pbs.elixir-czech.cz # Smaž úlohu, jejíž plné ID je "21732596.elixir-pbs.elixir-czech.cz".

V případě, že úloha je "zaseknutá" a na předchozí příkaz nereaguje, můžete smazání vynutit volbou -W force:

jenicek@skirit~: qdel -W force 21732596.elixir-pbs.elixir-czech.cz

Nucené ukončení úlohy PBS serverem

PBS server hlídá, aby úlohy neřesáhly výpočetní zdroje, které si rezervovaly. Pokud k tomu dojde, PBS server obdrží specifický signál a nuceně úlohy ukončí.

Tento signál můžete najít jako Exit_status ve výpisu úloh v Pbsmonu a na příkazové řádce:

 (BUSTER)melounova@skirit:~$ qstat -x -f 21732596.meta-pbs.metacentrum.cz | grep Exit_status # -f = plný výpis, -x = skončená úloha
  Exit_status = 1

Pokud byla úloha nuceně ukončena pro překročení zdrojů, bude to obvykle jeden z těchto tří:

Zdroj, který byl překročen Exist status (název) Exit status (kód)
počet CPU JOB_EXEC_KILL_NCPUS_SUM -25
paměť JOB_EXEC_KILL_MEM -27
doba běhu (walltime) JOB_EXEC_KILL_WALLTIME -29

Korektní ukončení úlohy

Úlohy, které doběhly bez chyby, mají Exit_status = 0.

Ruční vyčištění scratchů

v případě chybového ukončení úlohy se data z adresáře scratch nesmažou. V takovém případě by je uživatelé měli vždy vymazat ručně. K tomu potřebují znát hostname stroje, kde výpočet běžel, a cestu k adresáři scratch.

ZarovkaMala.png Note: Práva dovolují uživatelům vymazat pouze obsah adresáře scratch, nikoliv adresář samotný.

jenicek@skirit:~$ ssh jenicek@luna13.fzu.cz # přihlaš se na stroj s hostname luna13.fzu.cz
jenicek@luna13:~$ cd /scratch/jenicek/job_14053410.meta-pbs.metacentrum.cz # vstup do adresáře scratch pro úlohu 14053410.meta-pbs.metacentrum.cz
jenicek@luna13:/scratch/jenicek/job_14053410.meta-pbs.metacentrum.cz$ rm -r * # vymaž všechny soubory a podadresáře

Odhlášení

Odhlášení provedete velmi jednoduše: pomocí příkazu exit.

jenicek@skirit:~$ exit
logout
Connection to skirit.metacentrum.cz closed.

Odhlášení ukončí všechny probíhající interaktivní úlohy. Dávkové úlohy nejsou odhlášením uživatele nijak ovlivněny.