Delavnica na Arnesovi Mreži znanja 2017

Zahteve za sodelovanje

Kratka delavnica bo vsebovala demonstracijo in možnost preizkusa za uporabnike. Uporabniki, ki želijo sami preizkusiti infrastrukturo, potrebujejo računalnih z mrežno povezavo, terminal in ssh. Za delavnico bo na voljo predpripravljeno okolje z elektronskimi potrdili; nameščanje programske opreme ne bo potrebno.

Postopek za pridobitev dostopa:

  1. Vloga za elektronsko potrdilo SLING CA:

  2.  Pretvorba in namestitev elektronskih potrdil:

    openssl pkcs12 -in usercert.p12 -clcerts -nokeys -out usercert.pem
    openssl pkcs12 -in usercert.p12 -nocerts -out userkey.pem
    chmod 400 userkey.pem
    chmod 644 usercert.pem
    mv userkey.pem ~/.arc/
    mv usercert.pem ~/.arc/
  3.  Članstvo v virtualni organizaciji:

    • Po overjanju je treba preko članstva v virtulani organizaciji dobiti dovoljenje za uporabo.
    • gen.vo.sling.si omogoča prost dostop slovenskim upravičencem – stran za prijavo (z nameščenim osebnim potrdilom) je tu: https://voms.sling.si:8443/voms/gen.vo.sling.si
  4. Namestitev podpore za overjanje

    • Navodila za namestitev so v  ARC Client installation instructions (gl. section 5), splošna navodila: https://wiki.egi.eu/wiki/EGI_IGTF_Release
    • Navodila so na spletnih straneh SLING
    • Če uporabljate sezname preklicev, jih morate redno obnavljate: namestite paket fetch-crl in poskrbite, da se bo redno zaganjal (cron daily)
  5. Navodila za namestitev in nastavitev odjemalca ARC client installation and VOMS settings
    • Navodila: http://www.sling.si/sling/uporabniki/uporabniski-vmesniki/
    • Nastavitev za VOMS za gen.vo.sling.si:
      cd ~/.arc
      mkdir -p vomsdir/gen.vo.sling.si
      cat vomsdir/gen.vo.sling.si/voms.sling.si.lsc 
      /C=SI/O=SiGNET/O=SLING/CN=voms.sling.si
      /C=SI/O=SiGNET/CN=SiGNET CA
      
      cat vomses/gen.vo.sling.si 
      "gen.vo.sling.si" "voms.sling.si" "15001" "/C=SI/O=SiGNET/O=SLING/CN=voms.sling.si""gen.vo.sling.si"
      cd ~/.arc
      mkdir -p vomsdir/fri.vo.sling.si
      cat vomsdir/fri.vo.sling.si/voms.sling.si.lsc 
      /C=SI/O=SiGNET/O=SLING/CN=voms.sling.si
      /C=SI/O=SiGNET/CN=SiGNET CA
      
      cat vomses/fri.vo.sling.si 
      "fri.vo.sling.si" "voms.sling.si" "15003" "/C=SI/O=SiGNET/O=SLING/CN=voms.sling.si" "fri.vo.sling.si"

To je bil kratek opis namestitve programske opreme. Za uporabo prenastavljenih okolij na delavnici to ni potrebno, ker je programska oprema že nameščena.

Anatomija superračunalniškega omrežja

Skaliranje procesorske moči

Razvoj sodobnih procesorjev in sistemke arhitekture sta nam prinesla večjederne in večprocesorske platforme z neenakovredno arhitekturo dostopa do pomnilnika (NUMA). Vse več pridobivanja moči gre tako v smeri kompleksne paralelizacije računske moči in povečanja učinkovitosti, zato je treba za izkoriščanje kapacitet programe in nalogre prilagoditi tako, da lahko izkoristimo nove arhitekture, in sicer več fizičnih sistemov vzporedno.

Eden od pristopov je vzpostavljanje enotnih sistemov, kjer se več računalnikov, združenih v omrežje, obnaša kot en velik večprocesorski in večjederni sistem. Te rešitve za visoko-učinkovito računanje večinoma niso primerne, saj je zaradi povečanja časovnih zamikov izjemno težko izkoristiti dejanske fizične kapacitete.

Zato superračunalniški sistemi delujejo kot gruče strežnikov, kjer na vsakem posameznem strežniku teče lastne operacijski sistem, vendar so združeni z hitrim nizkolatenčnim omrežjem, enotnim mrežnim diskovnim sistemov, poenotenim sistemom uporabnikov, skupno banko nameščene programske opreme in knjižnic ter sistemom za upravljanje s kapacitetami: sodobnim sistemom vrst.

Upravljanje računskih nalog

Velikih kapacitet takšnega sistema ne bilo mogoče izkoristiti, če bi se uporabniki povezovali neposredno na posamezne računalnike. Namesto tega so gruče opremljene s sistemom vrst, ki sprejme zahtevo za zagon naloge in jo uvrsti v vrsto, potem pa, ko so proste kapacitete, na enem od strežnikov s primernimi kapacitetami zažene nalogo (program) in obvesti uporabnika, ko se naloga izteče.

Takšni sistemi s v uporabi že vse od prvih velikih računalnikov, ko so programi dejansko že tekli na luknjastih karticah, in sicer zato, ker imajo vrsto prednosti pred neposredno uporabo:

  • load balancing – sistem lahko prilagaja obremenitev posameznih komponent
  • pravična delitev virov – vrstni red se prilagaja obremenitvi s strani posameznih uporabnikov, sistemi omogočajo kvote, rezervacije ipd.
  • boljši izkoristek – z ustreznimi podatki je mogoče prilagoditi sistem tako, da kolikor mogoče učinkovito izkorišča opremo, ki je na voljoc.

Ti sistemi so se v okolju mrežnih sistemov grid in superračunalniških centrov intenzivno razvijali. Najpomembnejša problematika v zadnjem času je upravljanje s programsko opremo in velikimi količinami podakotv. Novi uporabniki tako želijo zadnjo različico knjižnic in programov, uporabniki, ki končujejo daljši projekt, pa želijo do konca uporabljati enako okolje, knjižnice in programe. Zato zagotavljamo različne različice v ločenih okoljih z uporabo raznih tehnik, kot so moduli in lahka virtualizacija (“environment modules” in light vitualization ).

Podatki

Računske naloge, ki zahtevajo veliko računsko moč, pogosto potrebujejo ali ustvarjajo velike količine podatkov. Praktični primeri so naloge, ki v 5-10 urah obdelajo 100 do 260 GB na jedro, kar za manjšo gručo pomeni 112 TB/h ali 260 Gbits/s. Upravljanje s podatki je v tem okolju torej ključnega pomena.

Gruče imajo na voljo :

  • scratch space – fizično na vozlišču, lokalno dostopno (na nekaterih superračunalnikih zelo hitro dostopna lokalizirana shramba)
  • networked job home – privzeti direktorij za nalogo, običajno na zelo hitrem, morda vzporedno dostopnem diskovnem polju, kjer je direktorij deljen z vsemi instancami iste naloge, tudi če so na različnih vozliščih
  • mid-term storage space – običajno večji podatkovni sistem, ki ni neposredno vključen v gručo in je lahko celo na drugi lokaciji, a omogoča srednjeročno hranjenje podatkov

Porazdeljeno omrežje

Vmesna programska oprema Grid omogoča boljše izkoristke strojne opreme, avtomatizira prenose podatkov, unificira dostop do različnih gruč ter samodejno upravljanje z uporabniki. Zaradi boljšega upravljanja pa zahteva podrobnejši opis zahtev naloge – datoteke z opisom.

Kako deluje vmesna programska oprema ARC?

Sistem ARC ima 3 vmesnike:

  • job submission interface – oddaja nalog
  • file access interface – prenos datotek
  • information query interface – informacijski strežnik

Glavni strežniki ARC CE:

  • Grid-manager = storitev za izvajanje nalog (upravljanje sistema vrst oz. LRMS)
  • Informacijski sistemi
  • Strežnik GridFTP  (GFS)

Vmesniki (source: nordugrid.org)

User mapping (source: nordugrid.org):


Upravljanje z nalogami prko  A-REX (vir: nordugrid.org):

Oddajanje nalog:

Uporaba odjemalca ARC

Odjemalec ARC je del vmesne programske opreme grid, s katerim uporabniki komunicirajo s sistemi, poganjajo naloge in upravljanjo s podatki. Uradna navodila: here.

Za uporabo sistema morate poznati nekaj splošno uporabnik ukazov.

Podatki o posamezni gruči so na voljo z ukaznom 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)

Z nalogami lahko delate preko dveh vmesnikov:  HTTPS ali GRIDFTP. Želeni vmesnik in protokol lakho izberete z nastavitvami odjemalca spodaj.

Za GRIDFTP:

[computing/jost] 
url=ldap://jost.arnes.si:2135 
infointerface=org.nordugrid.ldapng 
submissioninterface=org.nordugrid.gridftpjob

Za HTTPS:

[computing/jost]
url=https://jost.arnes.si:443/arex
infointerface=org.ogf.glue.emies.resourceinfo
submissioninterface=org.ogf.glue.emies.activitycreation
default=yes

Pripravite posredniško elektronsko potrdilo

Pred komunikacjo s sistemom je treba vzpostaviti posredniško elektronsko potrdilo (proxy certificate). Posredniško potrdilo lahko vsebuje podatke o vašem članstvu v virutalni organizaciji. Predvidoma je veljavno 12 ur, mogče ga je podaljšati.

arcproxy #pripravi vmesno potrdilo - proxy
arcproxy -S gen.vo.sling.si #create a proxy for gen.vo.sling.si
arcproxy –I #check the proxy information
arcproxy -S gen.vo.sling.si -c validityPeriod=24h -c vomsACvalidityPeriod=24h
arcrenew #obnovi potrdilo

Ukazi za upravljanje z nalogami

#oddaja naloge
arcsub
arcsub –c jost.arnes.si test.xrsl 
arcsub –c jost.arnes.si test.xrsl -d DEBUG #debug mode

#status naloge
arcstat
arcstat JOBID  #check job with ID
arcstat -a #check the status of all submitted jobs

#prevere stdout/stderr naloge
arccat 
arccat JOBID or arccat -a

#prevzemi podatke naloge po izvedbi
arcget 
arcget JOBID ali arcget –a
arcget -K #keep the results on the cluster after the transmission

#prekliči/ubij nalogo
arckill #kills/cancels all active jobs
arcclean #clean the jobs

#nadaljuj z delom nalog
arcresume #required after arcrenew

Vsi ukazi imajo navodila (man pages).

Status nalog

Osnovni ukazi za uporavljanje s podatkovnimi shrambami

Delo s podatki na oddaljenem namenskem strežniku (npr. dcache.arnes.si):

arcls #seznam vsebine mape
arccp #koprija
arcrm #zbriši
arcmkdir #naredi direktorij
arcrename #preimenuj dokument

Drugi koristni ukazi

arcinfo jost.arnes.si #podatki o gruči
arcsync #osveži seznam nalog
arctest #odpošlji testno nalogo

Reševanje težav

Če pride do napak, je korisno dobiti vpogled v dnevniške zapise, kjer so zapisani poteki različnih koponent; naslednja nastavitev v xRSL zahteva, da se vse te datoteke prenese v mapi log/:

(gmlog="log")

Primer:

cat log/failed
LRMS error: (-1) Job was cancelled

Ta izpis v primeru, da uporabnik ni zamenoma prekinil naloge, pomeni, da je sistem ob pripravi naloge naletel na napako; pogledamo v datoteko log/errors log:

cat log/errors
job submitted successfully!
local job id: 2078340
----- exiting submit_slurm_job -----

2017-10-04T12:36:46Z Job state change SUBMIT -> INLRMS   Reason: Job is passed to LRMS
------- Contents of output stream forwarded by the LRMS ---------
slurmstepd: error: Job 2078340 exceeded virtual memory limit (134084 > 4096), being killed
/bin/bash: error while loading shared libraries: libdl.so.2: failed to map segment from shared object
slurmstepd: error: Exceeded job memory limit
------------------------- End of output -------------------------
2017-10-04T12:37:41Z Job state change INLRMS -> FINISHING   Reason: Job processing error
2017-10-04T12:37:41Z Job state change FINISHING -> FINISHED   Reason: Job processing error

Razvidno je (“job submitted successfully”), da je strežnik uspešno zagnal nalogo preko sistema vrst (LRMS). V izpisu LRMS je vidno, da je naloga presegla napovedani maksimalni pomnilnik, zato jo je sistem ubil.

xRSL: opis nalog

Navodila: http://www.nordugrid.org/documents/xrsl.pdf

Primer opisa nalog:

  &
  (executable = /usr/bin/env)
  (jobname = "test")

  (stdout=test.log)
  (join=yes)
  (gmlog=log)
  (memory=1000)

Primer s prenosom datotek:

&
(executable="execution_script.sh")
(stdout="stdout.txt")
(join=yes)
(stdin="stdin.txt")
(inputFiles=
    ("stdin.txt" "http://www.external-url.com/example/stdin.txt")
    ("file1.py" "gsiftp://dcache.arnes.si/data/arnes.si/gen.vo.sling.si/file1.py")
    ("file2.py" "gsiftp://dcache.arnes.si/data/arnes.si/gen.vo.sling.si/file2.py")
)
(outputFiles=
    ("output1.txt" "gsiftp://dcache.arnes.si/data/arnes.si/gen.vo.sling.si/output1.txt")
    ("output2.txt" "gsiftp://dcache.arnes.si/data/arnes.si/gen.vo.sling.si/output2.txt")
)

Primer preproste naloge

Najprej pripravimo posredniško potrdilo:

arcproxy

Preverimo veljavnost:

arcproxy -I
Subject: /C=SI/O=SiGNET/O=SLING/OU=ARCSchoool FRI 2017/CN=Arc School Student 01/CN=1936774291
Issuer: /C=SI/O=SiGNET/O=SLING/OU=ARCSchoool FRI 2017/CN=Arc School Student 01
Identity: /C=SI/O=SiGNET/O=SLING/OU=ARCSchoool FRI 2017/CN=Arc School Student 01
Time left for proxy: 11 hours 59 minutes 51 seconds
Proxy path: /tmp/x509up_u541
Proxy type: X.509 Proxy Certificate Profile RFC compliant impersonation proxy - RFC inheritAll proxy
Proxy key length: 1024
Proxy signature: sha512

Prva naloga

Opis: hellogrid.xrsl

&
(executable=hellogrid.sh)
(wallTime="5 minutes")
(stdout="stdout.txt")
(stderr="stderr.txt")
(runtimeenvironment="APPS/DEMO/DEFAULT")

Skripta: hellogrid.sh

#!/bin/sh
echo "Hello, grid"

Odpošljemo nalogo…

arcsub -c jost.arnes.si hellogrid.xrsl

Preverimo status in prenesemo rezultate.

Programska okolja: Runtime environments

Na sistemu je vrsta vnaprej nameščenih programskih paketov, knjižnic in okolij. Seznam lahko najdete na spletni strani  Grid Monitor ali z neposrednim poizvedovanjem:

ldapsearch -x -h jost.arnes.si -p 2135 -b ' Mds-Vo-name=local,o=grid' \
| grep nordugrid-cluster-runtimeenvironment

Programe lahko pošljete tudi kot del podatkov z nalogo, vendar je priporočjivo, da ne presegajo  100MB. Prav tako je mogoče v okviru naloge zaganjati prevajalnike.

Če potrebujete kakšno programsko opremio, nas obvestite na  support@sling.si oz. se obrnite na lokalne upravitelje. Programe lahko tudi prenesete na strežnik za podatke (dcache.arnes.si) in jih zahtevate v datoteki xrsl.

Nastavitev želenega okolja:

(runtimeenvironment="APPS/BASE/GPU"

Uporaba OpenMPI in omrežja infiniBand

Omrežje InfiniBand omogoča nizkolatenčno komunikacijo v večjedrnih nalogah.

Prvi primer z OpenMPI:

Program v jeziku C: 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;
}

Skripta, ki bo program prevedla in zagnala:

#!/bin/bash
date
hostname
echo "Compiling example"
mpicc -o hello hellompi.c
echo "Done."
echo "Running example:"
mpirun --mca btl openib,self -np 4 ${PWD}/hello > hellompi.out
echo "Done."
date

Opis naloge xrsl:

&

(count = 4)
(jobname = "hellompi")
(inputfiles =
  ("hellompi.sh" "")
  ("hellompi.c" "")
)
(outputfiles = 
  ("hellompi.out" "")
)
(executable = "hellompi.sh")
(stdout = "hellompi.log")
(join = yes)
(walltime = "15 minutes")
(gmlog = log)
(memory = 2000)
(runtimeenvironment = "APPS/DEMO/OPENMPI-2.0.2")

Za zagon več jeder na istem računalniku zahtevate  count=4 and countpernode=4. Z večjimi nalogami (več kot 30 jeder) je priporočljivo, da omejite število vozlišč, sicer se naloge preveč razpršijo in učinkovitost pade.

Naloge z vektorskimi/grafilčnimi procesorji GPGPU s pomočjo CUDA

Z nalogo bomo izmerili pasovno širino pomnilika do kartice:

Najprej program cudatest.cu:

#include <stdio.h>  

int main() {
  int nDevices;

  cudaGetDeviceCount(&nDevices);
  for (int i = 0; i < nDevices; i++) {
    cudaDeviceProp prop;
    cudaGetDeviceProperties(&prop, i);
    printf("Device ID: %d\n", i);
    printf("  GPU, device name: %s\n", prop.name);
    printf("  Memory Clock Rate (KHz): %d\n",
           prop.memoryClockRate);
    printf("  Memory Bus Width (bits): %d\n",
           prop.memoryBusWidth);
    printf("  Peak Memory Bandwidth (GB/s): %f\n\n",
           2.0*prop.memoryClockRate*(prop.memoryBusWidth/8)/1.0e6);
  }
}

Skripta cudatest.sh:

#!/bin/bash
env| grep -i cuda > cudaenv.out
nvcc cudatest.cu -o cudatest
./cudatest > cudatest.out

Opis naloge:

&
(executable="cudatest.sh")
(inputfiles=
("cudatest.sh" "")
("cudatest.cu" "")
)
(outputfiles=
("cudatest.out"  " ")
("cudaenv.out"  " ")
)
(stdout="error.txt")
(join=yes)
(gmlog="log")
(jobName="cudatest")
(walltime="10")
(count="1")
(memory="500")
(runtimeenvironment="APPS/DEMO/GPU")

Lahka vitualizacija: Singularity HPC

  • sistem podoben lxc ali docker
  • uporabnik enak v sistemu in zunaj; administratorski dostop (root) ima samo administrator
  • običajno uporabljamo sistemske slike, ki jih lahko samo beremo
  • IO teče skozi virtualni zabojnik – vključno z diskovnim dostopom
  • ne vpliva na hitrost
  • nekaj omejitev: gonilniki, stabilnost overlayfs ipd – zelo učinkovit v večini primerov
  • soopravilnost z dockerjem

Sistem omogoča naloge, ki imajo povsem nedvisno okolje in tečejo v enakem okolju na razlilčnih fizičnih gručah. (Hranimo jih na cvmfs (cvmfs.sling.si) – not available yet.

Zabojnih s strežnikov Docker ali Singularity hub

singularity exec --nv docker://nvidia/cuda:latest nvcc --version
Docker image path: index.docker.io/nvidia/cuda:latest
Cache folder set to /net/jost/home/gen009/.singularity/docker
[10/10] |===================================| 100.0% 
Creating container runtime...
tar: usr/local/cuda-9.0/.wh..wh..opq: implausibly old time stamp 1970-01-01 01:00:00
tar: usr/share/doc/cuda-cudart-9-0/.wh..wh..opq: implausibly old time stamp 1970-01-01 01:00:00
...
...

WARNING: Skipping user bind, non existent bind point (file) in container: '/usr/bin/nvidia-smi'
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

Ali zadnji Ubuntu:

$ singularity exec docker://ubuntu:latest echo "Hello from the container"
Docker image path: index.docker.io/library/ubuntu:latest
Cache folder set to /net/jost/home/gen009/.singularity/docker
Creating container runtime...
Hello from the container

singularity pull docker://ubuntu:latest
singularity build ubuntu.img docker://ubuntu:latest
$ singularity exec docker://fedora:latest cat /etc/redhat-release
Docker image path: index.docker.io/library/fedora:latest
Cache folder set to /net/jost/home/gen009/.singularity/docker
[1/1] |===================================| 100.0%
Creating container runtime...
WARNING: Could not chdir to home: /net/jost/home/gen009
Fedora release 26 (Twenty Six)

Vrsta vnaprej pripravljenih zabojnikov:

  • https://singularity-hub.org/collections

Uporaba nameščenih okolij Singularity na gruči

Za uporabo vnaprej pripravljenega okolja lahko v skripti zaženete:

$ singularity exec /grid/arc/sw/singularity/cuda-latest.img cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.3 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.3 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

Uporaba lastne sistemske slike

Sistemske slike lahko shranite na zunanji strežik ali strežnik za podatke, npr.  dCache, https, ftp. Potem sliko navedete kot vhodno datoteko (InputFiles v xrsl) ter jo uporabite v skripti.