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

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

XRSL Reference Manual

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

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