Chemical engineering computation cluster

Read Me First / Stručný návod
Print This Page Print This Page

Obsah

  1. Seznam počítačů v clusteru
  2. Návod k používání clusteru
    1. Kontrola nastavení proměnných (environmental variables)
    2. Vytvoření dávkového souboru (scriptu) a základní příkazy
    3. Spouštění jobů pouze na určitých počítačích
    4. Rezervace paměti
    5. Interaktivní úlohy
    6. Spouštění velice dlouhých úloh
    7. Další (možná užitečné) možnosti q* příkazů
    8. Pořadí spouštění jobů ve frontě, přístupová oprávnění, atd.
  3. Kontakty
  4. Doplňující informace a některé změny
  5. Odkazy na další zdroje informací a manuály

Seznam počítačů v clusteru

Joby mohou běžet na těchto linuxových počítačích (uzlech)

 Jméno  Procesor (rychlost)  Pamět  Pozn.
 leopard  8 x 2.83 GHz (5700)  32 GB  qmaster, matlab, /leopard
 viper  8 x 2.50 GHz (5000)  32 GB  /users, /scratch
 pardus  8 x 2.67 GHz (5500)  24 GB  —
 puma  8 x 2.33 GHz (4700)  8 GB  matlab
 eagle  32 x 2.00 GHz (4000)  64 GB  access restricted
 elk  8 x 2.33 GHz (4700)  64 GB  —
grizzly 32 x 3.40 GHz (6799) 256 GB
 lupus  2 x 3.33 GHz (6700)  16 GB  /wolf
 panda  2 x 2.66 GHz (5700)  8 GB  —
 bimbo  2 x 2.66 GHz (5700)  8 GB  —
 scorpion  2 x 2.33 GHz (4700)  8 GB  —
 wolf  40 x 3.10 GHz (6196)  125 GB  (new 2015)
 tiger  40 x 3.10 GHz (6196)  125 GB  (new 2015)
python 56 x 2.00 GHz (xxx) 64 GB (new 2015)

Programy a čtené a ukládané soubory musejí být na těchto místech
(pomocí NFS dostupných na všech počítačích v clusteru)

  • /leopard
  • /leopard2
  • /scratch
  • /wolf
  • /users

Celková kapacita těchto disků je 4.89 TB. Další místa je možné přidat podle potřeby (jen je potřeba zajistit, aby byly trvale namountovány na všech uzlech clusteru).

Správce clusteru (qmaster) běží na počítači leopard, ostatní uzly je možné vypnout (pokud se na nich nic nepočítá). Použitý software je Grid Engine 6.1.

Přidání dalších uzlů do clusteru je možné. Také je možné nastavit jiné linuxové počítače jako tzv. submit hosts, tj. počítače, ze kterých je možné spouštet joby, ale na kterých se nepočítá.

On-line informace

Aktivní pouze z lokální sítě, vyžaduje povolený Javascript a nefunguje pod IE

Zatížení clusteru

Teplota v místnosti s počítači

Návod k používání clusteru

Kontrola nastavení proměnných (environmental variables)

Ve většíně případů by měly být proměnné nastaveny správně automaticky, ale pro jistotu vyzkoušejte např.

$ qstat -f

pokud se objeví chyba “command not found” je potřeba nastavit systémové proměnné. Podle typu vašeho shellu zadejte pro tcsh

$ source /leopard/sgeroot/default/common/settings.csh

nebo pro bash

$ . /leopard/sgeroot/default/common/settings.sh

a zkuste znovu opakovat předchozí příkaz.

Pokud se objeví jiná chyba, pak pravděpodobně neběží qmaster na leopardovi nebo jsou problémy na síti.

Vytvoření dávkového souboru (scriptu) a základní příkazy

Předpokládejme, že jsme v adresáři, ze kterého jsme zvyklí spouštět náš program example.x například

$ cd /users/myname/myproject
$ ./example.x > mylogfile &

I když je možné za určitých podmínek zadávat přímo binární úlohy do fronty, je lepší vytvořit si skript. Vytvořte například tento soubor myjob.xkterý obsahuje jediný řádek

./example.x

Nezapomeňte, nastavit skript jako spustitelný

$ chmod u+x myjob.x

Úlohu (job) vložíme do fronty příkazem

$ qsub myjob.x

a pokud je vše funguje jak má, tak status jobu ve frontě je možné sledovat příkazem

$ qstat

Zobrazí se evidenční číslo, priorita (joby s vyší prioritou se spouští dříve), jméno uživatele, status jobu, čas kdy byl vložen do fronty nebo spuštěn a u běžících jobů i počítač na kterém běží. Status jobu je nejčastěji qw u jobů čekajících na spuštění a r u jobů, které právě běží.

Job po svém spuštění zapisuje svuj standartní výstup a chyby (stdout a stderr) do souborů myjob.x.o12345 a myjob.x.e12345, které jsou ve stejném adresáři ze kterého byl job vložen příkazem qsub12345 je evidenční číslo jobu (jobid). Případné chybové hlášky při běhu programu by se měly objevit v těchto souborech.

Běžící nebo čekající job je možné ukončit nebo vymazat z fronty příkazem

$ qdel jobid

Nemůžete-li najít svůj job v seznamu příkazem qstat je možné, že již skončil (např. díky chybě). Seznam všech posledních již ukončených jobů je možné zobrazit příkazem

$ qstat -s z

Informace o konkrétním jobu, například pokud nevíte, proč nebyl spuštěn a čeká ve frontě se zobrazí příkazem:

$ qstat -j jobid

Spouštění jobů pouze na určitých počítačích

Při zadávání do fronty můžeme nastavit, aby se se job spouštěl pouze na určitých počítačích. Tento požadavek (request) může být tzv. hard nebo soft. Soft request znamená, že pokud je volná fronta vyhovující podmínkám, tak se job přednostně spustí v této frontě, jinak se může spustit kdekoliv. Hard request musí být splněn vždy, tj pokud počítač s požadovanými parametry není volný, tak job počká ve frontě, dokud se neuvolní.

Požadavky je možné zadávat buď pomocí dalších přepínačů při spouštění příkazem qsub nebo je možné je napsat přímo do skriptu na řádky začínající #$.

Toto je příklad takového skriptu myjob2.x:

#!/bin/bash
# tento job chci spustit na pocitacich leopard nebo puma, pokud jsou volne
# ale kazdopadne potrebuji volnou pamet aspon 2 GB
#$ -soft -l h="leopard|puma"
#$ -hard -l mf=2G
./example.x # tady se spousti vlastni program

Který pak odešleme do fronty jednoduše:

$ qsub myjob2.x

Stejné požadavky můžeme deklarovat i na příkazové řádce:

$ qsub -l mf=2G -soft -l h="leopard|puma" myjob.x

(“mf” je hard-požadavek na volnou pamět, “h” je soft-požadavek na jměno počítače díky přepínači -soft)

Rezervace paměti

Pokud spouštíte úlohy, které potřebují větší množství paměti (více než 500 MB), měli byste to v zájmu hladšího chodu clusteru specifikovat. Požadavek na rezervaci paměti je možné deklarovat opět buď ve skriptu nebo na příkazové řádce.

Řádek na začátku skriptu bude

#$ -hard -l mm=2G

a nebo parametr v příkazu qsub

$ qsub -l mm=2G myjob.x

Berte na vědomí, že pokud požadavek “mm” vůbec nespecifikujete, implicitně se předpokládá hodnota 500M. To samozřejmě nebrání tomu nastavit pro úlohy, které potřebují velmi málo paměti i menší hodnotu než 500M.

Pozor: Je potřeba rozlišovat mezi požadavky/requests “mm” (zkratka k “mreserved”) a “mf” (zkratka k “mem_free”). Jsou to dvě různé věci, které na sobě nezávisí. (Někdy může být vhodné zadat oba požadavky současně.)

“mf” představuje aktuální volnou pamět na daném počítači. Pokud v okamžiku spuštění jobu je na počítači menší než požadované množství paměti, potom se job nespustí.

Naproti tomu “mm” je spíše evidenční údaj, kterým informujete cluster kolik paměti bude váš job potřebovat. Cluster je nastaven tak, aby součet takto “rezervované” paměti všech jobů současně běžících na jednom počítači nebyl větší než je množství fyzické paměti tohoto počítače.

Je důležité, aby evidované rezervace odpovídaly skutečnosti. Cluster nemá možnost před spuštěním poznat, kolik paměti bude job potřebovat a proto je na uživatelích, aby tento údaj uváděli. Toto není nijak vynucováno, takže job může použít i více paměti než si rezervoval aniž by byl automaticky ukončován (i když by to bylo možné nastavit).

Jak určit množství paměti, kterou úloha potřebuje?

Pro úlohy, které ještě běží můžete napsat

$ qstat -j jobid | grep usage

a podívat se na pole “vmem” a “maxvmem”, které udávají aktuální a maximální množství paměti využívané danou úlohou.

Pokud úloha již skončila, qstat ji už nezná, ale můžete o ní vytáhnout informace z archívu

$ qacct -j jobid

kde “maxvmem” je maximální množství paměti, které úloha využila.

Jak určit kolik je volné paměti na počítačích v clusteru?

$ qhost -F mm mf

dává přehled o aktuální situaci. Kromě dalších údajů zde najdeme “mem_free” a “mreserved” pro každý počítač v clusteru.

Interaktivní úlohy

Přes cluster mohou běžet i programy v interaktivním režimu, například MATLAB, DX, a jiné. Výhoda spouštění přes cluster v porovnání s přímým spuštěním programu je v tom, že grid engine může vyhradit uživateli volný slot a na tento už nebude pouštět jiné úlohy.

Nejdříve překontrolujte, že se nachazíte v adresáři, který bude přístupný ze všech uzlů clusteru, což jsou v součastnosti adresáře na discích

/users/... a /leopard/...

Tento příkaz spustí terminálové okno z počítače v clusteru, který je právě volný a zobrazí je na vašem počítači (pokud máte správně nakonfigurován Xserver):

$ qsh -display myclient.vscht.cz:0.0

kde myclient je název počítače u kterého sedíte.

Je samozřejmě možné požadovat slot pouze na určitém počítači, např. na leopardovi:

$ qsh -display myclient.vscht.cz:0.0 -l h=leopard

Funguje-li vše správně, potom:

Your job 123 ("INTERACTIVE") has been submicodeed
waiting for interactive job to be scheduled ...
Your interactive job 123 has been successfully scheduled.

Na monitoru máme připravené nové okno, se kterým můžeme pracovat (například spustit interaktivní MATLAB sezení). Po ukončení práce je nutné okno uzavřít, abyste neblokovali výpočetní slot.

Pokud není volný slot na požadovném počítači dostaneme:

Your "qsh" request could not be scheduled, try again later.

Potom je nutné počkat, až se slot uvolní a zkusit to znovu. V případě, že dostaneme následující chybu:

Could not start interactive job.

zkontrolujte, že

(i) se nacházíte v adresáři pod /users nebo /leopard a nebo
(ii) máte na vašem počítači povoleno přístup pro X11 z jiných počítačů (vyzkoušejte např. $ xhost -, tady je postup pro povolení u Fedory).

Spouštění velice dlouhých úloh

Spouštíte-li úlohy trvající dlouhou dobu (řádově týdny) a nechcete nimi zahltit celý cluster, je doporučeno je odeslat s požadavkem -l lng=1 např.:

qsub -l lng=1 myverylongjob.x

nebo přidáním řádku do skriptu myverylongjob.x

#$ -hard -l lng=1

Efekt je takový, že cluster nedovolí spustit najednou více než 8 takových úloh a na clusteru zbyde dostatek volných procesorů pro kratší úlohy.

Další (možná užitečné) možnosti q* příkazů

  • qalter
qalter -q all.q jobid
qalter -l h="bimbo" jobid
qalter -l mm=100M jobid
Přesune čekající job do jiné fronty, změní požadavky na spuštění jobu, apod. Lze použít pouze pro joby, které zatím čekají ve frontě.
  • qsub
qsub -b y
Když budete chtít řadit do fronty pouze binární soubory (není třeba vytvářet skript). Ukázka použití: $ qsub -b y ./example.x
qsub -j y
Spojí výstupy stdout a stderr do jednoho souboru.
qsub -h
Zařadí job do fronty se statusem hold, tj. počkat ve frontě a nespouštět.
$ qsub -h myjob.x
Vhodné asi v případě, že nechcete zahltit celý cluster příliš mnoha běžícími joby. Job se potom dá odblokovat příkazem:
$ qalter -h U jobid
qsub -now y
Pokusí se job okamžitě spustit a pokud není volný počítač vrátí chybu a job se do fronty nezařadí.
  • qstat
qstat -f
Více informací než samotné qstat.
qstat -j
qstat -j jobid
Podrobné informace o konkrétním jobu.
qstat -u user
Filtr na joby pouze konkrétního uživatele.
qstat -u '*'
Zobrazí joby všech uživatelů
qstat -s z
Zobrazit seznam již ukončených jobů
qstat -ext, -urg, -pri
Informace o functional a share, urgency and priority politikách.
qstat -r
Informace o požadavcích jobů (requests).
  • qhost
qhost -j
qhost -q
qhost
qhost -F mm mf lng
Informace o jednotlivých uzlech.
  • qmon
Grafické rozhraní pro prohlížení a správu clusteru, zadávání jobů, apod.
  • qacct
qacct -o -d 10
Statistika využití clusteru za posledních 10 dní podle jednotlivých uživatelů.
qacct -j jobid
qacct -d 10 -j
Informace o ukončených jobech.

Pořadí spouštění jobů ve frontě, přístupová oprávnění, atd.

Poznámka: Tato nastavení se podle potřeby mohou měnit

Po odeslání jobu do fronty systém určuje, zda je možné job spustit a pokud ano, tak je okamžitě spustí. Doba běhu jobu není omezena, běžící job poběží, dokud se sám neukončí (nebo dokud ho neukončí jeho majitel). Jinak job čeká ve frontě. Pro pořadí jobů ve frontě je nastaveno, že přednost mají joby uživatelů, kterým na clusteru aktuálně běží méně jobů. Grid Engine umožňuje i komplikovanější nastavení priorit (např. brát v úvahu i spotřebovaný čas za minulé období, rozlišovat různé typy uživatelů podle důležitosti, atd.), ale zatím bych ponechal výše uvedené jednoduché nastavení.

Grid engine je nastaven tak, aby bylo stále možné v odůvodněných případech spouštět joby přímo (tj. bez použití grid engine). Joby spouštěné clusterem mají nastavenu nice 10. Tj. stále je možné spouštět interaktivní úlohy nebo krátké testovací běhy přímo na jednotlivých počítačích (a obcházet tak fronty). Grid engine je nastaven, že pokud je konkrétní počítač vytížen, tak na něj nebude posílat další joby dokud se neuvolní.

Všichni uživatelé mohou spouštět joby na všech uzlech (většinou). Výjimkou je počítač scorpion s omezeným přístupem.

Je nastaveno omezení na maximální počet běžících jobů jednoho uživatele. Po dohodě je možné tento limit dočasně navýšit, při velkém aktuálním vytížení clusteru bude naopak dočasně snížen .

Všechny joby jsou standardně odesílány do fronty “all.q”. Tato fronta využije na počítači leopard/puma pouze část slotů. Byla vytvořena další fronta “lvip.q” speciálně pro joby, které mají běžet na leopardovi/pume (zejména MATLAB) a pro které jsou vyhrazeny zbylé sloty. Joby do této fronty odešleme s parametrem “-q lvip.q”, např.

$ qsub -q lvip.q myjob.x

$ qsh -q lvip.q -display myclient.vscht.cz:0.0

Kontakty

S dotazy, připomínkami nebo problémy se prosím obracejte na:

Doplňující informace a některé změny

4.12.2013
Je možné spouštět víceprocesorové úlohy (joby) paralelizované pomocí OpenMP. K příkazu “qsub” přidejte parametr -pe threaded 2-4 nebo na začátek skriptu vložte řádek
#$ -pe threaded 2-4.
Rozmezí 2-4 určuje počet slotů (procesorů), které mohou být úloze přiděleny (všechny sloty musí být na jednom počítači). Pro určení pořadí ve frontě rozhoduje počet právě zabraných slotů (nikoliv počet vlastních úloh).
V této souvislosti jsem pozměnil chování clusteru při spouštění úloh (nově “unix_behavior” místo “posix_compliant” a přidání “starter_method”, která nastavuje proměnnou OMP_NUM_THREADS podle počtu přidělených procesů). Pokud by se nově objevily problémy a chyby při spouštění úloh jako například "cannot open shared object file", tak se ozvěte.
22.12.2009
Testujeme knihovnu BLCR (pro “zmrazení” a následné “oživení” procesů). Zatím instalováno na wolfovi a lupusovi. Informace zde.
23.11.2009
Leopard / Puma – vytvořena nová fronta lvip.q:
Představa je taková, že fronta lvip.q bude vyhrazena především pro MATLAB (interaktivní) výpočty. Prosíme, abyste MATLAB (interaktivní) joby přednostně zasílali do této fronty. Několik vyhrazených procesorů na pumě a leopardovi nebude využíváno joby ze standardní (all.q) fronty, ale budou na ně mít přístup pouze joby z nové (lvip.q) fronty. Pro zařazení jobu do vybrané fronty přidejte ke spouštěcímu příkazu (qsub nebo qsh) parametr “-q lvip.q“.
Joby čekající ve (špatné) frontě můžete přesunout příkazem qalter, např.
$ qalter -q all.q 1234
Výpočty v Matlabu: Je doporučeno spouštět přes cluster, viz
Interaktivní úlohy
Počty vyhrazených (ve frontě lvip.q) procesorů se bude měnit dle potřeby. Dejte vědět, pokud chcete využívat procesory na pumě a leopardovi pro MATLAB výpočty.

Odkazy na další zdroje informací a manuály