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

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.

XRSL Reference Manual

xrsl-atributi

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.sling.si/sling/uporabniki/streznik-za-podatke/

POZOR: V primeru napak in nedoslednosti se za morebitne popravke zahvaljujemo.