wiki:cs/MetacentrumGpu

Version 7 (modified by Ales Horak, 6 weeks ago) (diff)

--

Jak využít stroje Metacentra pro počítání neuronových sítí s GPU

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 <META_USERNAME>@<FRONTEND>"

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.

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-*/<LOGIN>/<JOB_ID>

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 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 <gaussian_test.com >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: <nevedel som nájsť link, doplním>

Výstup

Váš výstup sa bude nachádzať v adresári, ktorý bol v dobe submitovania jobu pracovný.

<job_name>.o<jobID> pre stdout <job_name>.e<jobID> 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

Attachments (2)

Download all attachments as: .zip