= Jak využít stroje Metacentra pro počítání neuronových sítí s GPU [[PageOutline(2-5)]] == Prihláška == Stránka na prihlásenie: https://metavo.metacentrum.cz/cs/application/index.html Pre vyplnenie prihlášky stačí odkliknúť '''Formulář pro přihlášku''' v lište naľavo. Súčasťou prihlášky je aj preukázanie príslušnosti ku akademickej inštitúcii nachádzajúcej sa v ČR. Príslušnosť k MU sa dá preukázať prihlásením sa pomocu svojho UČO a sekundárneho hesla po kliknutí na logo univerzity. Pri vyplňovaní prihlášky dostanete možnosť vyplniť aj príslušnosť ku niektorému labu: CZPJ sa tiež nachádza medzi možnostami. Po odovzdaní formulára bude potrebné počkať na jeho schválenie (zvyčajne to trvá len pár hodín). Na stránke sa okrem možnosti vyplnenia formulára nachádzaju aj podmienky používania. '''Dôležité:''' V prípade, že výsledky vaších výpočtov uvediete v publikácii, je v nej potrebné uviesť aj formálne poďakovanie Metacentru viz. pravidla == Prihlásenie na výpočtový uzol == Login: '''"ssh @"''' Zoznam všetkých výpočtový uzlov a ich stav nájdete na: https://metavo.metacentrum.cz/pbsmon2/nodes/pbs Je v podstate jedno na aký frontend sa prihlásite, kedže pri žiadaní o zdroje vám bude pridelený uzol ktorý vyhovuje požiadavkom (čo nemusí byť nutne ten na ktorom ste prihlásený). Ďalším rozdielom je lokácia domovského adresára v '''/storage''', viz Úložné priestory. [[Image(sshlogin.gif, title="Prihlasenie na uzol zubat1")]] Viac info na: https://wiki.metacentrum.cz/wiki/How_to_compute/Accessing_machines == Úložiská == Metacentrum ponuka 3 typy úložných priestorov pre vaše data. === Scratch storage === Rýchle a malé lokálne úložisko (zvyčajne SSD disky mountnuté do /scratch), ktoré slúžia výhradne pre dočasné súbory počas počítania. Užívateľ si od metacentra "vypýta" veľkosť scratchového úložiska ktoré dostane k danej úlohe. To sa uloží do premennej prostredia '''$SCRATCHDIR''', ktorá zvyčajne referencuje na cestu '''/scratch-*//''' Keď sa na vašom scratchovom úložisku nachádzajú dôležité dáta z výstupov, tak ich je potom vhodné premiestnit na diskové polia - vyžiadaný scratch sa do 14tich dní sám zmaže. Best practice je toto uložisko sám uvolniť po skončení výpočtov. Viac info: https://wiki.metacentrum.cz/wiki/Scratch_storage === Diskové polia === Mountnuté do '''/storage''', tieto polia predstavujú vaše primárne úložisko pre data na ktorých práve nepočítate (nachádza sa tam aj váš domovský adresár). Je limitovaný diskovou kvótou (zhruba 200GB, líši sa podľa poľa). V prípade, že vaše data sú dostatočne malé (do 5 GB poďla wiki), môžete vykonávať výpočty bez scratchu priamo na diskovom poli. V opačnom prípade odporúčam použiť scratch. Osobný pohľad do vášho zaplnenia diskových kvót a zoznamu diskových polí môžete nájsť tu: https://metavo.metacentrum.cz/osobniv3/quotas/user Viac info: https://wiki.metacentrum.cz/wiki/Types_of_data_storages#Data_storages_description.23Disk_arrays === Hierarchické disky === Poskytuje obrovskú kapacitu zložené buď z MAID alebo magnetických pások, ale je vhodné len na data ktoré dlhšiu dobu nebudete používať ale jedného dňa sa k nim vrátite. == Príprava na výpočty == Všetky moduly sa dajú pridávať pomocou príkazu `module(1)` podobne ako na stroji Aisa. === Python === Kedže je u nas Python dost dominantný jazyk, tak som sa mu rozhodol venovať jednu sekciu. Samotný python si viete pridať pomocou `module add python-3.6.2-gcc`, pokial nechcete staršiu alebo Intel verziu: {{{ python-3.6.2 (modul python-3.6.2-gcc) python-3.5.0 (modul python-3.5.0-gcc) python-3.4.1 (modul python-3.4.1-gcc a python-3.4.1-intel) python-2.7.10 (modul python-2.7.10-gcc python-2.7.10-intel) python-2.7.6 (modul python-2.7.6-gcc a python-2.7.6-intel) python-2.7.5 (modul python-2.7.5) python-2.6.2 (modul python-2.6.2) python-2.5 (module python-2.5) }}} Keď chcete pridať pythonovské knižnice, skúste sa pozrieť či ich nenájdete medzi modulmi. Známé výpočtové frameworky ako Keras a Tensorflow sa medzi nimi dajú nájsť (ako napr `tensorflow-1.13.1-gpu-python3`). V prípade že sa knižnica nedá najsť v moduloch, bude potrebné použiť v lepšom prípade PyPI, v horšom Condu, každopádne detailný postup ako tieto moduly (a to nielen pre Python) nainštalovať nájdete tu: https://wiki.metacentrum.cz/wiki/How_to_install_an_application#easy_way_-_using_PyPI_tool === CUDA === Kedže chcete počítať na GPU, bude vhodné pridať aj modul s vhodnými ovladačmi pre danú grafickú kartu, voľne dostupné sú tieto verzie: {{{ cuda -> cuda-7.5 cuda-3.2-kky cuda-4.0 cuda-4.2 cuda-5.0 cuda-5.5 cuda-6.0 cuda-6.5 cuda-7.0 cuda-7.5 cuda-8.0 cuda-9.0 cuda-10.0 cuda-10.1 }}} == Systém plánovania == Metacentrum používa systém plánovania jobov [[https://wiki.metacentrum.cz/wiki/PBS_Professional|PBS Professional]]. Tento systém ponúka 2 typy jobov: * Interaktívny job * Batch job = Interaktívny job = === Popis === Interaktívny job je job v ktorom uživateľ ručne narába s poskytnutými zdrojmi prostredníctvom shellu '''Výhody:''' * GUI * lepší prehľad o tom čo človek robí * dobrý error management '''Nevýhody:''' * horšie využitie poskytnutého výpočtového času (čakanie na ľudský vstup) * nevhodné pre dlho bežiace procesy (náhodou zabijete terminál a váš výpočtový čas je fuč) * nutnosť spoľahlivého pripojenia * nutnosť 'babysittovať' celý výpočet Keď to tak zhrniem, interaktívne joby sú vhodné na experimentovanie či všetko funguje ako má, lebo keď také zlyhanie nastane pri batch scripte tak stratíte všetok výpočtový čas a ten sa prenesie na ďalšieho užívatela vo fronte. === Syntax === Príklad: `qsub -I -l select=1:ncpus=2:mem=4gb:scratch_local=10gb -l walltime=1:00:00 -q gpu` `qsub`: príkaz ktorý vykoná job submission a zaradí vas do fronty, keď si frontu vyčakáte dostanete shell prideleného uzlu Prepínač `-I`: interaktívny job Parameter `-l`: príznak toho že další parameter bude modifikovať požiadavky na zdroje Parameter `select=`: počet uzlov alebo `chunkov`, ktoré vám poskytnú * default=1 Parameter `ncpus=`: počet CPU na jeden chunk Parameter `ngpus=`: počet GPU na chunk Parameter `walltime=`: maximálny čas pre job, keď ho prekročíte, bude vám job automaticky odobratý * default=24 hodín Parameter `mem=`: veľkosť RAMky Parameter `scratch_local=`: veľkosť lokálneho scratchového úložiska Všetky validne možnosti nájdete tu: https://wiki.metacentrum.cz/wiki/How_to_compute/Requesting_resources == Dávkové úlohy == === Popis === Batch script je v podstate obyčajný bash script s pridanou hlavičkou pre PBS. Keď príde rada na užívateľa, vykonajú sa v ňom všetky príkazy a potom job skončí (alebo aj po timeoute) '''Výhody:''' * job bude vykonávaný na pozadí * opustenie terminálu neukončí job * možnosť automatizácie '''Nevýhody:''' * náchylné ku ľudským chybám (chybný script znamená že stratíte všetok výpočtový čas, musíte všetko opraviť, a potom sa znovu zaradiť do fronty) === Príklad === Otvorte textový súbor vo svojom obľúbenom textovom editore (či už nano, pico, vim, či bože chráň emacs): {{{ #!/bin/bash #PBS -N myFirstJob #PBS -l select=1:ncpus=4:mem=4gb:scratch_local=10gb #PBS -l walltime=1:00:00 #Vyse uvedene radky jsou urcene pro planovaci system: uloha pobezi maximalne hodinu, bude pozadovat jeden stroj se 4 procesory, 4 GiB RAM pameti a 10gb scratch adresare trap 'clean_scratch' TERM EXIT # nastaveni uklidu SCRATCHE v pripade chyby cd $SCRATCHDIR || exit 1 # vstoupi do scratch adresare module add g03 # nahraje modul aplikace cp /software/testData/gaussian_test.com $SCRATCHDIR # ziska vstupni data g03 results.out # spusti aplikaci Gaussin a ulozi vysledky do souboru results.out cp results.out /storage/CITY/home/$USER || export CLEAN_SCRATCH=false # presune vysledky do domovskeho adresare nebo je ponecha ve scratchi v pripade chyby }}} Tento jednoduchý script okrem počítania obsluhuje aj presun dát to scratchového úložiska, + obsluha chybových stavov. '''Dôležité:''' Kedže script dostane nový shell, tak bude potrebné všetky moduly pridať priamo v scripte (kedže tam nebudú) Tento script viete submitnúť pomocou `qsub script.sh`. Potom vám bude pridelený unikátny job ID, s ktorým viete manipulovať pri modifikovaní jobu. Sledovať svoje joby cez prehliadač v reálnom čase viete tu: === Výstup === Váš výstup sa bude nachádzať v adresári, ktorý bol v dobe submitovania jobu pracovný. `.o` pre stdout `.e` pre stderr Komplikovanejšiu správu jobov ako sledovanie stavu, storno nájdete tu: https://wiki.metacentrum.cz/wiki/How_to_compute/Job_management https://wiki.metacentrum.cz/wiki/How_to_compute/Requesting_resources