Delavnica na Arnesovi Mreži znanja 2017
Kazalo/Content
Zahteve za sodelovanje
Kratka delavnica bo vsebovala demonstracijo in možnost preizkusa za uporabnike. Uporabniki, ki želijo sami preizkusiti infrastrukturo, potrebujejo računalnih z mrežno povezavo, terminal in ssh. Za delavnico bo na voljo predpripravljeno okolje z elektronskimi potrdili; nameščanje programske opreme ne bo potrebno.
Postopek za pridobitev dostopa:
- Vloga za elektronsko potrdilo SLING CA:
- Formular: http://signet-ca.ijs.si/CA-formular.pdf
- Prvič se morajo uporabniki tudi overiti z osebnim dokumentom: kje se lahko overim.
- Zahtevek izpolnite (uporabite Mozilla Firefox ali OpenSSL) na: http://signet-ca.ijs.si/pub/
- Pretvorba in namestitev elektronskih potrdil:
openssl pkcs12 -in usercert.p12 -clcerts -nokeys -out usercert.pem openssl pkcs12 -in usercert.p12 -nocerts -out userkey.pem chmod 400 userkey.pem chmod 644 usercert.pem mv userkey.pem ~/.arc/ mv usercert.pem ~/.arc/
- Članstvo v virtualni organizaciji:
- Po overjanju je treba preko članstva v virtulani organizaciji dobiti dovoljenje za uporabo.
- gen.vo.sling.si omogoča prost dostop slovenskim upravičencem – stran za prijavo (z nameščenim osebnim potrdilom) je tu: https://voms.sling.si:8443/voms/gen.vo.sling.si
- Namestitev podpore za overjanje
- Navodila za namestitev so v ARC Client installation instructions (gl. section 5), splošna navodila: https://wiki.egi.eu/wiki/EGI_IGTF_Release
- Navodila so na spletnih straneh SLING
- Če uporabljate sezname preklicev, jih morate redno obnavljate: namestite paket fetch-crl in poskrbite, da se bo redno zaganjal (cron daily)
- Navodila za namestitev in nastavitev odjemalca ARC client installation and VOMS settings
- Navodila: http://www-old.sling.si/sling/uporabniki/uporabniski-vmesniki/
- Nastavitev za VOMS za gen.vo.sling.si:
cd ~/.arc mkdir -p vomsdir/gen.vo.sling.si cat vomsdir/gen.vo.sling.si/voms.sling.si.lsc /C=SI/O=SiGNET/O=SLING/CN=voms.sling.si /C=SI/O=SiGNET/CN=SiGNET CA cat vomses/gen.vo.sling.si "gen.vo.sling.si" "voms.sling.si" "15001" "/C=SI/O=SiGNET/O=SLING/CN=voms.sling.si""gen.vo.sling.si"
cd ~/.arc mkdir -p vomsdir/fri.vo.sling.si cat vomsdir/fri.vo.sling.si/voms.sling.si.lsc /C=SI/O=SiGNET/O=SLING/CN=voms.sling.si /C=SI/O=SiGNET/CN=SiGNET CA cat vomses/fri.vo.sling.si "fri.vo.sling.si" "voms.sling.si" "15003" "/C=SI/O=SiGNET/O=SLING/CN=voms.sling.si" "fri.vo.sling.si"
To je bil kratek opis namestitve programske opreme. Za uporabo prenastavljenih okolij na delavnici to ni potrebno, ker je programska oprema že nameščena.
Anatomija superračunalniškega omrežja
Skaliranje procesorske moči
Razvoj sodobnih procesorjev in sistemke arhitekture sta nam prinesla večjederne in večprocesorske platforme z neenakovredno arhitekturo dostopa do pomnilnika (NUMA). Vse več pridobivanja moči gre tako v smeri kompleksne paralelizacije računske moči in povečanja učinkovitosti, zato je treba za izkoriščanje kapacitet programe in nalogre prilagoditi tako, da lahko izkoristimo nove arhitekture, in sicer več fizičnih sistemov vzporedno.
Eden od pristopov je vzpostavljanje enotnih sistemov, kjer se več računalnikov, združenih v omrežje, obnaša kot en velik večprocesorski in večjederni sistem. Te rešitve za visoko-učinkovito računanje večinoma niso primerne, saj je zaradi povečanja časovnih zamikov izjemno težko izkoristiti dejanske fizične kapacitete.
Zato superračunalniški sistemi delujejo kot gruče strežnikov, kjer na vsakem posameznem strežniku teče lastne operacijski sistem, vendar so združeni z hitrim nizkolatenčnim omrežjem, enotnim mrežnim diskovnim sistemov, poenotenim sistemom uporabnikov, skupno banko nameščene programske opreme in knjižnic ter sistemom za upravljanje s kapacitetami: sodobnim sistemom vrst.
Upravljanje računskih nalog
Velikih kapacitet takšnega sistema ne bilo mogoče izkoristiti, če bi se uporabniki povezovali neposredno na posamezne računalnike. Namesto tega so gruče opremljene s sistemom vrst, ki sprejme zahtevo za zagon naloge in jo uvrsti v vrsto, potem pa, ko so proste kapacitete, na enem od strežnikov s primernimi kapacitetami zažene nalogo (program) in obvesti uporabnika, ko se naloga izteče.
Takšni sistemi s v uporabi že vse od prvih velikih računalnikov, ko so programi dejansko že tekli na luknjastih karticah, in sicer zato, ker imajo vrsto prednosti pred neposredno uporabo:
- load balancing – sistem lahko prilagaja obremenitev posameznih komponent
- pravična delitev virov – vrstni red se prilagaja obremenitvi s strani posameznih uporabnikov, sistemi omogočajo kvote, rezervacije ipd.
- boljši izkoristek – z ustreznimi podatki je mogoče prilagoditi sistem tako, da kolikor mogoče učinkovito izkorišča opremo, ki je na voljoc.
Ti sistemi so se v okolju mrežnih sistemov grid in superračunalniških centrov intenzivno razvijali. Najpomembnejša problematika v zadnjem času je upravljanje s programsko opremo in velikimi količinami podakotv. Novi uporabniki tako želijo zadnjo različico knjižnic in programov, uporabniki, ki končujejo daljši projekt, pa želijo do konca uporabljati enako okolje, knjižnice in programe. Zato zagotavljamo različne različice v ločenih okoljih z uporabo raznih tehnik, kot so moduli in lahka virtualizacija (“environment modules” in light vitualization ).
Podatki
Računske naloge, ki zahtevajo veliko računsko moč, pogosto potrebujejo ali ustvarjajo velike količine podatkov. Praktični primeri so naloge, ki v 5-10 urah obdelajo 100 do 260 GB na jedro, kar za manjšo gručo pomeni 112 TB/h ali 260 Gbits/s. Upravljanje s podatki je v tem okolju torej ključnega pomena.
Gruče imajo na voljo :
- scratch space – fizično na vozlišču, lokalno dostopno (na nekaterih superračunalnikih zelo hitro dostopna lokalizirana shramba)
- networked job home – privzeti direktorij za nalogo, običajno na zelo hitrem, morda vzporedno dostopnem diskovnem polju, kjer je direktorij deljen z vsemi instancami iste naloge, tudi če so na različnih vozliščih
- mid-term storage space – običajno večji podatkovni sistem, ki ni neposredno vključen v gručo in je lahko celo na drugi lokaciji, a omogoča srednjeročno hranjenje podatkov
Porazdeljeno omrežje
Vmesna programska oprema Grid omogoča boljše izkoristke strojne opreme, avtomatizira prenose podatkov, unificira dostop do različnih gruč ter samodejno upravljanje z uporabniki. Zaradi boljšega upravljanja pa zahteva podrobnejši opis zahtev naloge – datoteke z opisom.
Kako deluje vmesna programska oprema ARC?
Sistem ARC ima 3 vmesnike:
- job submission interface – oddaja nalog
- file access interface – prenos datotek
- information query interface – informacijski strežnik
Glavni strežniki ARC CE:
- Grid-manager = storitev za izvajanje nalog (upravljanje sistema vrst oz. LRMS)
- Informacijski sistemi
- Strežnik GridFTP (GFS)
Vmesniki (source: nordugrid.org)
User mapping (source: nordugrid.org):
Upravljanje z nalogami prko A-REX (vir: nordugrid.org):
Oddajanje nalog:
Uporaba odjemalca ARC
Odjemalec ARC je del vmesne programske opreme grid, s katerim uporabniki komunicirajo s sistemi, poganjajo naloge in upravljanjo s podatki. Uradna navodila: here.
Za uporabo sistema morate poznati nekaj splošno uporabnik ukazov.
Podatki o posamezni gruči so na voljo z ukaznom arcinfo:
$ arcinfo jost.arnes.si Computing service: Arnes (production) Information endpoint: ldap://jost.arnes.si:2135/Mds-Vo-Name=local,o=grid Information endpoint: ldap://jost.arnes.si:2135/Mds-Vo-Name=resource,o=grid Information endpoint: ldap://jost.arnes.si:2135/o=glue Information endpoint: https://jost.arnes.si:443/arex Information endpoint: https://jost.arnes.si:443/arex Submission endpoint: https://jost.arnes.si:443/arex \ (status: ok, interface: org.ogf.bes) Submission endpoint: https://jost.arnes.si:443/arex \ (status: ok, interface: org.ogf.glue.emies.activitycreation) Submission endpoint: gsiftp://jost.arnes.si:2811/jobs \ (status: ok, interface: org.nordugrid.gridftpjob)
Z nalogami lahko delate preko dveh vmesnikov: HTTPS ali GRIDFTP. Želeni vmesnik in protokol lakho izberete z nastavitvami odjemalca spodaj.
Za GRIDFTP:
[computing/jost] url=ldap://jost.arnes.si:2135 infointerface=org.nordugrid.ldapng submissioninterface=org.nordugrid.gridftpjob
Za HTTPS:
[computing/jost] url=https://jost.arnes.si:443/arex infointerface=org.ogf.glue.emies.resourceinfo submissioninterface=org.ogf.glue.emies.activitycreation default=yes
Pripravite posredniško elektronsko potrdilo
Pred komunikacjo s sistemom je treba vzpostaviti posredniško elektronsko potrdilo (proxy certificate). Posredniško potrdilo lahko vsebuje podatke o vašem članstvu v virutalni organizaciji. Predvidoma je veljavno 12 ur, mogče ga je podaljšati.
arcproxy #pripravi vmesno potrdilo - proxy arcproxy -S gen.vo.sling.si #create a proxy for gen.vo.sling.si arcproxy –I #check the proxy information arcproxy -S gen.vo.sling.si -c validityPeriod=24h -c vomsACvalidityPeriod=24h arcrenew #obnovi potrdilo
Ukazi za upravljanje z nalogami
#oddaja naloge arcsub arcsub –c jost.arnes.si test.xrsl arcsub –c jost.arnes.si test.xrsl -d DEBUG #debug mode #status naloge arcstat arcstat JOBID #check job with ID arcstat -a #check the status of all submitted jobs #prevere stdout/stderr naloge arccat arccat JOBID or arccat -a #prevzemi podatke naloge po izvedbi arcget arcget JOBID ali arcget –a arcget -K #keep the results on the cluster after the transmission #prekliči/ubij nalogo arckill #kills/cancels all active jobs arcclean #clean the jobs #nadaljuj z delom nalog arcresume #required after arcrenew
Vsi ukazi imajo navodila (man pages).
Status nalog
Osnovni ukazi za uporavljanje s podatkovnimi shrambami
Delo s podatki na oddaljenem namenskem strežniku (npr. dcache.arnes.si):
arcls #seznam vsebine mape arccp #koprija arcrm #zbriši arcmkdir #naredi direktorij arcrename #preimenuj dokument
Drugi koristni ukazi
arcinfo jost.arnes.si #podatki o gruči arcsync #osveži seznam nalog arctest #odpošlji testno nalogo
Reševanje težav
Če pride do napak, je korisno dobiti vpogled v dnevniške zapise, kjer so zapisani poteki različnih koponent; naslednja nastavitev v xRSL zahteva, da se vse te datoteke prenese v mapi log/:
(gmlog="log")
Primer:
cat log/failed LRMS error: (-1) Job was cancelled
Ta izpis v primeru, da uporabnik ni zamenoma prekinil naloge, pomeni, da je sistem ob pripravi naloge naletel na napako; pogledamo v datoteko log/errors log:
cat log/errors job submitted successfully! local job id: 2078340 ----- exiting submit_slurm_job ----- 2017-10-04T12:36:46Z Job state change SUBMIT -> INLRMS Reason: Job is passed to LRMS ------- Contents of output stream forwarded by the LRMS --------- slurmstepd: error: Job 2078340 exceeded virtual memory limit (134084 > 4096), being killed /bin/bash: error while loading shared libraries: libdl.so.2: failed to map segment from shared object slurmstepd: error: Exceeded job memory limit ------------------------- End of output ------------------------- 2017-10-04T12:37:41Z Job state change INLRMS -> FINISHING Reason: Job processing error 2017-10-04T12:37:41Z Job state change FINISHING -> FINISHED Reason: Job processing error
Razvidno je (“job submitted successfully”), da je strežnik uspešno zagnal nalogo preko sistema vrst (LRMS). V izpisu LRMS je vidno, da je naloga presegla napovedani maksimalni pomnilnik, zato jo je sistem ubil.
xRSL: opis nalog
Navodila: http://www.nordugrid.org/documents/xrsl.pdf
Primer opisa nalog:
& (executable = /usr/bin/env) (jobname = "test") (stdout=test.log) (join=yes) (gmlog=log) (memory=1000)
Primer s prenosom datotek:
& (executable="execution_script.sh") (stdout="stdout.txt") (join=yes) (stdin="stdin.txt") (inputFiles= ("stdin.txt" "http://www.external-url.com/example/stdin.txt") ("file1.py" "gsiftp://dcache.arnes.si/data/arnes.si/gen.vo.sling.si/file1.py") ("file2.py" "gsiftp://dcache.arnes.si/data/arnes.si/gen.vo.sling.si/file2.py") ) (outputFiles= ("output1.txt" "gsiftp://dcache.arnes.si/data/arnes.si/gen.vo.sling.si/output1.txt") ("output2.txt" "gsiftp://dcache.arnes.si/data/arnes.si/gen.vo.sling.si/output2.txt") )
Primer preproste naloge
Najprej pripravimo posredniško potrdilo:
arcproxy
Preverimo veljavnost:
arcproxy -I Subject: /C=SI/O=SiGNET/O=SLING/OU=ARCSchoool FRI 2017/CN=Arc School Student 01/CN=1936774291 Issuer: /C=SI/O=SiGNET/O=SLING/OU=ARCSchoool FRI 2017/CN=Arc School Student 01 Identity: /C=SI/O=SiGNET/O=SLING/OU=ARCSchoool FRI 2017/CN=Arc School Student 01 Time left for proxy: 11 hours 59 minutes 51 seconds Proxy path: /tmp/x509up_u541 Proxy type: X.509 Proxy Certificate Profile RFC compliant impersonation proxy - RFC inheritAll proxy Proxy key length: 1024 Proxy signature: sha512
Prva naloga
Opis: hellogrid.xrsl
& (executable=hellogrid.sh) (wallTime="5 minutes") (stdout="stdout.txt") (stderr="stderr.txt") (runtimeenvironment="APPS/DEMO/DEFAULT")
Skripta: hellogrid.sh
#!/bin/sh echo "Hello, grid"
Odpošljemo nalogo…
arcsub -c jost.arnes.si hellogrid.xrsl
Preverimo status in prenesemo rezultate.
Programska okolja: Runtime environments
Na sistemu je vrsta vnaprej nameščenih programskih paketov, knjižnic in okolij. Seznam lahko najdete na spletni strani Grid Monitor ali z neposrednim poizvedovanjem:
ldapsearch -x -h jost.arnes.si -p 2135 -b ' Mds-Vo-name=local,o=grid' \ | grep nordugrid-cluster-runtimeenvironment
Programe lahko pošljete tudi kot del podatkov z nalogo, vendar je priporočjivo, da ne presegajo 100MB. Prav tako je mogoče v okviru naloge zaganjati prevajalnike.
Če potrebujete kakšno programsko opremio, nas obvestite na support@sling.si oz. se obrnite na lokalne upravitelje. Programe lahko tudi prenesete na strežnik za podatke (dcache.arnes.si) in jih zahtevate v datoteki xrsl.
Nastavitev želenega okolja:
(runtimeenvironment="APPS/BASE/GPU"
Uporaba OpenMPI in omrežja infiniBand
Omrežje InfiniBand omogoča nizkolatenčno komunikacijo v večjedrnih nalogah.
Prvi primer z OpenMPI:
Program v jeziku C: hellompi.c
/* C Example */ #include <stdio.h> #include <mpi.h> int main (argc, argv) int argc; char *argv[]; { int rank, size; MPI_Init (&argc, &argv); /* starts MPI */ MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */ MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */ printf( "Hello world from process %d of %d\n", rank, size ); MPI_Finalize(); return 0; }
Skripta, ki bo program prevedla in zagnala:
#!/bin/bash date hostname echo "Compiling example" mpicc -o hello hellompi.c echo "Done." echo "Running example:" mpirun --mca btl openib,self -np 4 ${PWD}/hello > hellompi.out echo "Done." date
Opis naloge xrsl:
& (count = 4) (jobname = "hellompi") (inputfiles = ("hellompi.sh" "") ("hellompi.c" "") ) (outputfiles = ("hellompi.out" "") ) (executable = "hellompi.sh") (stdout = "hellompi.log") (join = yes) (walltime = "15 minutes") (gmlog = log) (memory = 2000) (runtimeenvironment = "APPS/DEMO/OPENMPI-2.0.2")
Za zagon več jeder na istem računalniku zahtevate count=4 and countpernode=4. Z večjimi nalogami (več kot 30 jeder) je priporočljivo, da omejite število vozlišč, sicer se naloge preveč razpršijo in učinkovitost pade.
Naloge z vektorskimi/grafilčnimi procesorji GPGPU s pomočjo CUDA
Z nalogo bomo izmerili pasovno širino pomnilika do kartice:
Najprej program cudatest.cu:
#include <stdio.h> int main() { int nDevices; cudaGetDeviceCount(&nDevices); for (int i = 0; i < nDevices; i++) { cudaDeviceProp prop; cudaGetDeviceProperties(&prop, i); printf("Device ID: %d\n", i); printf(" GPU, device name: %s\n", prop.name); printf(" Memory Clock Rate (KHz): %d\n", prop.memoryClockRate); printf(" Memory Bus Width (bits): %d\n", prop.memoryBusWidth); printf(" Peak Memory Bandwidth (GB/s): %f\n\n", 2.0*prop.memoryClockRate*(prop.memoryBusWidth/8)/1.0e6); } }
Skripta cudatest.sh:
#!/bin/bash env| grep -i cuda > cudaenv.out nvcc cudatest.cu -o cudatest ./cudatest > cudatest.out
Opis naloge:
& (executable="cudatest.sh") (inputfiles= ("cudatest.sh" "") ("cudatest.cu" "") ) (outputfiles= ("cudatest.out" " ") ("cudaenv.out" " ") ) (stdout="error.txt") (join=yes) (gmlog="log") (jobName="cudatest") (walltime="10") (count="1") (memory="500") (runtimeenvironment="APPS/DEMO/GPU")
Lahka vitualizacija: Singularity HPC
- sistem podoben lxc ali docker
- uporabnik enak v sistemu in zunaj; administratorski dostop (root) ima samo administrator
- običajno uporabljamo sistemske slike, ki jih lahko samo beremo
- IO teče skozi virtualni zabojnik – vključno z diskovnim dostopom
- ne vpliva na hitrost
- nekaj omejitev: gonilniki, stabilnost overlayfs ipd – zelo učinkovit v večini primerov
- soopravilnost z dockerjem
Sistem omogoča naloge, ki imajo povsem nedvisno okolje in tečejo v enakem okolju na razlilčnih fizičnih gručah. (Hranimo jih na cvmfs (cvmfs.sling.si) – not available yet.
Zabojnih s strežnikov Docker ali Singularity hub
singularity exec --nv docker://nvidia/cuda:latest nvcc --version Docker image path: index.docker.io/nvidia/cuda:latest Cache folder set to /net/jost/home/gen009/.singularity/docker [10/10] |===================================| 100.0% Creating container runtime... tar: usr/local/cuda-9.0/.wh..wh..opq: implausibly old time stamp 1970-01-01 01:00:00 tar: usr/share/doc/cuda-cudart-9-0/.wh..wh..opq: implausibly old time stamp 1970-01-01 01:00:00 ... ... WARNING: Skipping user bind, non existent bind point (file) in container: '/usr/bin/nvidia-smi' nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2017 NVIDIA Corporation Built on Fri_Sep__1_21:08:03_CDT_2017 Cuda compilation tools, release 9.0, V9.0.176
Ali zadnji Ubuntu:
$ singularity exec docker://ubuntu:latest echo "Hello from the container" Docker image path: index.docker.io/library/ubuntu:latest Cache folder set to /net/jost/home/gen009/.singularity/docker Creating container runtime... Hello from the container singularity pull docker://ubuntu:latest singularity build ubuntu.img docker://ubuntu:latest
$ singularity exec docker://fedora:latest cat /etc/redhat-release Docker image path: index.docker.io/library/fedora:latest Cache folder set to /net/jost/home/gen009/.singularity/docker [1/1] |===================================| 100.0% Creating container runtime... WARNING: Could not chdir to home: /net/jost/home/gen009 Fedora release 26 (Twenty Six)
Vrsta vnaprej pripravljenih zabojnikov:
- https://singularity-hub.org/collections
Uporaba nameščenih okolij Singularity na gruči
Za uporabo vnaprej pripravljenega okolja lahko v skripti zaženete:
$ singularity exec /grid/arc/sw/singularity/cuda-latest.img cat /etc/os-release NAME="Ubuntu" VERSION="16.04.3 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.3 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
Uporaba lastne sistemske slike
Sistemske slike lahko shranite na zunanji strežik ali strežnik za podatke, npr. dCache, https, ftp. Potem sliko navedete kot vhodno datoteko (InputFiles v xrsl) ter jo uporabite v skripti.