Delavnica TPL Teslova – 3.10.2017
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.
Poglejmo si, kako poteka postopek pošiljanja in obdelava naloge:
Osnovne storitve ARC-a so naslednje:
Vir: nordugrid.org
Kazalo/Content
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 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 biti uporabnik avtoriziran. 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 v splošno virtualno organizacijo, ki jo podpirajo vse gruče v Slingu: https://voms.sling.si:8443/voms/gen.vo.sling.si
Uporabniški vmesnik do omrežja grid
Okolje ARC lahko namestite na svojem računalniku, 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..20
Digitalno potrdilo se nahaja v vašem domačem direktorju, pretvorili smo ga v ustrezen format in namestili v direktorij ~/.arc/:
/home/<username>/.arc/usercert.pem /home/<username>/.arc/userkey.pem
Preverite, če certifikat obstaja. Pravice morajo biti ustrezno urejene.
# chmod 400 userkey.pem # chmod 644 usercert.pem
Nastavitve odjemalca Nordugrid ARC
Tudi te nastavitve lahko v nalogi izpustimo, saj z začasnim digitalnim potrdilom nismo člani nobene virtualne organizacije. Za delo s svojim digitalnim potrdilom bo ta korak neizbežen.
Na domačem direktoriju uporabnika potrebujemo datoteki vomses in vomsdir, ki vsebujeta podatke o virtualni organizaciji uporabnika.
Primer 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.
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 pošiljali naloge. Za pošiljanje nalog v tej delavnici bomo uporabili protokol GRIDFTP.
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 submissioninterface=org.nordugrid.gridftpjob
Če bi želeli uporabiti protokol HTTPS, uporabite naslednje nastavitve:
[computing/jost] url=https://jost.arnes.si:6000/arex infointerface=org.ogf.glue.emies.resourceinfo submissioninterface=org.ogf.glue.emies.activitycreation default=yes
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 grulči pridobimo z ukazom 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)
Uporabni ukazi pri delu z odjemalcem ARC
Upravljanje zastopniskega potrdila
arcproxy #ustvarjanje in urejanje posredniskega/zastopniskega streznika arcproxy -S gen.vo.sling.si #ustvarjanje zastopniskega potrdila za gen.vo.sling.si arcproxy –I #preverimo podatke o zastopniskem potrdilu arcrenew #obnovitev zastopniskega streznika
Upravljanje nalog
arcsub #posiljanje naloge na gruco, komunikacija z informacijskim sistemom, \ posiljanje vstopnih podatkov na gruco 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 #pregled statusa naloge arcstat #preverjanje statusa aktivnih nalog na grucah arcstat JOBID ali arcstat -a #preverjanje statusa naloge za ID ali za vse arccat #preveri stdout/stderr arccat JOBID ali arccat -a #preverjanje vmesnih rezultatov naloge za id/vse #prenos rezultatov nalog arcget #prenese rezultate naloge in jih izbrise iz gruce arcget JOBID ali arcget –a #prenos rezultatov za nalogo ali vse naloge #prekitnitev nalog arckill #prekine izvajanje aktivne naloge arcclean #brisanje naloge #obnavljanje nalog arcresume #obicajno potreben po tem, ko zazenemo arcrenew
Upravljanje datotek
arcls #prikaze seznam direktorijev in dokumentov na shrambi podatkov arccp #kopira dokument na podatkovno shrambo arcrm #izbrise dokument iz podatkovne shrambe arcmkdir #ustvari mapo arcrename #preimenuje dokument
Ostali koristni ukazi ARC
arcinfo jost.arnes.si #preverimo podatke o gruci arcsync #obnovi seznam nasih nalog na gruci arctest #poslje tesno nalogo, ne da bi pisali opis za njo
RTE – okolje za izvajanje naloge
Na gruči lahko okolje za izvajanje delno prilagajamo. Uporabimo različne knjižnice, različne verzije in tip programske opreme, različne 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
Če boste za svoje naloge potrebovali točno določeno okolje za izvajanje, se posvetujte s skrbnikom gruče, ki vam bo okolje pripravil vnaprej. Za Arnesovo gručo lahko zahtevek z opisom potrebne programske opreme pošljete na grid-support(at)arnes.si
Testne naloge 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 s ključ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č.
V tej delavnici preizkušamo gručo z gen.vo.sling.si. Ustvarimo posrednisko potrdilo:
arcproxy -S gen.vo.sling.si
Izdana posredniška potrdila si uporabnik lahko ogleda z naslednjim ukazom:
arcproxy -I
Subject: /C=SI/O=SiGNET/O=ARNES/CN=Barbara Krasovec/CN=987102351 Issuer: /C=SI/O=SiGNET/O=ARNES/CN=Barbara Krasovec Identity: /C=SI/O=SiGNET/O=ARNES/CN=Barbara Krasovec Time left for proxy: 11 hours 59 minutes 47 seconds Proxy path: /tmp/x509up_u1009 Proxy type: X.509 Proxy Certificate Profile RFC compliant impersonation proxy - \ RFC inheritAll proxy Proxy key length: 1024 Proxy signature: sha512
Pri kasnejši uporabi gruče, ko boste za delo uporabili svoje digitalno potrdilo, bo v izpisu arcproxy -I izpisan tudi atribut VOMS (brez njega pošiljanje na gručo ne bo uspelo.
Primer:
attribute : /gen.vo.sling.si/Role=NULL/Capability=NULL
Navodila za pripravo opisa naloge
Opis naloge podamo v jeziku xRSL. Ponavadi vsebuje zahteve po številu jeder in količini RAM-a, ki ga potrebujete za nalogo. Vsebuje tudi navedbo vhodnih in izhodnih datotek, kje se te nahajajo, kam shrani izpis morebitnih napak. Navedete tudi, koliko časa bo naloga trajala in v katerem okolju se bo izvedla. Na podlagi tega opisa nalog, bo nato naloga razvrščena na ustrezno vozlišče.
Avtor tabele: Oxana Smirnova
Prva naloga: izpis seznama okoljskih spremenljivk na gruč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) (runtimeenvironment = "APPS/DEMO/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 arcstat -c jost.arnes.si #preverjanje vseh nalog na gruči Jošt
Ko je status naloge FINISHED
, lahko uporabnik prenese rezultate z gruče, 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 aktualnega seznama nalog, ki tečejo na gruči (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.
Druga naloga: Hello Grid!
Najprej pripravimo opis naloge hellogrid.xrsl
& (executable="run.sh") (arguments="Hello,grid!") (inputfiles= ("run.sh" "") ) (stdout="hellogrid.out") (stderr="hellogrid.err") (gmlog="log") (jobName="HelloGrid") (runtimeenvironment = "APPS/DEMO/DEFAULT")
Zagonska skripta za nalogo run.sh se mora nahajati v direktoriju, iz katerega boste nalogo poslali. Če bi želeli uporabiti skripto, ki se nahaja nekje na spletu, bi v opis naloge vpisali:
(inputfiles= ("run.sh" "http://pot.do.datoteke/run.sh")
Uredimo še run.sh:
#!/bin/sh echo "Hello, grid"
Nalogo pošljemo v izvajanje:
arcsub -c jost.arnes.si -o joblist.xml hellogrid.xrsl
Tretja naloga: Izračun prvih 1000 prastevil
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.out") (stderr="prime-number.err") (gmlog="log") (jobname="NalogaC") (runtimeenvironment = "APPS/DEMO/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
Četrta naloga: Hello 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/DEMO/OPENMPI-2.0-2")
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
Peta naloga: GPGPU
Še primer z uporabo CUDA knjižnice.
Najprej potrebujemo program hello.cu:
// This is the REAL "hello world" for CUDA! // It takes the string "Hello ", prints it, then passes it to CUDA with an array // of offsets. Then the offsets are added in parallel to produce the string "World!" // By Ingemar Ragnemalm 2010 #include <stdio.h> const int N = 7; const int blocksize = 7; __global__ void hello(char *a, int *b) { a[threadIdx.x] += b[threadIdx.x]; } int main() { char a[N] = "Hello "; int b[N] = {15, 10, 6, 0, -11, 1, 0}; char *ad; int *bd; const int csize = N*sizeof(char); const int isize = N*sizeof(int); printf("%s", a); cudaMalloc( (void**)&ad, csize ); cudaMalloc( (void**)&bd, isize ); cudaMemcpy( ad, a, csize, cudaMemcpyHostToDevice ); cudaMemcpy( bd, b, isize, cudaMemcpyHostToDevice ); dim3 dimBlock( blocksize, 1 ); dim3 dimGrid( 1, 1 ); hello<<<dimGrid, dimBlock>>>(ad, bd); cudaMemcpy( a, ad, csize, cudaMemcpyDeviceToHost ); cudaFree( ad ); printf("%s\n", a); return EXIT_SUCCESS; }
Nato skripto za zagon programa: hellocuda.sh
nvcc hello.cu -o helloworld ./helloworld
In še opis naloge hellocuda.xrsl:
& (jobname = "hellocuda") (inputfiles = ("hellocuda.sh" "") ("hello.cu" "") ) (outputfiles = ("hellocuda.out" "") ) (executable = "hellocuda.sh") (stdout = "hellocuda.log") (join = yes) (walltime = "15 minutes") (gmlog = log) (memory = 2000) (runtimeenvironment = "ENV/GPU")
Nalogo posljimo na gruco nsc.ijs.si.
Naloge za programsko opremo Tensorflow
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 TENSORFLOW
(runtimeenvironment = "APPS/BASE/TENSORFLOW") #ali (runtimeenvironment = "APPS/BASE/TENSORFLOW-GPU")
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).
Naloge GPU bomo izvedli na gruci nsc.ijs.si
Hello Tensorflow
Najprej si oglejmo osnoven primer naloge s Tensorflowom tensorflow_hello.py:
from __future__ import print_function import tensorflow as tf # Simple hello world using TensorFlow hello = tf.constant('Hello, TensorFlow!') # Start tf session sess = tf.Session() # Run the operation print(sess.run(hello))
Sestavimo še opis naloge tensorflow_hello.xrsl:
& (executable="tensorflow_hello.sh") (inputfiles= ("tensorflow_hello.py" "") ("tensorflow_hello.sh" "") ) (stdout="tensorflow-hello.out") (stderr="tensorflow-hello.err") (count=1) (memory=1000) (gmlog="log") (* primer komentarja *) (jobName="HelloTF") (runtimeenvironment = "APPS/BASE/TENSORFLOW-GPU")
In zagon programa tensorflow_hello.sh:
#!/bin/bash python3 tensorflow_hello.py
Prepoznava slik
Sledimo navodilom iz uradne spletne strani: https://www.tensorflow.org/tutorials/image_recognition
Najprej pridobimo vse potrebne modele. Lokalno kopijo boste našli na strežniku Ablak, pod /opt/gradiva.
Pripravimo opis naloge tensorflow_image.xrsl:
& (executable="tensorflow_image.sh") (inputfiles= ("classify_image.py" "/opt/gradiva/models/tutorials/image/imagenet/classify_image.py") ("tensorflow_image.sh" "") ) (stdout="tensorflow-image.out") (stderr="tensorflow-image.err") (count=1) (memory=1000) (gmlog="log") (* primer komentarja *) (jobName="TF_image_recognition") (runtimeenvironment = "APPS/BASE/TENSORFLOW-GPU")
Najprej pripravite skripto za zagon programa, npr tensorflow_image.sh
#!/bin/bash
python3 classify_image.py
Rezultat programa, če le-ta pravilno deluje, je:
giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.88493)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00878)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00317)
custard apple (score = 0.00149)
earthstar (score = 0.00127)
Lahko preizkusite model še s kakšno svojo sliko.
Nekaj primerov za Tensorflow je na voljo tukaj.
Uporaba vsebnikov Singularity
Primere uporabe prikaze predavatelj.
Dodatek
Masovno pošiljanje 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/DEMO/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
Drugi primer:
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.