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.

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 -nodes -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

XRSL Reference Manual

xrsl-atributi

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

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