Delavnica BF 14.10.2016
Nekaj tehničnih napotkov za udeležence delavnice.
Na delavnici bomo uporabljali vmesno programsko opremo NorduGrid ARC, ki ga podpira večina gruč slovenskega omrežja grid, ter ga preizkušali na Arnesovi gruči.
Kazalo/Content
Osnove za delo z ukazno vrstico
ls # lists your files ls -la # lists in 'long format', all files (tudi skrite) ln -s <filename> <link> # naredi povezavo do dokumenta (soft link) touch <filename> # ustvari dokument mkdir <dirname> #ustvari direktorij cat > <filename> # izpise vsebino more <filename> # prikaze prvi del dokumenta less <filename> # prikaze prvi del dokumenta mv <filename1> <filename2> # premakne dokument cp <filename1> <filename2> # kopira dokument rm <filename> # izbrise dokument diff <filename1> <filename2> # primerja dva dokumenta wc <filename> # presteje chown -options <filename> # spremeni lastnistvo dokumenta chmod -options <filename> # spremeni pravice dokumenta gzip <filename> # arhivira dokument gunzip <filename> # razpakira gzip dokument grep <pattern> <filenames> # isce neko besedo v dokumentu grep -r <pattern> <dir> # isce rekurzivno
Namestitev odjemalca
Odjemalec ARC je na voljo za distribucije Linux in MacOS. Sledite navodilom za uporabnike. V nadaljevanju so opisane ostale nastavitve. Če boste uporabljali odjemalec na našem oblaku, lahko ta korak izpustite.
Overjanje in digitalna potrdila
Vsi uporabniki na delavnici potrebujejo svoje digitalno potrdilo, ki so ga predhodno zahtevali preko spletne strani SiGNET-a.
Za preoblikovanje potrdila v obliko, primerno za orodja NorduGrid ARC, si lahko pomagate s priročno skripto.
Avtorizacija in virtualne organizacije
Za dostop do gruč mora uporabnik imeti avtorizacijo. Mehanizem za avtorizacijo v okolju grid je sistem virtualnih organizacij (VO). V določeni organizaciji je uporabnik lahko član, lahko pa tudi pridobi posebne pravice (roles).
Stran za prijavo: https://voms.sling.si:8443/voms/gen.vo.sling.si
Uporabniški vmesnik do omrežja grid
Okolje lahko namestite na svoji opremi, na voljo pa je tudi vnaprej pripravljeno okolje, do katerega dobite dostop z geslom, ki ga dobite na delavnici. Dostop do ukazne vrstice je preko vmesnika ssh
, npr:
ssh demo$x@308.ablak.arnes.si $x=1..10
V tem okolju morate še namestiti svoj certifikat. Glede na trenutno nastavitev odjemalca v konfiguracijski datoteki, morate narediti ločeno datoteko za certifikat in ključ, in ju shraniti v direktorij ~/.arc/:
/home/<username>/.arc/usercert.pem /home/<username>/.arc/userkey.pem
Digitalno potrdilo je treba namestiti v mapo .arc, ki se nahaja v uporabnikovem domačem direktoriju.
# openssl pkcs12 -in certificate.p12 -clcerts -nokeys -out usercert.pem # openssl pkcs12 -in certificate.p12 -nocerts -out userkey.pem # chmod 400 userkey.pem # chmod 644 usercert.pem # mv user*.pem /home/<username>/.arc
Nastavitve odjemalca Nordugrid ARC
Na domačem direktoriju uporabnika potrebujemo datoteki vomses in vomsdir, ki vsebujeta podatke ovirtualni organizaciji uporabnika.
Nastavitve odjemalca v client.conf
Nastavitve niso obvezne, saj bi pošiljanje nalog na gručo moralo delovati tudi s privzetimi nastavitvami. Konfiguracija odjemalca je v datoteki ~/.arc/client.conf in vsebuje podatke o tem, kje se na sistemu nahaja digitalno potrdilo, nastavljen je tudi protokol, preko katerega boste posiljali naloge.
vi .arc/client.conf [common] keypath=/home/<username>/.arc/userkey.pem certificatepath=/home/<username>/.arc/usercert.pem [computing/jost] url=https://jost.arnes.si:6000/arex infointerface=org.ogf.glue.emies.resourceinfo submissioninterface=org.ogf.glue.emies.activitycreation default=yes
Ce bi zeleli uporabiti protokol gridftp, uporabite naslednje nastavitve:
[computing/jost] url=ldap://jost.arnes.si:2135 infointerface=org.nordugrid.ldapng submissioninterface=org.nordugrid.gridftpjob
Vse ostale nastavitve odjemalca so opisane na tej povezavi.
Lahko za tip protokola uporabite tudi stikalo -S:
#za uporabo protokola gridftp arcsub -c jost.arnes.si -S org.nordugrid.gridftpjob test.xrsl #za uporabo protokola https arcsub -c jost.arnes.si -S org.ogf.glue.emies.activitycreation test.xrsl
Podatke o podprtih protokolih na gruci pridobimo z ukazom arcinfo.
Nastavitve virtualne organizacije gen.vo.sling.si
mkdir -f ~/.arc/vomses/ cat <<end > ~/.arc/vomses/gen.vo.sling.si-voms.sling.si "gen.vo.sling.si" "voms.sling.si" "15001" \ "/C=SI/O=SiGNET/O=SLING/CN=voms.sling.si" "gen.vo.sling.si" end mkdir -f ~/.arc/vomsdir cat <<end > ~/.arc/vomsdir/gen.vo.sling.si /C=SI/O=SiGNET/O=SLING/CN=voms.sling.si /C=SI/O=SiGNET/CN=SiGNET CA end
Če je digitalno potrdilo uspešno nameščeno v direktorij ~/.arc
, je s tem sistem pripravljen za uporabo.
Uporabni ukazi pri delu z odjemalcem ARC
arcproxy #ustvarjanje in urejanje posredniskega (proksi) streznika arcsub #posiljanje naloge na gruco, komunikacija z informacijskim sistemom, \ posiljanje vstopnih podatkov na gruco arcstat #preverjanje statusa aktivnih nalog na grucah arccat #preveri trenutno stanje naloge arcget #prenese rezultate naloge in jih izbrise iz gruce arckill #prekine izvajanje naloge arcls #prikaze seznam direktorijev in dokumentov na shrambi podatkov arcrenew #obnovitev proksi streznika arcsync #obnovi seznam nasih nalog na gruci arccp #kopira dokument na podatkovno shrambo arcrm #izbrise dokument iz podatkovne shrambe
Primeri uporabe
$ arcproxy -S gen.vo.sling.si #ustvarjanje proksija za gen.vo.sling.si $ arcproxy –I #preverimo podatke o proksiju $ arcinfo jost.arnes.si #preverimo podatke o gruci $ arcsub –c jost.arnes.si test.xrsl #posiljanje naloge test.xrsl na gruco $ arcsub –c jost.arnes.si test.xrsl -d DEBUG #posiljanje v debug nacinu $ arcstat JOBID ali arcstat -a #preverjanje statusa naloge za ID ali za vse $ arccat JOBID ali arccat -a #preverjanje vmesnih rezultatov naloge za id/vse $ arcget JOBID ali arcget –a #prenos rezultatov za nalogo ali vse naloge
RTE – okolje za izvajanje naloge
Na gruci lahko okolje za izvajanje delno prilagajamo. Uporabimo razlicne knjiznice, razlicne verzije in tip programske opreme, razlicne strojne vire itn. Okolje za izvajanje naloge prilagajamo s pomocjo RTE – runtime environments.
Za pregled okolij za izvajanje, ki so na voljo:
ldapsearch -x -h jost.arnes.si -p 2135 -b ' Mds-Vo-name=local,o=grid' \ | grep nordugrid-cluster-runtimeenvironment
Testna naloga v okolju ARC
Pred zagonom testne naloge je treba nalogi omogočiti overjanje in avtorizacijo v imenu uporabnika. V omrežju grid naloge ne morejo uporabljati uporabnikovega elektronskega potrdila, saj bi to pomenilo, da se nešifrirano potrdilo sključem kopira po omrežju. Zato naloge uprabljajo zastopniška potrdila (proxy certificates), ki morajo vsebovati tudi avtorizacijske atribute. Takšna potrdila niso šifrirana, vendar so kratkotrajna.
Ustvarjanje posredniškega potrdila
Zastopniško potrdilo brez avtorizacijskega atributa virtualne organizacije, ki ga v tem primeru ne potrebujete, lahko pridobite z naslednjim ukazom:
arcproxy -S gen.vo.slings.si
ali z določanjem točnih poti:
arcproxy -C .arc/cert.pem -K .arc/key.pem -s .arc/vomsdir -V .arc/vomses
Možnost--help
pokaže pomoč.
Izdana posredniška potrdila si uporabnik lahko ogleda z naslednjim ukazom:
arcproxy -I
====== AC extension information for VO gen.vo.sling.si ====== VO : gen.vo.sling.si subject : /C=SI/O=SiGNET/O=ARNES/CN=Barbara Krasovec issuer : /C=SI/O=SiGNET/O=SLING/CN=voms.sling.si uri : voms.sling.si:15001 attribute : /gen.vo.sling.si/Role=NULL/Capability=NULL Time left for AC: 11 hours 59 minutes 50 seconds
Navodila za pripravo naloge
Avtor tabele: Oxana Smirnova
Prvi primer naloge
Za zagon testne naloge je treba najprej pripraviti datoteko z opisom naloge, imenovali jo bomo test.xrsl
:
& (executable = /usr/bin/env) (jobname = "test") (stdout=test.log) (join=yes) (gridtime=1000) (gmlog=log) (memory=2000) (runtimeenvironment = "APPS/BF/DEFAULT")
V tem primeru namesto zagonske skriptne datoteke uporabljamo sistemski ukaz /usr/bin/env
, ki izpiše okoljske spremeljivke v sistemu.
- Znak & označuje, da mora arcsub pri izvršitvi naloge uporabiti vse elemente datoteke xrsl.
- executable je ukaz, ki ga bomo izvršili na gruči,
- jobname označuje ime naloge,
- join=yes bo združil izpis stderr in stdout v stdout,
- stdout označuje, kakšno bo ime izhodnega dokumenta,
- gmlog označuje, kam bodo shranjene dnevniške datoteke upravljavca gruče (če kaj ne deluje, je datoteka koristna za debug)
- memory=2000 označuje, da za nalogo potrebujemo 2GB spomina. Vrednost vedno označujemo v MB in na 1 jedro
(Seveda je lahko datoteka z opisom naloge tudi bolj kompleksna, npr. našteva podtakovne datoteke, ki naj se prenesejo na strežnik in s strežnika, zahteva specifično programsko okolje ali zahteva zagon naloge, ki bo uporabljala različno količino potrebnih računskih virov.)
Oglejmo si možnosti uporabe ukaza arcsub:
man arcsub
Nalogo lahko pošljemo v sistem z naslednjim ukazom:
arcsub -c jost.arnes.si -o joblist.xml test.xrsl
Ukaz bo izpisal ID naloge in tudi shranil ID-je aktivnih nalog v datoteko joblist.xml (kar smo zahtevali z opcijo -o).
Opozorilo: če boste pri pošiljanju naloge naleteli na težave, vklopite način pošiljanja v debug načinu z dodajanjem stikala -d DEBUG
$ arcsub -c jost.arnes.si test.xrsl Job submitted with jobid: \ https://jost.arnes.si:443/arex/IToKDmSHrEpnmmR0Xox1SiGmABFKDmABFKDmWOMKDmFBFKDm5FyfUm
Status naloge lahko preverjamo (ID dobimo ob pošiljanju), vendar se naloga pojavi v informacijskem sistemu šele po nekaj minutah:
arcstat gsiftp://jost.arnes.si:2811/jobs/<vpišite-ID-tukaj>
primer:
$ arcstat \
https://jost.arnes.si:443/arex/IToKDmSHrEpnmmR0Xox1SiGmABFKDmABFKDmWOMKDmFBFKDm5FyfUm
Job: \
https://jost.arnes.si:443/arex/IToKDmSHrEpnmmR0Xox1SiGmABFKDmABFKDmWOMKDmFBFKDm5FyfUm
Name: test
State: Running
Status of 1 jobs was queried, 1 jobs returned information
Oziroma za preverjanje vseh nalog uporabnika:
arcstat --all
Ko je status FINISHED
, lahko uradnik skopira rezultate z delovnega direktorija, s čimer tudi odstrani rezultate s strežnika:
arcget <JOB_ID>
Primer:
$ arcget \
https://jost.arnes.si:443/arex/IToKDmSHrEpnmmR0Xox1SiGmABFKDmABFKDmWOMKDmFBFKDm5FyfUm
Jobs processed: 1, successfully retrieved: 1, successfully cleaned: 1
$ ls IToKDmSHrEpnmmR0Xox1SiGmABFKDmABFKDmWOMKDmFBFKDm5FyfUm
log test.log
Priročna sta še ukaza za spremljanje standarnega izhoda naloge ter vsebine delovne mape:
arccat <jobid> arcls <jobid>
Za prenos seznama nalog, ki tecejo na gruci (POZOR: datoteko joblist.xml bo povozilo):
arcsync -c jost.arnes.si
Podrobnejša navodila za delo z vmesno programsko opremo za grid NorduGrid ARC so na voljo na spletu (v angleščini): ARC Manuals, Notes and Tutorials.
Drugi primer naloge:
Najprej pripravimo opis naloge hellogrid.xrsl
& (executable="run.sh") (arguments="Hello,grid!") (inputfiles= ("run.sh" "") ) (stdout="out.txt") (stderr="err.txt") (gmlog="mylog.log") (jobName="HelloGrid") (runtimeenvironment = "APPS/BF/DEFAULT")
Zagonska skripta za nalogo run.sh se mora nahajati v direktoriju, iz katerega boste nalogo poslali. Ce bi zeleli uporabiti skripto, ki se nahaja nekje na spletu, bi v opis naloge vpisali:
(inputfiles= ("run.sh" "http://pot.do.datoteke/run.sh")
Uredimo se run.sh:
#!/bin/sh echo "Hello, grid"
Nalogo posljemo v izvajanje:
arcsub -c jost.arnes.si -o joblist.xml hellogrid.xrsl
Primer naloge v C:
primer.c in primer.sh se morata nahajati v direktoriju, iz katerega boste nalogo poslali.
Najprej pripravimo opis naloge prime-number.xrsl
& (executable="prime-number.sh") (inputfiles= ("prime-number.sh" "") ("prime-number.c" "") ) (stdout="prime-number.txt") (stderr="prime-number.err") (gmlog="gridlog") (jobname="NalogaC") (runtimeenvironment = "APPS/BF/DEFAULT")
Nato se sam program prime-number.c
#include<stdio.h> int main() { int n = 1000, i = 3, count, c; if ( n >= 1 ) { printf("First %d prime numbers are :\n",n); printf("2\n"); } for ( count = 2 ; count <= n ; ) { for ( c = 2 ; c <= i - 1 ; c++ ) { if ( i%c == 0 ) break; } if ( c == i ) { printf("%d\n",i); count++; } i++; } return 0; }
In zagonsko skripto prime-number.sh:
#!/bin/sh date gcc prime-number.c -o primenumber ./primenumber date
Primer naloge v Pythonu
Opis naloge vsota.xrsl
& (executable="vsota.sh") (inputfiles= ("vsota.sh" "vsota.sh") ("vsota.py" "vsota.py") ) (outputfiles=("/" " ") ) (stdout="out.txt") (stderr="err.txt") (gmlog="vsota.log") (jobName="vsota") (runtimeenvironment = "APPS/BF/DEFAULT")
Program vsota.py
sum = 0 print "Izpisi stevilke: " for x in ["1", "1050","164999"]: print x print "Sestej stevilke " for y in [1,1050,164999]: sum=sum+y print sum
Zagonska skripta vsota.sh:
#!/bin/sh python vsota.py
Naloga z uporabo MPI
Ko nam na gruči vzpostavijo okolje za MPI, tako lahko poskusimo preprosto nalogo z ustrezno skripto in opisom naloge.
Opis naloge hellompi.xrsl:
& (count = 4) (jobname = "hellompi") (inputfiles = ("hellompi.sh" "") ("hellompi.c" "") ) (executable = "hellompi.sh") (stdout = "hellompi.log") (join = yes) (walltime = "15 minutes") (gmlog = log) (memory = 2000) (runtimeenvironment = "APPS/BF/MPI-1.8")
Program 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; }
Zagonska skripta hellompi.sh:
#!/bin/bash date hostname echo "Compiling example" mpicc -o hello hellompi.c echo "Done." echo "Running example:" mpiexec -np 1 ${PWD}/hello echo "Done." date
Naloga za programsko opremo Mothur
Delovno okolje oziroma Runtime Environment. V ARC Monitorju so pri vsaki gruči lepo našteti, saj je to stvar dogovorov in organizacij med gručami in uporabniki oz. VO.
Delovno okolje lahko vzpostavi specifično okolje, da so dosegljive ustrezne knjižnice in programi (včasih tudi cel OS v okolj chroot
). Na ta način lahko večje skupine uporabnikov na gručah namestijo svoje okolje, da ga ni treba pošiljati z vsako nalogo, in pri tem ni težav za nadgradnjami in različicami, ker ima vsaka naloga definirano, katero okolje in katero različico potrebuje.
– za uporabo programa MOTHUR
(runtimeenvironment = "APPS/BF/MOTHUR")
Takšna vrstica povrzoči, da se naloga lahko zažene le na gruči, ki takšno delovno okolje dejansko podpira, ob zagonu pa se zaženejo zagonske skripte. Delovno okolje tipično vsebuje tudi ustrezne datoteke (programe in knjižnice).
Poskusite sestaviti sami opis naloge za Mothur, v kateri boste zahtevali 4 jedra, 2GB RAMA na jedro in zgoraj navedeno delovno okolje. Naloga bo na gruči tekla 2 dni.
Masovno posiljanje nalog s samodejnim generiranjem datotek .xrsl:
Ustrezno moramo prilagoditi opis naloge hellogrid2.xrsl:
& (executable="run.sh") (arguments = "1000""XXX") (inputfiles= ("run.sh" "") ) (stdout="out.txt") (stderr="err.txt") (gmlog="mylog.log") (* primer komentarja *) (jobName="HelloGrid.XXX") (runtimeenvironment = "APPS/BF/DEFAULT")
Nalogo lahko posljemo z enostavno for zanko:
for i in `seq 1 10` ; do perl -pe "s/XXX/$i/" hellogrid2.xrsl > hellogrid2-$i.xrsl ; arcsub -c jost.arnes.si hellogrid2-$i.xrsl ; done
Najprej potrebujemo predlogo za opis naloge (xrsl template)
#!/usr/bin/python import os, sys jobDescription = '''&(executable=run.sh) (cpuTime='5 minutes') (stdout=stdout.txt) (stderr=stderr.txt) (inputFiles=('run.sh' '')) (jobName=naloga%04d)'''
Python skripta submit.py za posiljanje naloge:
#!/usr/bin/python import os, sys jobDescription = '''&(executable=run.sh) (cpuTime='5 minutes') (stdout=stdout.txt) (stderr=stderr.txt) (inputFiles=('run.sh' '')) (jobName=naloga%04d)''' totalJobs = 4 for i in range(totalJobs): # Removing newlines from jobDescription and convert # to a string for use with arcsub jobDescriptionString = "".join(jobDescription.split("\n")) os.system('arcsub -c jost.arnes.si --jobdescrstring="%s"' \ % (jobDescriptionString % i))
Spremenljivka jobName bo ponastavljena, glede na uporabljeno stevilo. Ime naloge bo tako naloga0000-naloga000n-1
Spremenljivka TotalJobs je nastavljena na 4, torej bomo zagnali max 4 naloge.
Za zagon naloge uporabimo zanko:
for i in range(totalJobs):
Xrsl uporabimo kot string, ki ga nato uporabimo z ukazom arcsub:
jobDescriptionString = "".join(jobDescription.split("\n"))
Za lazji pregled nad nalogami, bomo seznam poslanih nalog shranili v job.list (arcsub -j ali arcsub –joblist)
Potem se ukaz za izvrsitev na sistemu:
os.system('arcsub -c jost.arnes.si --jobdescrstring="%s"' \ % (jobDescriptionString % i))
% uporabimo za to, da bodo imena nalog ustrezno prilagojena.
Ustvarimo se zagonsko skripto run.sh:
#!/bin/sh echo "Hello, grid"
Nato posljemo naloge:
python submit.py
Preverimo status nalog:
arcstat -i joblist.xml
Prenesemo naloge k sebi:
arcget -i joblist.xml
Ostali uporabni ukazi:
Podatki, ki so na voljo v informacijskem sistemu:
ldapsearch -x -h jost.arnes.si -p 2135 -b ' Mds-Vo-name=local,o=grid'
Kateri RTE-ji so na voljo na gruci?
ldapsearch -x -h jost.arnes.si -p 2135 -b ' Mds-Vo-name=local,o=grid' \ | grep nordugrid-cluster-runtimeenvironment
Prenos vhodnih datotek na streznik za podatke:
http://www-old.sling.si/sling/uporabniki/streznik-za-podatke/
POZOR: V primeru napak in nedoslednosti se za morebitne popravke zahvaljujemo.