Prostředí PBS Professional

Z MetaCentrum
Přejít na: navigace, hledání

(English version)

Related topics
Official documentation
How to compute
PBS Pro Quick Start [PDF]

Tato stránka popisuje důvody a způsoby použití dávkového systému PBS Professional v MetaCentru.


Důvody nasazení systému PBS Professional

MetaCentrum jako svůj hlavní dávkový systém pro spouštění úloh dosud používá výrazně upravený a rozšířený TORQUE Resource Manager verze 2.4. Během 6 let provozu však naše produkční verze (silně vylepšená verze 2.4) zaostávala za hlavní vývojovou verzí od firmy Adaptive Computing, která je nyní na verzi 6.0.2. Současně jsme stále častěji naráželi na principiální problémy současné produkční verze, které snižovaly propustnost a škálovatelnost systému.

S ohledem na budoucí rozvoj a očekávaný nárůst výpočetních kapacit MetaCentra tak bylo zřejmé, že je potřeba aktualizovat a modernizovat náš dávkový systém. V létě 2016 došlo k uvolnění zdrojových kódů konkurenčního systému PBS Professional, který jsme již dříve v MetaCentru využívali. Po důkladné analýze se ukázalo, že tento moderní dávkový systém splňuje většinu našich aktuálních požadavků, podporuje rozšiřitelnost, nabízí kompatibilitu s ostatními PBS Pro systémy, a dále nabízí i mnohé dosud nepodporované funkcionality. Z těchto důvodů jsme proto prozatím vzdali snahy o časově náročný přechod na aktuální verzi TORQUE a zvolili podle nás jednodušší a zajímavější cestu spočívající v přechodu na otevřený systém PBS Pro.

Z uživatelského i administrátorského hlediska slibuje PBS Pro lepší výkon a některé zajímavé novinky a dosud nepodporované funkcionality. Jedná se například o:

  • podporu Docker kontejnerů
  • vysokou propustnost a škálovatelnost (50 000 uzlů, ~1000 000 jader, >1000 000 úloh/den)
  • detailní specifikace přidělování zdrojů úlohám pomocí parametru "-l select=..." a popis jejich alokace na uzly parametrem "-l place=..."

PBS Pro nabízí výrazně pokročilejší možnosti specifikace požadovaných zdrojů. Lze tedy kupříkladu specifikovat kolik zdrojů požaduje paralelní úloha pro jednotlivé "chunky" (chunk je dále nedělitelná množina zdrojů přidělených úloze na 1 fyz. uzlu), a zároveň i ovlivnit, jakým způsobem se tyto chunky budou plánovat na fyzické uzly. Lze tak například dosáhnout toho, že všechny chunky musí být na 1 stroji "vedle sebe" nebo naopak vždy na různých strojích, případně volně umístěné dle aktuální dostupnosti zdrojů.

Z výše uvedených důvodů jsme se rozhodli experimentálně nasadit tento dávkový systém v testovacím provozu na novém clusteru tarkil(1-16).grid.cesnet.cz v MetaCentru, s cílem postupně jej nasadit i na zbývající zdroje, které prozatím zůstávají pod správou systému TORQUE.


Oficiální dokumentace

Detailní dokumentace je k dispozici na stránkách Altair Engineering, Inc.: PBS Professional documentation

Nejdůležitější z uživatelského hlediska je pak uživatelský manuál: PBS Professional User's Guide


Použití experimentálního prostředí PBS Pro v MetaCentru

  • PBS Pro server arien-pro.ics.muni.cz (na server se nelze hlásit přímo)
  • Vlastní čelní uzel, tarkil.grid.cesnet.cz, na který se lze hlásit stejně jako na jiné čelní uzly.
  • Prostředí PBS Pro je oddělené od prostředí systému Torque v Metacentru. Z jiných čelních uzlů nelze zadávat úlohy do prostředí PBS Pro.
  • Syntaxe zadávání úloh se v PBS Pro liší. Nepoužívejte syntaxi z Torque "-l nodes=...". Používejte prosím pouze novou syntax "select", která je níže popsaná.
  • Vždy zadávejte požadovaný walltime. Walltime oproti prostředí metacentra nelze zadávat pomocí jednotek ale pouze pomocí syntaxe [[hh:]mm:]ss.
  • Vždy zadávejte velikost a typ scratche.
  • V syntaxi select se požadované zdroje dělí na tzv. chunky, které mohou být naplánované na jeden nebo více uzlů.

Quickstart-pbspro-small.pdf


Příkaz qsub a jeho použití v PBS Pro

Následující příklady ukazují nejčastější způsoby práce s příkazem qsub v PBS Pro.


Základní příklady požadavku na úlohu

Pokud není specifikováno jinak, úloze je jako výchozí nastavení přidělen jeden procesor na jednom uzlu a 400 MB paměti. POZOR! Takovéto úloze není přidělován žádný scratch (vždy je nutné o něj explicitně žádat!). Následující příklady ukazují základní požadavky na úlohy.

Požadavek na úlohu o dvou procesorech (v jednom chunku) a 1 GB paměti s požadovanou dobou běhu 1 hodina.

qsub -l select=1:ncpus=2:mem=1gb -l walltime=1:00:00 skript.sh

Požadovat lze samozřejmě i úlohu s více "chunky" (analogie více uzlové úlohy v TORQUE). V terminologii PBS Pro chunk reprezentuje dále nedělitelnou množinu zdrojů přidělených úloze na 1 fyz. uzlu. Oproti systému TORQUE lze zároveň i ovlivnit, jakým způsobem se tyto chunky budou plánovat na fyzické uzly. Lze tak například dosáhnout toho, že všechny chunky musí být na 1 stroji "vedle sebe" nebo naopak vždy na různých strojích, případně volně umístěné dle aktuální dostupnosti zdrojů. Tento základní příklad popisuje hodinovou úlohu požadující tři chunky po dvou procesorech a 1 GB paměti (na každém chunku obdržíme 2 CPU a 1 GB RAM), které se volně naplánují dle aktuální dostupnosti zdrojů (více příkladů na plánování chunků následuje v Sekci 3.3).

qsub -l select=3:ncpus=2:mem=1gb -l walltime=1:00:00 skript.sh 

O prostor na scratch disku a jeho typ je třeba explicitně žádat, stejně tak o licence. Následující příklad rozšiřuje předchozí příklad o požadavek na 1 GB lokálního scratche a 3 licence MATLABu.

qsub -l select=3:ncpus=2:mem=1gb:scratch_local=1gb -l walltime=1:00:00 -l matlab=3 skript.sh  


Scratch

O scratch je třeba požádat. Při žádosti o scratch je třeba žádat o konkrétní typ, neexistuje defaultní typ scratche:

qsub -l select=1:ncpus=1:mem=4gb:scratch_local=10gb,walltime=1:00:00 skript.sh
qsub -l select=1:ncpus=1:mem=4gb:scratch_ssd=1gb,walltime=1:00:00 skript.sh
qsub -l select=1:ncpus=1:mem=4gb:scratch_shared=1gb,walltime=1:00:00 skript.sh

Po žádosti o scratch jsou v úloze dostupné následující proměnné prostředí:

$SCRATCH_VOLUME=<vyhrazená kapacita>
$SCRATCHDIR=<adresář>
$SCRATCH_TYPE=<scratch_local|scratch_ssd|scratch_shared>

example

qsub -l select=3:ncpus=2:mem=1gb:scratch_shared=1gb -l walltime=1:00:00 skript.sh

Příklad skriptu definující průběh úlohy

Následující skript definuje kroky prováděné uvnitř výpočetní úlohy včetně manipulace s daty.

 #!/bin/bash
 #PBS -l select=1:ncpus=2:mem=1gb:scratch_local=4gb
 #PBS -l walltime=04:00:00
 # vyse uvedene direktivy pro planovaci system si upravte/umazte dle potreb sveho vypoctu

 # nastaveni uklidu SCRATCHE pri chybe nebo ukonceni
 # (pokud nerekneme jinak, uklidime po sobe)
 trap 'clean_scratch' TERM EXIT

 DATADIR="/storage/praha1/home/$PBS_O_LOGNAME/"

 # prekopirujeme vstupni data do adresare scratch
 cp $DATADIR/vstup.txt $SCRATCHDIR || exit 1
 cd $SCRATCHDIR || exit 2

 # pridani aplikacnich modulu potrebnych k vypoctu, napr.:
 module add jdk-8

 # vlastni provedeni vypoctu, napr.:
 java -jar vypocet.jar

 # zkopirovani vysledku z adresare scratch zpet na diskove pole, pokud se nepovede, nemazeme scratch
 cp vystup.txt $DATADIR || export CLEAN_SCRATCH=false

Skript se do plánovacího systému vloží příkazem

qsub skript.sh

Tento příklad zajistí uklizení adresáře scratch po ukončení úlohy (příkaz clean_scratch). Pokud nedojde k úspěšnému zkopírování výsledných souborů, nebude adresář scratch vymazán a data si z něj je možno vyzvednout manuálně. Ve skriptu je použita proměnná $PBS_O_LOGNAME, ve které se nachází uživatelské jméno aktuálního uživatele. Lze také využít další užitečnou proměnou $PBS_O_WORKDIR, v níž se nachází cesta k adresáři, kde byl proveden příkaz qsub.

Pokročilá syntaxe select

Nová synaxe "select" nabízí více možností. V následujících příkladech se podrobněji popisuje:

  • použití chunků
  • zadávání požadavků na konkrétní stroj
  • práce s cgroupami
  • způsob žádání o přítomnost/nepřítomnost dané vlastnosti stroje
  • práce se scratch disky

Pokud Vás tyto možnosti zajímají, čtěte dále, případně konzultujete uživatelskou dokumentaci: PBS Professional User's Guide.

Zakladní příklad, kde jsou požadovány 2 procesory na jednom uzlu a 1 GB paměti po dobu 1 hodiny. Požadován je jeden chunk:

qsub -l select=1:ncpus=2:mem=1gb -l walltime=1:00:00 skript.sh


Dva chunky po jednom procesoru:

qsub -l select=2:ncpus=1 -l walltime=1:00:00 skript.sh

Dva chunky, jeden po jednom procesoru a druhý se dvěma procesory:

qsub -l select=1:ncpus=1+1:ncpus=2 -l walltime=1:00:00 skript.sh

Žádost o konkrétní uzel tarkil3.metacentrum.cz (použijte vždy krátké jméno):

qsub -l select=1:ncpus=1:vnode=tarkil3 -l walltime=1:00:00 skript.sh

Žádost o uzel mající vlastnost "cl_tarkil". Je potřeba explicitně napsat hodnotu vlastnosti - True:

qsub -l select=1:ncpus=1:cl_tarkil=True -l walltime=1:00:00 skript.sh

Žádost o uzel nemající vlastnost "cl_tarkil":

qsub -l select=1:ncpus=1:cl_tarkil=False -l walltime=1:00:00 skript.sh

Příklad žádosti o stroj se cgroups:

qsub -l select=1:ncpus=1:cgroups=True -l walltime=1:00:00 skript.sh

Plánování chunků pomocí parametru place

Oproti výpočetnímu prostředí Torque lze lépe specifikovat, jak budou jednotlivé chunky naplánované na uzly. K tomuto účelu slouží parametr "-l place=" nebo se parametr uvede za čárkou po specifikaci chunků.

Žádost o dva chunky na exkluzivním uzlu/ech (nikoliv nutně dva uzly), tj. na uzlu/ech bez dalších běžících úloh:

qsub -l select=2:ncpus=1:mem=1gb -l walltime=1:00:00 -l place=excl skript.sh

Povolení plánovat chunky na uzly libovolně, tj. dle aktuálního stavu dostupnosti zdrojů na uzlech (chunky mohou být na jednom nebo více uzlech, toto chování je výchozí):

qsub -l select=2:ncpus=1:mem=1gb,walltime=1:00:00,place=free skript.sh

Všechny chunky musí být na jednom uzlu (pokud dost velký uzel neexistuje, úloha se nespustí nikdy):

qsub -l select=2:ncpus=1:mem=1gb -l walltime=1:00:00 -l place=pack skript.sh

Každý chunk se umístí na jiný uzel (takto se chová prostředí Torque):

qsub -l select=2:ncpus=1:mem=1gb -l walltime=1:00:00 -l place=scatter skript.sh

Je možné kombinovat exkluzivitu se specifikací plánování chunků, vyžádání třech exkluzivních uzlů se provede následovně:

qsub -l select=3:ncpus=1:mem=1gb -l walltime=1:00:00 -l place=scatter:excl skript.sh


Infiniband

Parametr "-l place" se rovněž používá pro žádost o infiniband:

qsub -l select=3:ncpus=1 -l walltime=1:00:00 -l place=group=infiniband skript.sh

Při žádosti o konkrétní hodnotu infinibandu už je třeba požádat uvnitř chunku:

qsub -l select=3:ncpus=1:infiniband=brno -l walltime=1:00:00 skript.sh

Licence

O licence se žádá stejně jako v systému Torque, tedy ve zvláštním parametru -l nebo za čárkou po specifikaci chunku.

qsub -l select=3:ncpus=1  -l walltime=1:00:00 -l matlab=3 skript.sh

Výpočet na GPU

Pro vypočet na gpu se používá fronta gpu, která je přístupná pro všechny uživatele Metacentra. Standardně je přiřazena jedna gpu karta. Pro žádost o více gpu se uvnitř chunku specifikuje hodnota ngpus. ID GPU karet jsou viditelná v proměnné CUDA_VISIBLE_DEVICES.

qsub -l select=ncpus=1:ngpus=2 -l walltime=1:00:00 -q gpu skript.sh

Pole úloh

  • Celé pole existuje jako samostatná úloha, jeho ID má "[]" za číslem.
  • Tato úloha poskytuje statistiku nedokončených podúloh:
$ qstat -f 969390'[]' -x | grep array_state_count
   array_state_count = Queued:0 Running:0 Exiting:0 Expired:0 
  • ID podúlohy má tvar: 969390[1].arien-pro.ics.muni.cz. Na podúlohu je možné se ptát pomocí příkazu qstat.
  • Místo PBS_ARRAYID (Torque) se uvnitř podúlohy používá PBS_ARRAY_INDEX.
  • V proměnné PBS_ARRAY_ID je uvnitř podúlohy identifikátor celého pole.

Další uživatelské rozdíly PBS Pro oproti Torque

Odlišnosti příkazu qstat

  • Dokončená úloha je ve stavu "F" (finished), nikoliv "C" (completed) jak je zvykem v Torque.
  • Příkaz qstat standardně zobrazuje pouze čekající a bežící úlohy. Pro zobrazení dokončených úloh je třeba zavolat qstat -x.
qstat -u <login> vypíše běžící a čekající úlohy uživatele
qstat -x -u <login> vypíše dokončené úlohy uživatele
qstat -f <jobID> vypíše detaily čekající nebo běžící úlohy
qstat -x -f <jobID> vypíše detaily ukončené úlohy
  • U menší skupinky jobu může PBS Pro zobrazovat očekávaný start (Est Start Time). Zobrazení je možné pomocí příkazu qstat -T.

Další rozdíly

  • Cgrupy jsou na stroji buď zapnuté nebo vypnuté nelze na konkrétním stroji žádat o zapnutí/vypnutí cgroup.
  • Všechny požadavky na chunky musí být uvnitř jednoho -l parametru, nelze tedy například žádat o pamět zvlášť. Takto ne: -l select=2:ncpus=1 -l mem=1gb
  • minspec, maxspec není k dispozici

Známé problémy

  • Ladíme MPI, chybí knihovny, některé programy je potřeba překompilovat, programů je hodně, na požádání urychlíme přípravu těch nejpoužívanějších

Problémy, prosím, hlaste na meta@cesnet.cz