Changes between Version 6 and Version 7 of cs/MetacentrumGpu


Ignore:
Timestamp:
Jul 17, 2019, 10:21:30 AM (5 years ago)
Author:
Ales Horak
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • cs/MetacentrumGpu

    v6 v7  
    11= Jak využít stroje Metacentra pro počítání neuronových sítí s GPU
    22
    3 [[Prihláška]]
    4 
    5 [[Úložiská a výpočtové uzly]]
    6 
    7 [[Vytváranie jobov]]
     3[[PageOutline(2-5)]]
     4
     5== Prihláška ==
     6
     7Stránka na prihlásenie: https://metavo.metacentrum.cz/cs/application/index.html
     8
     9Pre 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.
     10
     11Po odovzdaní formulára bude potrebné počkať na jeho schválenie (zvyčajne to trvá len pár hodín).
     12
     13Na stránke sa okrem možnosti vyplnenia formulára nachádzaju aj podmienky používania.
     14
     15'''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
     16
     17
     18== Prihlásenie na výpočtový uzol ==
     19
     20Login: '''"ssh <META_USERNAME>@<FRONTEND>"'''
     21
     22Zoznam všetkých výpočtový uzlov a ich stav nájdete na:
     23https://metavo.metacentrum.cz/pbsmon2/nodes/pbs
     24
     25Je 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.
     26
     27[[Image(sshlogin.gif, title="Prihlasenie na uzol zubat1")]]
     28
     29Viac info na: https://wiki.metacentrum.cz/wiki/How_to_compute/Accessing_machines
     30
     31== Úložiská ==
     32
     33Metacentrum ponuka 3 typy úložných priestorov pre vaše data.
     34
     35=== Scratch storage ===
     36
     37Rý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-*/<LOGIN>/<JOB_ID>'''
     38
     39Keď 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.
     40
     41Viac info: https://wiki.metacentrum.cz/wiki/Scratch_storage
     42
     43=== Diskové polia ===
     44
     45Mountnuté 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.
     46
     47Osobný 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
     48
     49Viac info: https://wiki.metacentrum.cz/wiki/Types_of_data_storages#Data_storages_description.23Disk_arrays
     50
     51=== Hierarchické disky ===
     52Poskytuje 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.
     53
     54
     55== Príprava na výpočty ==
     56Všetky moduly sa dajú pridávať pomocou príkazu `module(1)` podobne ako na stroji Aisa.
     57=== Python ===
     58Kedž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:
     59
     60{{{
     61python-3.6.2 (modul python-3.6.2-gcc)
     62python-3.5.0 (modul python-3.5.0-gcc)
     63python-3.4.1 (modul python-3.4.1-gcc a python-3.4.1-intel)
     64python-2.7.10 (modul python-2.7.10-gcc python-2.7.10-intel)
     65python-2.7.6 (modul python-2.7.6-gcc a python-2.7.6-intel)
     66python-2.7.5 (modul python-2.7.5)
     67python-2.6.2 (modul python-2.6.2)
     68python-2.5 (module python-2.5)
     69}}}
     70
     71Keď 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`).
     72
     73V 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
     74
     75=== CUDA ===
     76
     77Kedž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:
     78{{{
     79cuda -> cuda-7.5
     80cuda-3.2-kky
     81cuda-4.0
     82cuda-4.2
     83cuda-5.0
     84cuda-5.5
     85cuda-6.0
     86cuda-6.5
     87cuda-7.0
     88cuda-7.5
     89cuda-8.0
     90cuda-9.0
     91cuda-10.0
     92cuda-10.1
     93}}}
     94
     95== Systém plánovania ==
     96
     97Metacentrum používa systém plánovania jobov [[https://wiki.metacentrum.cz/wiki/PBS_Professional|PBS Professional]]. Tento systém ponúka 2 typy jobov:
     98
     99* Interaktívny job
     100* Batch job
     101
     102= Interaktívny job =
     103
     104=== Popis ===
     105
     106Interaktívny job je job v ktorom uživateľ ručne narába s poskytnutými zdrojmi prostredníctvom shellu
     107
     108'''Výhody:'''
     109* GUI
     110* lepší prehľad o tom čo človek robí
     111* dobrý error management
     112
     113'''Nevýhody:'''
     114* horšie využitie poskytnutého výpočtového času (čakanie na ľudský vstup)
     115* nevhodné pre dlho bežiace procesy (náhodou zabijete terminál a váš výpočtový čas je fuč)
     116* nutnosť spoľahlivého pripojenia
     117* nutnosť 'babysittovať' celý výpočet
     118
     119Keď 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.
     120
     121=== Syntax ===
     122
     123Príklad:
     124
     125`qsub -I -l select=1:ncpus=2:mem=4gb:scratch_local=10gb -l walltime=1:00:00 -q gpu`
     126
     127`qsub`: príkaz ktorý vykoná job submission a zaradí vas do fronty, keď si frontu vyčakáte dostanete shell prideleného uzlu
     128
     129Prepínač `-I`: interaktívny job
     130
     131Parameter `-l`: príznak toho že další parameter bude modifikovať požiadavky na zdroje
     132
     133Parameter `select=`: počet uzlov alebo `chunkov`, ktoré vám poskytnú
     134* default=1
     135
     136Parameter `ncpus=`: počet CPU na jeden chunk
     137
     138Parameter `ngpus=`: počet GPU na chunk
     139
     140Parameter `walltime=`: maximálny čas pre job, keď ho prekročíte, bude vám job automaticky odobratý
     141* default=24 hodín
     142
     143Parameter `mem=`: veľkosť RAMky
     144
     145Parameter `scratch_local=`: veľkosť lokálneho scratchového úložiska
     146
     147Všetky validne možnosti nájdete tu: https://wiki.metacentrum.cz/wiki/How_to_compute/Requesting_resources
     148
     149== Dávkové úlohy ==
     150
     151=== Popis ===
     152Batch 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)
     153
     154'''Výhody:'''
     155* job bude vykonávaný na pozadí
     156* opustenie terminálu neukončí job
     157* možnosť automatizácie
     158
     159'''Nevýhody:'''
     160* 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)
     161
     162=== Príklad ===
     163
     164Otvorte textový súbor vo svojom obľúbenom textovom editore (či už nano, pico, vim, či bože chráň emacs):
     165
     166{{{
     167#!/bin/bash
     168#PBS -N myFirstJob
     169#PBS -l select=1:ncpus=4:mem=4gb:scratch_local=10gb
     170#PBS -l walltime=1:00:00
     171
     172#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 
     173trap 'clean_scratch' TERM EXIT # nastaveni uklidu SCRATCHE v pripade chyby
     174
     175cd $SCRATCHDIR || exit 1 # vstoupi do scratch adresare
     176
     177module add g03 # nahraje modul aplikace
     178cp /software/testData/gaussian_test.com $SCRATCHDIR # ziska vstupni data
     179g03 <gaussian_test.com >results.out # spusti aplikaci Gaussin a ulozi vysledky do souboru results.out
     180
     181cp results.out /storage/CITY/home/$USER || export CLEAN_SCRATCH=false # presune vysledky do domovskeho adresare nebo je ponecha ve scratchi v pripade chyby
     182}}}
     183
     184Tento jednoduchý script okrem počítania obsluhuje aj presun dát to scratchového úložiska, + obsluha chybových stavov.
     185
     186'''Dôležité:''' Kedže script dostane nový shell, tak bude potrebné všetky moduly pridať priamo v scripte (kedže tam nebudú)
     187
     188Tento script viete submitnúť pomocou `qsub script.sh`. Potom vám bude pridelený unikátny job ID, s ktorým viete manipulovať pri modifikovaní jobu.
     189
     190Sledovať svoje joby cez prehliadač v reálnom čase viete tu: <nevedel som nájsť link, doplním>
     191
     192=== Výstup ===
     193Váš výstup sa bude nachádzať v adresári, ktorý bol v dobe submitovania jobu pracovný.
     194
     195`<job_name>.o<jobID>` pre stdout
     196`<job_name>.e<jobID>` pre stderr
     197
     198Komplikovanejšiu správu jobov ako sledovanie stavu, storno nájdete tu: https://wiki.metacentrum.cz/wiki/How_to_compute/Job_management
     199
     200
     201
     202https://wiki.metacentrum.cz/wiki/How_to_compute/Requesting_resources