Prosojnice predstavitev na delavnici:
Grid in Slovenska iniciativa za nacionalni grid (SLING): ODP | PPT | PDF
Vmesna programska oprema Advanced Resource Connector (ARC): ODP | PPT | PDF
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 testni gruči.
Postopek uporabe je v veliki meri enak kakor pri običajni uporabi, opisani v navodilih za uporabnike. V nadaljevanju so opisane razlike.
Za uporabnike delavnice smo pripravili testne elektronske certifikate (potrdila) za delo v gridu z dobo veljavnosti en teden. Gesla boste prejeli na delavnici.
arcuser1: potrdilo
arcuser2: potrdilo
arcuser3: potrdilo
arcuser4: potrdilo
arcuser5: potrdilo
arcuser6: potrdilo
arcuser7: potrdilo
arcuser8: potrdilo
arcuser9: potrdilo
arcuser10: potrdilo
arcuser11: potrdilo
arcuser12: potrdilo
arcuser13: potrdilo
arcuser14: potrdilo
arcuser15: potrdilo
arcuser16: potrdilo
arcuser17: potrdilo
arcuser18: potrdilo
arcuser19: potrdilo
arcuser20: potrdilo
Za preoblikovanje potrdila v obliko, primerno za orodja NorduGrid ARC, si lahko pomagate s priročno skripto.
Za potrebe delavnice so pripravljena potrdila vnaprej avtorizirana, zato se uporabnikom ni treba vključevati v virtualno organizacijo.
Uprabljali bomo vmesno programsko za grid NorduGrid ARC, ki jo lahko kot "neodvisno" okolje ARC namestite na katerikoli operacijski sistem, ki podpira POSIX (GNU/Linux, Mac OS X), za večino popularnih operacijskih sistemov pa so na voljo tudi ustrezni paketi.
Na voljo 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 arcuser7@arcschool.sling.si
V tem okolju je za uporabo tudi že pripravljen certifikat, v tem
primeru demo07
.
Najpreprostejša je namestitev "neodvisnega" okolja ARC po navodilih na spletnih strani NorduGrid ARC.
V repozitoriju binarnih paketov okolja ARC je treba izbrati Direct access
,
različico operacijskega sistema in opcijo Standalone client
package
. Po prenosu se namestitev izvede z naslednjim ukazom (v tem
primeru namestitev v $HOME
, po potrebi prilagodite ali prestavite):
cd; tar -xvf Downloads/nordugrid-arc-standalone-*.tgz cd ~/nordugrid-arc-standalone-*
Potem je treba v delovno ukazno lupino namestiti okoljske spremenljivke (environment variables), ki posameznim ukazom povejo, kje so nameščene datoteke:
source setup.sh
Sledi korak za namestitev avtorizacijskega sitema za slovenske virtualne organizacije:
rm ~/nordugrid-arc-standalone-*/etc/vomses mkdir ~/nordugrid-arc-standalone-*/etc/vomses echo ' "gen.vo.sling.si" "voms.sling.si" "15001" "/C=SI/O=SiGNET/O=SLING/CN=voms.sling.si" "gen.vo.sling.si"' > ~/nordugrid-arc-standalone-*/etc/vomses/gen.vo.sling.si-voms.sling.si mkdir ~/nordugrid-arc-standalone-*/etc/grid-security/vomsdir/gen.vo.sling.si curl http://www-f9.ijs.si/~lesi/voms.sling.si.lsc -o ~/nordugrid-arc-standalone-*/etc/grid-security/vomsdir/gen.vo.sling.si
Če je uporabnik uspešno namestil osebno potrdilo v direktorij
~/.globus
, je s tem sistem pripravljen za uporabo.
(Opomba: v prejšnjih različicah so se vsi ukazi programske opreme
začenjale s črkami ng
, v sedanjih pa se začenjajo z arc
: torej
namesto ngsub
arcsub
. Večina namestitev podpira obe
poimenovanji, vendar je to dobro vedeti, saj dokumentacija in primeri
lahko uporabljajo drugačno različico, kakor ste je vajeni.)
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.
Zastopniško potrdilo brez avtorizacijskega atributa virtualne organizacije, ki ga v tem primeru ne potrebujete, lahko pridobite z naslednjim ukazom:
arcproxy
Opcija --help
pokaže pomoč.
Izdana posredniška potrdila si uporabnik lahko ogleda z naslednjim ukazom:
arcproxy -I
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)
V tem primeru namesto zagonske skriptne datoteke uporabljamo sistemski
ukaz /usr/bin/env
, ki izpiše okoljske spremeljivke v sistemu.
(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, zahtevajo specifično programsko okolje ali zahtevajo zagon naloge, ki bo uporabljala večje število procesorskih jeder.)
Nalogo lahko pošljemo v sistem z naslednjim ukazom:
arcsub -c jost.arnes.si -o joblist test.xrsl
Ukaz bo izpisal ID naloge in tudi shranil ID obstoječih nalog v
datoteko ~/.arc/jobs.xml
Status naloge lahko preverjamo (ID dobis od prejsnje komande):
arcstat gsiftp://jost.arnes.si:2811/jobs/<vpišite-ID-tukaj>
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 gsiftp://pikolit.ijs.si:2811/jobs/<vpišite-ID-tukaj>
Priročna sta še ukaza za spremljanje standarnega izhoda naloge ter vsebine delovne mape:
arccat <jobid> arcls <jobid>
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.
Za vajo se bomo lotili primera naloge, ki izračunava število pi z uporabo metode Monte Carlo. Kot je običajno pri metodah Monte Carlo, lahko pričakujemo natančnost sqrt(n) pri n iteracijah.
Za 3 mesta natančnosti torej potrebujemo 1M iteracij. Za natačnost 10^-6 potrebujemo 10^12 iteracij ...
Rezultati so kumulativni: če poganjamo program z različnimi naključnimi semeni, lahko sestavljamo približke. Problem je trivialno paralelen.
Izvorna koda programa pil.cc.
Najprej potrebujemo lokalno zagonsko skripto, naloga.sh
:
#!/bin/bash # argumenti N=$1 S=$2 # prevajanje g++ -O2 pil.cc -o pil.exe # zagon time ./pil.exe $N $S
Pripravimo na zagon:
chmod a+x naloga.sh
In že jo lahko zaženemo:
./naloga.sh 10 10
Zdaj moramo pripraviti datoteko z opisom naloge, npr. pil.xrls
. Prvi
znak mora biti &
, sledijo argumenti v oklepajih, pri čemer je
sintaksa takšna, da je v bistvu kar sintaksa LDAP.
& (executable = "naloga.sh") (arguments = "1000 1")
To bi bilo v resnici že dovolj, a manjka še datoteka izvorne koda:
& (executable = "naloga.sh") (arguments = "1000 1") (inputfiles = ("pil.cc" "") )
Vhodne datoteke naštejemo kot pare vrednosti, pri čemer je prva ciljno ime datoteke, druga vrednost pa URL datoteke, privzeta vrednost je lokalna datoteka z enakim imenom.
Torej lahko tudi tako:
& (executable = "naloga.sh") (arguments = "1000 1") (inputfiles = ("pil.cc" "http://www.slings.si/arcschool/pil.cc") )
Povejmo sistemu nekaj karakteristik naloge:
& (executable = "naloga.sh") (arguments = "1000 1") (inputfiles = ("pil.cc" "http://www.slings.si/arcschool/pil.cc") ) (jobname = "pil") (count = 1) (memory = 2000) (cputime = 60) (join = "yes")
To pomeni, da bo izvorno kodo strežnik skopiral iz spleta, naloga se
bo imenovala pil
, uporabila pa bo največ 1
procesno jedro, 2000
MB pomnilnika in 60 minut procesorskega časa. Zadnji ukaz je napotek,
naj v dnevniški datoteki (log file) sistem združi STDOUT
in
STDERR
, da bo spremljanje dogajanja bolj preprosto.
Naloga je pripravljena:
arcsub -c jost.arnes.si pil.xrls
Preverimo status:
arcstat --all
Če je prišlo do napake, preverimo, kaj se je zgodilo z nalogo. Za to
lahko uporabimo ukaz arccat
, ki pokaže STDOUT
naloge.
arccat <id-naloge>
Če bomo uporabljali ves čas gručo z enakim okoljem, lahko preveden program pošljemo z nalogo:
& (executable = "naloga.sh") (arguments = "1000 1") (inputfiles = ("pil.exe" "") ) (jobname = "pil") (count = 1) (memory = 2000) (cputime = 60) (join = "yes") (* primer komentarja *) (stdout "pil.log")
Vendar moramo popraviti skripto, da ne prevede izvorne kode, temveč
namesto tega spremeni programsko datoteko, da jo bo mogoče
izvajati. (Lahko pa bi tudi program navedli kot executable
- glej
navodila XRSL Reference Manual.)
Zdaj je čas, da avtomatiziramo masivno pošiljanje nalog.
for i in `seq 1 10` ;
do perl -pe "s/XXX/$1/" naloga.xrsl > naloga-$1.xrsl ;
arcsub -c jost.arnes.si naloga-$i.xrsl ;
done
Ustrezno prilagodimo datoteko z opisom naloge:
& (executable = "naloga.sh") (arguments = "1000 XXX") (inputfiles = ("pil.exe" "") ) (jobname = "pil.XXX") (count = 1) (memory = 2000) (cputime = 60) (join = "yes") (* primer komentarja *) (stdout "pil.log")
Ko imamo več nalog, lahko za vse preverimo status:
arcstat -a
Oz. 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:
(runtimeenvironment = "APPS/SIGNET/NAMDD-1.0")
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).
Na podoben način se npr. nastavi okolje za MPI na enem vozlišču (Multi Core - Single Node):
(runtimeenvironment = "APPS/SIGNET/MC-SN-1.0") (queue = "infiniband")
Zadnja nastavitev omogoča izbor posamezne čakalne vrste. V tem primeru je nastavljena posebna vrsta, ki vključuje samo tista vozlišča, ki imajo Infiniband vmesnike.
Ko nam na gruči vzpostavijo okolje za MPI, tako lahko poskusimo preprosto nalogo z ustrezno skripto in opisom naloge.