Delavnica ARC FIS 18.04.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 Gruci Rudolf
Kazalo/Content
Namestitev odjemalca
Odjemalec ARC je na voljo za distribucije Linux in MacOS. Sledite navodilom za uporabnike. V nadaljevanju so opisane ostale nastavitve.
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). Za uporabo gruče zadošča članstvo v lastni virtualni organizaciji FIS: hpc.fis.unm.si
Stran za prijavo: https://voms.sling.si:8443/voms/hpc.fis.unm.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 fis$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/fis001/.arc
Nastavitve odjemalca Nordugrid ARC
Na domačem direktoriju uporabnika potrebujemo datoteki vomses in vomsdir, ki vsebujeta podatke o virtualni organizaciji uporabnika.
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=ldap://jost.arnes.si:2135 infointerface=org.nordugrid.ldapng jobinterface=org.nordugrid.gridftpjob
Treba je nastaviti virtualno organizacijo HPC.FIS.UNM.SI. Uporabite lahko tudi skripto arc-fis-setup
mkdir -p ~/.arc/vomses/ cat <<end > ~/.arc/vomses/hpc.fis.unm.si "hpc.fis.unm.si" "voms.sling.si" "15005" "/C=SI/O=SiGNET/O=SLING/CN=voms.sling.si"\ "hpc.fis.unm.si" end mkdir -p ~/.arc/vomsdir cat <<end > ~/.arc/vomsdir/hpc.fis.unm.si /C=SI/O=SiGNET/O=SLING/CN=voms.sling.si /C=SI/O=SiGNET/CN=SiGNET CA end
Če je uporabnik uspešno namestil osebno potrdilo v direktorij ~/.arc
, je s tem sistem pripravljen za uporabo.
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 hpc.fis.unm.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 hpc.fis.unm.si ====== VO : hpc.fis.unm.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:15005 attribute : /hpc.fis.unm.si/Role=NULL/Capability=NULL Time left for AC: 11 hours 54 minutes 47 seconds
Navodila za pripravo naloge
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/FIS/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 obstoječih nalog v datoteko joblist.xml (kar smo zahtevali z opcijo -o).
Opozorilo: Ce boste pri posiljanju naloge naleteli na tezave, vklopite nacin posiljanje v debug nacinu z dodajanjem stikala -d DEBUG
arcsub -c jost.arnes.si -o joblist.xml test.xrsl -d DEBUG
Status naloge lahko preverjamo (ID dobimo ob posiljanju), vendar se naloga pojavi v informacijskem sistemu sele po nekaj minutah:
arcstat gsiftp://jost.arnes.si:2811/jobs/<vpišite-ID-tukaj>
primer:
arcstat gsiftp://jost.arnes.si:2811/jobs/SAVLDmDkUAonmmR0Xox1SiGmABFKDmABFKDmuZFKDmABFKDmPIfaUm
Job: gsiftp://jost.arnes.si:2811/jobs/SAVLDmDkUAonmmR0Xox1SiGmABFKDmABFKDmuZFKDmABFKDmPIfaUm
Name: test
State: Finished
Exit Code: 0
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 gsiftp://jost.arnes.si:2811/jobs/<vpišite-ID-tukaj>
Primer:
$ arcget gsiftp://jost.arnes.si:2811/jobs/SAVLDmDkUAonmmR0Xox1SiGmABFKDmABFKDmuZFKDmABFKDmPIfaUm
Results stored at: SAVLDmDkUAonmmR0Xox1SiGmABFKDmABFKDmuZFKDmABFKDmPIfaUm
Jobs processed: 1, successfully retrieved: 1, successfully cleaned: 1
$ ls SAVLDmDkUAonmmR0Xox1SiGmABFKDmABFKDmuZFKDmABFKDmPIfaUm/
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/FIS/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/FIS/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/FIS/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 RTE in MPI
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 htc.fis.unm.si so uredili okolje MPI:
– za uporabo MPI 1.8:
(runtimeenvironment = "APPS/FIS/MPI-1.8")
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).
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/FIS/MPI-1.8")
Program:
/* 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
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/FIS/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 --joblist=job.list --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 --joblist=job.list --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.