„NIIF szuperszámítógépek használata” változatai közötti eltérés

Innen: KIFÜ Wiki
a (Köszönetnyilvánítás)
 
(265 közbenső módosítás, amit 7 másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
== Az oldal célja ==
+
== A szuperszámítógépekről ==
Ez a wiki oldal a NIIF Intézet (Nemzeti Információs Infrastruktúra Fejlesztési Intézet) szuperszámítógépes szolgáltatásához kapcsolódó információkat tartalmazza.
+
A KIFÜ szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:
 
 
== A szuperszámítógépekről ==  
 
 
 
Az NIIF Intézet szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:
 
  
 
* Debreceni Egyetem
 
* Debreceni Egyetem
* NIIFI központ
+
* KIFÜ központ
 
* Pécsi Tudományegyetem
 
* Pécsi Tudományegyetem
 
* Szegedi Tudományegyetem
 
* Szegedi Tudományegyetem
  
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: egy helyszínen SMP/ccNUMA, három helyszínen pedig "fat-node" fürtözött megoldás. Az alrendszereket az NIIFI nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.
+
A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: egy helyszínen ccNUMA, három helyszínen pedig "fat-node" fürtözött megoldás. Az alrendszereket a KIFÜ nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként.
A szuperszámítógép-rendszert az NIIFI üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll az NIIF Intézettel.
+
A szuperszámítógép-rendszert a KIFÜ üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll a KIFÜ-vel.
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, az NIIF adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.
+
A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, a KIFÜ adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.
 +
 
 +
=== Köszönetnyilvánítás ===
 +
Tudományos publikációkban a következő köszönetnyilvánítást javasoljuk:
 +
 
 +
'''We acknowledge KIFÜ for awarding us access to resource based in Hungary.'''
 +
 
 +
Where technical support has been received the following additional text should also be used:
 +
 
 +
'''The support of [name of person/people] from KIFÜ, Hungary to the technical work is gratefully acknowledged.'''
 +
 
 +
== Hozzáférés a szuperszámítógépekhez ==
 +
 
 +
A témában több videót is készítettünk, amelyek bemutatják a hozzáférés menetét (kulcsgenerálás és hozzáférés) és a filefeltöltés gyakorlati tutoriál keretében Windows operációs rendszeren.
 +
 
 +
* [http://videotorium.hu/hu/recordings/details/12290,Hozza_fe_re_s_a_HPC-hez_kezdo_le_pe_sek_elo_ada_s_e_s_demo_ Kezdő lépések (videó)]
 +
 
 +
* [http://videotorium.hu/hu/recordings/details/12307,A_HPC_felhaszna_la_s_gyakorlati_le_pe_sei_demo_.mp4 A HPC felhasználás gyakorlati lépései (videó)]
 +
 
 +
A fenti videók tartalmazhatnak elavult információkat pl. az ütemezővel kapcsolatban, a jelenlegi ütemező használatához külön videóanyagot ajánljunk.
 +
 
  
== Hozzáférés a szuperszámítógépekhez ==
 
 
A szuperszámítógépekhez kulcsos SSH használatával lehet hozzáférni. Ajánlott UTF-8 képes terminált használ az ékezetes betűk megjeelenítése érdekében. PUTTY terminál esetén a ''Window/Translation'' beállítás alatt a character set-et kell UTF-8-ra állítani.
 
A szuperszámítógépekhez kulcsos SSH használatával lehet hozzáférni. Ajánlott UTF-8 képes terminált használ az ékezetes betűk megjeelenítése érdekében. PUTTY terminál esetén a ''Window/Translation'' beállítás alatt a character set-et kell UTF-8-ra állítani.
  
=== Hozzáférés a Shell Framework használatával ===
+
=== SSH belépés ===
A Shell Framework egy összetett Bash alapú keretrendszer, ami kifejezetten a HPC felhasználók igényei alapján lett kifejlesztve. Jelentősen egyszerűsíti az SSH-val és a jobok kezelésével kapcsolatos teendőket. Támogatott operációs rendszerek: OS X, Linux.
 
 
 
==== Telepítés és frissítés ====
 
A keretrendszer a github.com-ról telepíthető és frissíthető. A telepítéséhez a következő parancsokat kell futtatni a terminálban:
 
 
<code>
 
<code>
    cd $HOME
+
ssh USER@login.SITE.hpc.niif.hu
    git clone git://github.com/hornos/shf3.git
 
    echo 'source $HOME/shf3/bin/shfrc' >> $HOME/.profile
 
    source .profile
 
 
</code>
 
</code>
 +
ahol a <code>USER</code> a felhasználónév, a <code>SITE</code> pedig a belépéshez használt szupergép neve: '''budapest''', '''debrecen''', '''pecs''', '''szeged'''. Nem alapértelmezett kulcs használata a <code>-i KULCS</code> kapcsolóval lehetséges.
  
A frissítéseket a következő paranccsal tudjuk letölteni:
+
Belépés a szegedi gépre alice felhasználóként, az SSH privát kulcsot a <code>keys/szeged</code> fájlból olvasva:
 
<code>
 
<code>
    shfmgr -u
+
ssh -i keys/szeged alice@login.szeged.hpc.niif.hu
 
</code>
 
</code>
  
==== SSH elérés beállítása ====
+
=== Fájl másolás SCP segítségével ===
Az SSH modul független a <tt>$HOME/.ssh</tt> könyvtárban található konfigurációtól. Minden SSH login/gép pároshoz tartozik egy MID fájl. Ebben a fájlban vannak tárolva az SSH paraméterei <tt>kulcs=érték</tt> formában. A MID fájl Bash formátumú szkript fájl, amelyet más programokban a <tt>source</tt> paranccsal tudunk beolvasni. A <tt>$HOME/shf3</tt> könyvtár tartalmazza a teljes keretrendszert és a beállításokat is, ezért ezt a könyvtárat tehetjük egy titkosított USB meghajtóra is és symlinkelhetjük a home könyvtárunkba.
+
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:
 +
<pre>
 +
scp USER@login.SITE.hpc.niif.hu:FILE FILE
 +
scp FILE USER@login.SITE.hpc.niif.hu:FILE
 +
</pre>
  
Új SSH MID-et a következő paranccsal tudunk létrehozni:
+
A szegedi gép HOME könyvtárában lévő <code>stuff.tgz</code> fájl letöltése a helyi gép aktuális könyvtárába:
 
<code>
 
<code>
    sshmgr -n <MID>
+
scp bob@login.szeged.hpc.niif.hu:stuff.tgz .
 
</code>
 
</code>
A következő beállításokat kell beleírni a MID fájlba:
+
 
 +
=== Adatátvitel rsync segítségével ===
 +
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához az SSH-t és az rsync-et együtt kell használni. Fel- és leszinkronizálás:
 +
<pre>
 +
rsync -a -e ssh DIRECTORY USER@login.budapest.hpc.niif.hu:/home/USER
 +
rsync -a -e ssh USER@login.budapest.hpc.niif.hu:/home/USER/DIRECTORY
 +
</pre>
 +
 
 +
A budapesti gépre szinkronizálom a helyi <code>src</code> könyvtár tartalmát (nem az alapértelmezett kulcsot használva) és a másolás folyamatát nyomonkövetem:
 
<code>
 
<code>
    # a távoli gép IP címe vagy DNS neve
+
rsync -a -h --progress -e "ssh -i keys/budapest" ./src alice@login.budapest.hpc.niif.hu:/home/alice
    mid_ssh_fqdn="skynet.cyberdy.ne"
 
    # távoli felhasználói név
 
    mid_ssh_user="$USER"
 
    # SSH port
 
    mid_ssh_port=22
 
    # explicit ellenőrzés
 
    mid_ssh_port_check="ping"
 
 
</code>
 
</code>
Amennyiben nincs még SSH kulcsunk a szkript létrehozza ezt. Az SSH kulcsokat a
 
<tt>$HOME/shf3/key/ssh</tt> könyvtár alatt találjuk: privát kulcs: <tt><MID>.sec</tt>, publikus kulcs: <tt><MID>.pub</tt>. A publikus részt kell eljuttatni a távoli gépre ill. elküldeni a regisztráció során. Ha vannak már kulcsaink, akkor ebbe a könyvtárba kell másolni az előbb említett nevekkel. Az SSH MID-ek a <tt>$HOME/shf3/mid/ssh</tt> könyvtár alatt vannak a <tt><MID></tt> nevű fájlokban. Minden SSH-val kapcsolatos parancs ezekt a fájlokat olvassa és használja a kulcsokat, ha elérhetők.
 
 
  
 
== Felhasználói felület ==
 
== Felhasználói felület ==
66. sor: 77. sor:
 
   HPC állomás |      |
 
   HPC állomás |      |
 
         rövid gép név |
 
         rövid gép név |
               korábbi parancs exit kódja
+
               előző parancs exit kódja
 +
</code>
 +
 
 +
=== Modul környezet ===
 +
A szupergépekre telepített alkalmazásokat az ún. modul rendszer segítségével lehet használ. A modul rendszer lehetővé teszi egy adott alkalmazás több verziójának használatát is. Feladata a shell környezeti változók helyes beállítása. Normál felhasználók számára az alapértelmezett modul környezet automatikusan betöltődik. Az elérhető modulok listáját a következő paranccsal kapjuk meg:
 +
<code>
 +
module avail
 +
</code>
 +
a már betöltött modulok listáját:
 +
<code>
 +
module list
 +
</code>
 +
Alkalmazást a következő paranccsal tölthetünk be:
 +
<code>
 +
module load APPS
 +
</code>
 +
ahol az <code>APPS</code> a betöltendő modulok space-szel elválasztott listája.
 +
 
 +
A NIIF által beállított környezeti változókat <code>nce</code> parancs listázza ki.
 +
 
 +
==== Példa ====
 +
A Maple, netcfd és az R csomagok betöltése:
 +
<code>
 +
module load maple netcdf R
 +
</code>
 +
 
 +
=== Adatok megosztása projekt tagok számára ===
 +
Fájlok ill. könyvtárak megosztásához használjuk a [http://www.techrepublic.com/blog/linux-and-open-source/learn-to-use-extended-file-attributes-in-linux-to-boost-security/](fájlrendszer ACL-eket). Az ACL-ekkel a hagyományos unix engedélyeken felül finoman szabályozhatjuk a fájlok és könyvtárak hozzáférési engedélyeit. <span style="color:#ce1256"> Kérjük, hogy fokozottan figyeljenek arra, hogy a teljes <code>$HOME</code> könyvtárra sose adjanak "rwx" jogot más felhasználóknak, mivel pl. a <code>.ssh</code> mappa nagyon érzékeny a jogosultságokra, és a rendszer nem fogja beengedni legközelebb a felhasználót!</span> A következő példában a <code>$HOME/Shared</code> könyvtárat osztjuk egy munkatárs számára:
 +
<pre>
 +
# a home könyvtár beállítása
 +
# user1 user számára belépsi engedély: u:user1:x
 +
$ setfacl -m u:user1:x $HOME
 +
$ getfacl $HOME
 +
# file: user2/user2
 +
# owner: user2
 +
# group: user2
 +
user::rwx
 +
user:user1:--x
 +
group::r-x
 +
mask::r-x
 +
other::---
 +
# Shared könyvtár megosztása
 +
# user1 számára minden unix jog
 +
$ cd
 +
$ mkdir Shared
 +
$ setfacl -m u:user1:rwx $HOME/Shared
 +
$ getfacl Shared
 +
# file: Shared
 +
# owner: user2
 +
# group: user2
 +
user::rwx
 +
user:user1:rwx
 +
group::rwx
 +
mask::rwx
 +
other::r-x
 +
</pre>
 +
 
 +
== Python csomag telepítése a saját home könyvtárunkba ==
 +
Itt egy példa arra, hogy hogyan tudjuk feltelepíteni a mercurial python csomagot.
 +
<pre>
 +
$ module load python
 +
$ pip install --user mercurial
 +
</pre>
 +
 
 +
== Közös home könyvtár használata ==
 +
A szuperszámítógépek login és vserver node-jai osztott home könyvtárral vannak összekötve. Fontos, hogy az osztott könyvtárat a számítási node-ok nem érik el, ezért az osztott home-ot csak tárolásra ill. megosztásra lehet használni. Az osztott terület Debrecenben van, ezért ott a leggyorsabb. A másik három helyen lassabb a hozzáférés a nagyobb távolság miatt. A programok kimenetét továbbra is a lokális scratch vagy home könyvtárba kell írni. Amelyik login node-on használni szeretnénk az osztott home könyvtárat, ott adjuk ki a következő parancsokat:
 +
<pre>
 +
cd; mkdir shared; ln -s /mnt/fhgfs/home/$USER shared/$USER
 +
</pre>
 +
Ezek után a <code>$HOME/shared/$USER</code> könyvtárba másoljuk a megosztott fájlokat. Ez a könyvtár a következő környezeti változóba is exportálódik:
 +
<pre>
 +
$NCE_SHARED
 +
</pre>
 +
 
 +
=== Biztonsági mentés, adatmegosztás ===
 +
A következő példa mentést végez a <code>$HOME/data</code> könyvtárról:
 +
<pre>
 +
rsync -avuP $HOME/data $NCE_SHARED
 +
</pre>
 +
Törölje a fájlokat a mentésben is:
 +
<pre>
 +
rsync -avuP --delete $HOME/data $NCE_SHARED
 +
</pre>
 +
 
 +
== Alkalmazások lefordítása ==
 +
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: <code>hpc-forum kukac listserv.niif.hu</code>. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. A KIFÜ HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a <code>hpc-support kukac niif.hu</code> címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.
 +
 
 +
== SLURM ütemező használata ==
 +
Weboldal:
 +
 
 +
http://slurm.schedmd.com
 +
 
 +
A SLURM ütemező bemutatása:
 +
 
 +
* [http://videotorium.hu/hu/recordings/details/6122,A_slurm_HPC_utemezo Slurm HPC ütemező]
 +
 
 +
A szupergépeken CPU óra (gépidő) alapú ütemezés működik. Ez azt jelenti, hogy a fogyasztási időtartamra (hónap) az elérhető maximális gépidő fel van osztva a felhasználók között. Minden UNIX felhasználó egy vagy több számlához (''Account'') tartozhat. Az ütemező számla egy adott HPC-s projekthez tartozik, hasonló a UNIX csoporthoz. Szupergépes feladatokat csak az egyes számlák terhére lehet indítani. A CPU óra az elhasznált idő (''Walltime'') és az igényelt processzorok számának szorzata. Például a budapesti gépen 2 db node (48 processzor mag) foglalása 30 percre 48 * 30 = 1440 CPU perc = 24 CPU óra. A CPU órát az ütemező a futás kezdetétől a befejezésig méri.
 +
 
 +
'''Rendkívül fontos arról meggyőződni, hogy a futtatandó alkalmazás rendesen kihasználja-e a szupergépet. Egy üres vagy rosszul futó job hamar elhasználja a rendelkezésre álló gépidőt. Elfogyasztott gépidő esetén új jobokat már nem lehet indítani, és meg kell várni a számlázási időszak végét. A gépidő limitek (Account Limit) minden hónap elején jóváíródnak.'''
 +
 
 +
Számláink állapotáról a következő paranccsal kapunk információt:
 +
<code>
 +
sbalance
 +
</code>
 +
 
 +
A parancs a következő táblázatot jeleníti meg. A felhasználó két számlához (foobar,barfoo) is hozzáfér, futatthat a számla terhére. Saját magát megcsillagozva látja a listában. Bobbal mindkét számlán (Account oszlop) Alice is osztozik. A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyeik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még alérhető (Available) gépidőről ad tájékoztatást.
 +
<pre>
 +
Scheduler Account Balance
 +
---------- ----------- + ---------------- ----------- + ------------- -----------
 +
User            Usage |          Account      Usage | Account Limit  Available (CPU hrs)
 +
---------- ----------- + ---------------- ----------- + ------------- -----------
 +
alice                0 |          foobar          0 |            0          0
 +
bob *                0 |          foobar          0 |            0          0
 +
 
 +
bob *                7 |          barfoo          7 |        1,000        993
 +
alice                0 |          barfoo          7 |        1,000        993
 +
</pre>
 +
 
 +
=== A gépidő becslése ===
 +
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:
 +
<code>
 +
sestimate -N NODES -t WALLTIME
 +
</code>
 +
ahol a <code>NODES</code> a lefoglalni kívánt node-ok száma, a <code>WALLTIME</code> pedig a futás maximális ideje.
 +
 
 +
'''Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az <code>sacct</code> paranccsal is ellenőrizni.'''
 +
 
 +
Alice 2 nap 10 órára és 2 node-ra szeretne foglalást kérni, megnézi van-e elég gépidő a számláján:
 +
<pre>
 +
sestimate -N 2 -t 2-10:00:00
 +
 
 +
Estimated CPU hours: 2784
 +
</pre>
 +
Sajnos ebben a hónapban erre már nem telik.
 +
 
 +
=== Állapotinformációk ===
 +
Az ütemezőben lévő jobokról az <code>squeue</code>, a klaszter általános állapotáról az <code>sinfo</code> parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:
 +
<code>
 +
scontrol show job JOBID
 +
</code>
 +
 
 +
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:
 +
<code>
 +
sacct -l -j JOBID
 +
</code>
 +
 
 +
A felhasznált memóriáról a következő parancs ad tájékoztatást:
 +
<code>
 +
smemory JOBID
 +
</code>
 +
 
 +
A lemezhasználatról pedig a
 +
<code>
 +
sdisk JOBID
 +
</code>
 +
 
 +
==== Slurm figyelmeztető üzenetek ====
 +
<pre>
 +
Resources/AssociationResourceLimit - Erőforrásra vár
 +
AssociationJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva
 +
Piority - Alacsony prioritás miatt várakozik
 +
</pre>
 +
Az utóbbi esetben, csőkkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.
 +
 
 +
Az ütemezőben 3 feladat van. Az első egy arrayjob, éppen erőforrásra vár (PENDING). A második egy MPI job, ami 4 node-on fut már 25 perce (TIME). A harmadik egy egy node-os OMP futtatás, éppen most indult el. A feladatik nevei (NAME) egyénileg adható meg. Rövid, informatív neveket érdemes adni.
 +
<pre>
 +
squeue -l
 +
 
 +
Wed Oct 16 08:30:07 2013             
 +
    JOBID PARTITION    NAME    USER    STATE      TIME TIMELIMIT  NODES NODELIST(REASON)
 +
591_[1-96]    normal    array    alice  PENDING      0:00    30:00      1 (None)
 +
      589    normal      mpi      bob  RUNNING      25:55  2:00:00      4 cn[05-08]
 +
      590    normal      omp    alice  RUNNING      0:25  1:00:00      1 cn09
 +
</pre>
 +
 
 +
Ennek a 2 node-os batch jobnak a jellemző memóriaterhelés a következő volt: kb. 10GB virtuális és 6.5GB RSS memóriát használt el node-onként.
 +
<pre>
 +
smemory 430
 +
 
 +
MaxVMSize  MaxVMSizeNode  AveVMSize    MaxRSS MaxRSSNode    AveRSS
 +
---------- -------------- ---------- ---------- ---------- ----------
 +
10271792K          cn06  10271792K  6544524K      cn06  6544524K 
 +
10085152K          cn07  10085152K  6538492K      cn07  6534876K
 +
</pre>
 +
 
 +
==== CPU felhasználás ellenőrzése ====
 +
Nagyon fontos meggyőződni arról, hogy az alkalmazás kihasználja-e a rendelkezésre álló gépidőt. Egy futó alkalmazás a következő paranccsal tudunk monitorozni:
 +
<code>
 +
sjobcheck JOBID
 +
</code>
 +
 
 +
Ez a job 4 node-on fut. A LOAD csoport a gép általános terheléséről ad információt és kb. a core-ok számával egyezik meg. A helyes felhasználásról a CPU csoport ad tájékoztatást. Ideális esetben a <code>User</code> oszlop értékei 90 fölött vannak. Ez alatt valamilyen probléma lépett fel és a futást érdemes megszakítani.
 +
<pre>
 +
Hostname                    LOAD                      CPU              Gexec 
 +
CPUs (Procs/Total) [    1,    5, 15min] [  User,  Nice, System, Idle, Wio]
 +
cn08    24 (  25/  529) [ 24.83, 24.84, 20.98] [  99.8,  0.0,  0.2,  0.0,  0.0] OFF
 +
cn07    24 (  25/  529) [ 24.93, 24.88, 20.98] [  99.8,  0.0,  0.2,  0.0,  0.0] OFF
 +
cn06    24 (  25/  529) [ 25.00, 24.90, 20.97] [  99.9,  0.0,  0.1,  0.0,  0.0] OFF
 +
cn05    24 (  25/  544) [ 25.11, 24.96, 20.97] [  99.8,  0.0,  0.2,  0.0,  0.0] OFF
 +
</pre>
 +
 
 +
==== Licenszek ellenőrzése ====
 +
Az elérhető és éppen használt licenszekről a következő parancs ad információt:
 +
<code>
 +
slicenses
 +
</code>
 +
 
 +
==== Karbantartás ellenőrzése ====
 +
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:
 +
<code>
 +
sreservations
 +
</code>
 +
 
 +
==== Összesített felhasználás ====
 +
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:
 +
<code>
 +
susage
 +
</code>
 +
 
 +
==== Teljes fogyasztás ====
 +
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:
 +
 
 +
<code>
 +
sreport -t Hours Cluster AccountUtilizationByUser Accounts=niif Start=2014-01-01
 +
</code>
 +
 
 +
niif helyett a saját projektünk azonosítóját kell megadni.
 +
 
 +
=== Feladatok futtatása ===
 +
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a <code>#SBATCH</code> direktívával kell megadni. Az ütemezők összehasonlításáról és a Slurm-ban elérhető direktívákról a következő [http://slurm.schedmd.com/rosetta.pdf táblázat] ad bővebb tájékoztatást.
 +
 
 +
==== Kötelező paraméterek ====
 +
A következő paramétereket minden esetben meg kell adni:
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A ACCOUNT
 +
#SBATCH --job-name=NAME
 +
#SBATCH --time=TIME
 +
</pre>
 +
ahol az <code>ACCOUNT</code> a terhelendő számla neve (elérhető számláinkről az <code>sbalance</code> parancs ad felvilágosítást), a <code>NAME</code> a job rövid neve, a <code>TIME</code> pedig a maximális walltime idő (<code>DD-HH:MM:SS</code>). A következő időformátumok használhatók:
 +
"minutes", "minutes:seconds", "hours:minutes:seconds", "days-hours", "days-hours:minutes" és "days-hours:minutes:seconds".
 +
 
 +
A jobok feladását a következő parancs végzi:
 +
<code>
 +
sbatch jobscript.sh
 +
</code>
 +
 
 +
Sikeres feladás esetén a következő kimenetet kapjuk:
 +
<pre>
 +
Submitted batch job JOBID
 +
</pre>
 +
ahol a <code>JOBID</code> a feladat egyedi azonosítószáma.
 +
 
 +
A feladat leállítását a következő parancs végzi:
 +
<code>
 +
scancel JOBID
 
</code>
 
</code>
  
== Általános jellemzők ==
+
==== Nem újrainduló jobok ====
 +
Nem újrainduló jobokhoz a következő direktívát kell használni:
 +
<pre>
 +
#SBATCH --no-requeue
 +
</pre>
 +
 
 +
==== Feladat sorok ====
 +
A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a <code>test</code> sor és a <code>prod</code> sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a <code>prod</code>. A teszt partíciót a következő direktívával lehet kiválasztani:
 +
<pre>
 +
#SBATCH --partition=test
 +
</pre>
 +
 
 +
==== A szolgáltatás minősége (QOS) ====
 +
A szolgáltatást alapértelmezett minősége <code>normal</code>, azaz nem megszakítható a futás.
 +
 
 +
===== Magas prioritás =====
 +
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.
 +
<pre>
 +
#SBATCH --qos=fast
 +
</pre>
 +
 
 +
===== Alacsony prioritás =====
 +
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.
 +
<pre>
 +
#SBATCH --qos=lowpri
 +
</pre>
 +
 
 +
==== Memória foglalás ====
 +
A memória a CPU-hoz hasonlóan korlátozott, foglalható erőforrás. A felhasználás mérése a memória / core alapon történik: 1 core óra, 2600 MB órának felel meg. Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:
 +
<pre>
 +
#SBATCH --mem-per-cpu=MEMORY
 +
</pre>
 +
ahol <code>MEMORY</code> MB egységben van megadva. Budapesten és Szegeden a maximális memória/core 2600 MB.
 +
 
 +
==== Email értesítés ====
 +
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):
 +
<pre>
 +
#SBATCH --mail-type=ALL
 +
#SBATCH --mail-user=EMAIL
 +
</pre>
 +
ahol az <code>EMAIL</code> az értesítendő emial cím.
 +
 
 +
==== Tömbfeladatok (arrayjob) ====
 +
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a <code>SLURM_ARRAY_TASK_ID</code> környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a <code>slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out</code> fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. [http://slurm.schedmd.com/job_array.html Bővebb ismertető]
 +
 
 +
Alice felhasználó a foobar számla terhére, maximum 24 órára ad fel 96 db soros jobot. A <code>#SBATCH --array=1-96</code> direktíva jelzi, hogy tömbfeladatról van szó. Az alkalmazást az <code>srun</code> paranccsal kell indítani. Ebben az esetben ez egy shell szkript.
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A foobar
 +
#SBATCH --time=24:00:00
 +
#SBATCH --job-name=array
 +
#SBATCH --array=1-96
 +
srun envtest.sh
 +
</pre>
 +
 
 +
==== Soros (serial) jobok ====
 +
Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.
 +
 
 +
A következő példában a test sorban 3 egy szálon dutó programot indítunk el. A programok és az inputok lehetnek különbözőek. Fontos, hogy az utolsó parancsot nem kell a háttérben (&) indítani és a wait-tel kell befejezni a job szkriptet.
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH --job-name=serial
 +
#SBATCH --time=24:30:00
 +
#SBATCH -n 3
 +
#SBATCH --partition=test
 +
srun -n 1 program input1 &
 +
srun -n 1 program input2 &
 +
srun -n 1 program input3
 +
wait
 +
</pre>
 +
 
 +
==== OpenMPI feladatok ====
 +
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (<code>#SBATCH --ntasks-per-node=</code>). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az <code>mpirun</code> paranccsal kell indítani.
 +
 
 +
Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a <code>slurm.out</code> fájlba irányítja (<code>#SBATCH -o</code>).
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A barfoo
 +
#SBATCH --job-name=mpi
 +
#SBATCH -N 2
 +
#SBATCH --ntasks-per-node=24
 +
#SBATCH --time=12:00:00
 +
#SBATCH -o slurm.out
 +
mpirun ./a.out
 +
</pre>
 +
 
 +
==== SGI ccNUMA UV 1000 (Pécs) ====
 +
A pécsi gépen legalább 6 szálon működő jobok futtatása lehetságes. Az egyetlen elfogadott paraméter a szálak szám (`-n`), amelynek 6 többszörösének kell lenni. Ezen a gépen nincs teszt sor. Kérjük, hogy 48-nál kevesebb szálon futó programokat az UV-n ne futtassanak! Egy szálú ill. array jobok futtatása nem lehetséges.
 +
 
 +
===== OMP Példa =====
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A barfoo
 +
#SBATCH --job-name=omp
 +
#SBATCH -n 48
 +
#SBATCH --time=03:00:00
 +
#SBATCH -o slurm.out
 +
/opt/nce/bin/numainfo
 +
OMP_NUM_THREADS=$SLURM_NTASKS ./a.out
 +
</pre>
 +
 
 +
===== SGI MPT MPI Példa =====
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A barfoo
 +
#SBATCH --job-name=omp
 +
#SBATCH -n 48
 +
#SBATCH --time=03:00:00
 +
#SBATCH -o slurm.out
 +
/opt/nce/bin/numainfo
 +
mpirun $SLURM_NTASKS ./a.out
 +
</pre>
 +
 
 +
===== Jobok monitorozása =====
 +
CPU használat:
 +
<pre>
 +
smonitor -n <JOBID>
 +
</pre>
 +
 
 +
Memória használat:
 +
<pre>
 +
smonitor -m <JOBID>
 +
</pre>
 +
 
 +
Ütemezés sor foglaltsága:
 +
<pre>
 +
sinfo_uv
 +
</pre>
 +
 
 +
==== SGI MPT MPI feladatok (Debrecen) ====
 +
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (<code>#SBATCH --ntasks-per-node=</code>). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az <code>mpirun</code> paranccsal kell indítani. Az SGI MPT MPI paraméterezése kicsit más, mint az OpenMPI. '''Debrecen az SGI MPT az alpértelmezett MPI környezet!'''
 +
 
 +
Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a <code>slurm.out</code> fájlba irányítja (<code>#SBATCH -o</code>).
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A barfoo
 +
#SBATCH --job-name=mpi
 +
#SBATCH -N 2
 +
#SBATCH --ntasks-per-node=12
 +
#SBATCH --time=12:00:00
 +
#SBATCH -o slurm.out
 +
source /opt/nce/bin/machines
 +
export MPI_OPT="${MACHINES} -np ${SLURM_NTASKS_PER_NODE}"
 +
mpirun ${MPI_OPT} ./a.out
 +
</pre>
 +
 
 +
==== SGI PerfBoost egyéb MPI feladatokra (Debrecen) ====
 +
Az SGI MPT lehetőséget ad arra, hogy nem MPT MPI-vel fordított MPI programok is használjunk. Ebben az esetben az MPI hívások MPT hívásokkal cserélődnek ki.
 +
 
 +
Egy OpenMPI-re fordított program indítása:
 +
 
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A barfoo
 +
#SBATCH --job-name=mpi
 +
#SBATCH -N 2
 +
#SBATCH --ntasks-per-node=12
 +
#SBATCH --time=12:00:00
 +
#SBATCH -o slurm.out
 +
source /opt/nce/bin/machines
 +
export MPI_OPT="${MACHINES} -np ${SLURM_NTASKS_PER_NODE}"
 +
mpirun ${MPI_OPT} perfboost -ompi ./a.out
 +
</pre>
 +
 
 +
==== CPU binding ====
 +
Az MPI programok teljesítménye általában javítható a processzek CPU magokhoz kötésével. Ilyenkor a párhuzamos program szálait az operációs rendszer nem ütemezi a CPU magok között, ezért javulhat a memória lokalizáció (kevesebb cache miss). A kötés használata ajánlott. Tesztekkel meg kell győződni, hogy egy adott alkalmazás esetén melyik kötési stratégia adja a legjobb eredményt. A következő beállítások az OpenMPI környezetre vontakoznak. A kötésekről részletes információt a <code>--report-bindings</code> MPI opcióval kaphatunk. Az indítási parancsok melett a részletes binding információ néhány sora is látható. Fontos, hogy az ütemező task binding-ját nem kell használni!
 +
 
 +
===== Kötés CPU magonként =====
 +
Ebben az esetben az MPI szálak (rank) sorban töltik fel a CPU magokat.
 +
<pre>
 +
Indítási parancs: mpirun --bind-to-core --bycore
 +
 
 +
[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]
 +
</pre>
 +
 
 +
===== Kötés CPU foglalat szerint =====
 +
Ebben az esetben az MPI szálak váltakozva töltik fel a CPU-kat.
 +
<pre>
 +
Indítási parancs: mpirun --bind-to-core --bysocket
 +
 
 +
[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]
 +
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]
 +
</pre>
 +
 
 +
===== Kötés node-ok szerint =====
 +
Ebben az esetben az MPI szálak váltakozva töltik fel a node-okat. Lagalább 2 node foglalása szükséges.
 +
<pre>
 +
Indítási parancs: mpirun --bind-to-core --bynode
 +
 
 +
[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
 +
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
 +
</pre>
 +
 
 +
==== OpenMP (OMP) feladatok ====
 +
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az <code>OMP_NUM_THREADS</code> környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:
 +
<code>
 +
export OMP_NUM_THREADS=10
 +
</code>
 +
 
 +
A következő példában egy taskhoz 10 CPU core-t rendeltunk, a 10 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a <code>
 +
SLURM_CPUS_PER_TASK</code> változó tartalmazza, és ez állítja be az OMP szálak számát is.
 +
 
 +
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 10 szálas OMP alkalmazást.
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A foobar
 +
#SBATCH --job-name=omp
 +
#SBATCH --time=06:00:00
 +
#SBATCH --ntasks=1
 +
#SBATCH --cpus-per-task=10
 +
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out
 +
</pre>
 +
 
 +
==== Hibrid MPI-OMP feladatok ====
 +
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.
 +
 
 +
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 24 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 24 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 24 OMP szál fut.
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A foobar
 +
#SBATCH --job-name=mpiomp
 +
#SBATCH --time=08:00:00
 +
#SBATCH -N 2
 +
#SBATCH --ntasks=2
 +
#SBATCH --ntasks-per-node=1
 +
#SBATCH --cpus-per-task=24
 +
#SBATCH -o slurm.out
 +
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
 +
mpirun ./a.out
 +
</pre>
 +
 
 +
==== Maple Grid feladatok ====
 +
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (<code>${MAPLE}/toolbox/Grid/bin/startserver</code>). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (<code>#SBATCH --licenses=maplegrid:1</code>). A Maple feladat indátását a <code>${MAPLE}/toolbox/Grid/bin/joblauncher</code> paranccsal kell elvégezni.
 +
 
 +
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A foobar
 +
#SBATCH --job-name=maple
 +
#SBATCH -N 1
 +
#SBATCH --ntasks-per-node=24
 +
#SBATCH --time=06:00:00
 +
#SBATCH -o slurm.out
 +
#SBATCH --licenses=maplegrid:1
 +
 
 +
module load maple
 +
 
 +
${MAPLE}/toolbox/Grid/bin/startserver
 +
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl
 +
</pre>
 +
 
 +
==== Matlab feladatok ====
 +
Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (<code>#SBATCH --licenses=matlabdce:1,matlabdct:1,matlab:1</code>). Összesen 96 darab
 +
Distributed Computing Server, 13 darab Distributed Computing Toolbox és 13 Matlab licensz lett megvásárolva.
 +
<pre>
 +
#!/bin/bash
 +
 
 +
#SBATCH -A foobar
 +
#SBATCH --job-name="Matlab test job"
 +
#SBATCH -n 1
 +
#SBATCH --licenses=matlabdce:1,matlabdct:1,matlab:1
 +
#SBATCH -o slurm.out
 +
 
 +
matlab -nodisplay < job.m
 +
</pre>
 +
 
 +
==== GPU-k használata ====
 +
A szegedi szuperszámítógép rendelkezik 2db GPU kártyákkal is felszerelt compute node-dal. A GPU node-okban 2x6db Nvidia Tesla M2070-es kártya található. A GPU-s node-ok külön job sorban található (<code>--partition gpu</code>). A GPU-k számát a <code>--gres gpu:#</code> direktívával kell megadni.
 +
 
 +
Alice felhasználó a foobar számla terhére, 4GPU-n, 6 órára indítja a következő jobot.
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A foobar
 +
#SBATCH --job-name=GPU
 +
#SBATCH --partition gpu
 +
#SBATCH --gres gpu:4
 +
#SBATCH --time=06:00:00
 +
 
 +
$PWD/gpu_burnout 3600
 +
</pre>
 +
 
 +
== Alkalmazások beállításai ==
 +
=== Saját programok telepítése ===
 +
A saját fordítású programokat a HOME könyvtáradba kell telepíteni, ezt általában a fordítás előtti lefuttatott configure szkripttel lehet beállítani. Az adott program a $HOME/local alá fog települni. A PATH és egyéb környezeti változókat értelem szerűen kell beállítani.
 +
<pre>
 +
cd $HOME
 +
mkdir local
 +
(belépés az alklamazás könyvtárába)
 +
./configure --prefix=$HOME/local
 +
make; make install
 +
</pre>
 +
 
 
A frontend gépeken felhasználói limitek vannak beállítva. Ezekről a következő paranccsal kapunk információt:
 
A frontend gépeken felhasználói limitek vannak beállítva. Ezekről a következő paranccsal kapunk információt:
 
<code>
 
<code>
    ulimit -a
+
ulimit -a
 
</code>
 
</code>
 
A limitek a compute node-okon és az UV-n nincsenek beállítva.
 
A limitek a compute node-okon és az UV-n nincsenek beállítva.
  
=== JVM heap méret ===
+
=== Java JVM heap méret ===
A memória limit miatt a Java virtuális gépen és fordító nem jól működik, ezért meg kell adni a maximális heap méretét, ami a frontend gépeken maximum 3500m:
+
A memória limit miatt a Java virtuális gépen és fordító nem jól működik, ezért meg kell adni a maximális heap méretét:
 +
<pre>
 +
java -Xmx512m -version
 +
javac -J-Xmx512m -version
 +
</pre>
 +
vagy exportálni kell a következő változót:
 +
<pre>
 +
export _JAVA_OPTIONS="-Xms1g -Xmx1g"
 +
</pre>
 +
 
 +
=== Python Numpy és Scipy használat ===
 +
A numerikus Python használatához a következő csomagokat kell betölteni:
 
<code>
 
<code>
    java -Xmx512m -version
+
module load python numpy scipy
    javac -J-Xmx512m -version
 
 
</code>
 
</code>
 +
A numpy és a scipy csomagok az Intel MKL OpenMP gyorsítását használják. A jobokat az <code>openmp</code> párhuzamos környezetbe kell elküldeni.
  
 
== HP Budapest ==
 
== HP Budapest ==
 +
 +
 
=== Fordítás ===
 
=== Fordítás ===
 
Elérhető fordítók listája
 
Elérhető fordítók listája
110. sor: 687. sor:
  
 
A fordítási paramétereket az NCE környezeti változókból érdemes kiolvasni:
 
A fordítási paramétereket az NCE környezeti változókból érdemes kiolvasni:
<code>
+
<pre>
    NCE_OFLAGS - optimalizációs kapcsolók C és Fortran
+
NCE_OFLAGS - optimalizációs kapcsolók C és Fortran
    NCE_FFLAGS - Fortran kapcsolók
+
NCE_FFLAGS - Fortran kapcsolók
    NCE_CFLAGS - C kapcsolók
+
NCE_CFLAGS - C kapcsolók
    NCE_LDFLAGS - könyvtárak C és Fortran
+
NCE_LDFLAGS - könyvtárak C és Fortran
</code>
+
</pre>
 
Az NCE környezeti változó listáját az <code>nce</code> paranccsal kérhetjük le.
 
Az NCE környezeti változó listáját az <code>nce</code> paranccsal kérhetjük le.
  
 
A budapesti gépen elérhető a PRACE környezet is, amely tartalmaz egy ajánlott kapcsoló és könyvtár összeállítást tartalmaz. A PRACE környezet betöltése:
 
A budapesti gépen elérhető a PRACE környezet is, amely tartalmaz egy ajánlott kapcsoló és könyvtár összeállítást tartalmaz. A PRACE környezet betöltése:
 
<code>
 
<code>
    module load prace
+
module load prace
 
</code>
 
</code>
 
A PRACE környezet az AMD ACML matematikai könyvtárakat használja, amennyiben az Intel MKL-re van szükségünk, akkor a PRACE környezetet nem kell betölteni. A megfelelő MKL kapcsolókat az [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Intel Link Advisor] szerint kell beállítani, pl.:
 
A PRACE környezet az AMD ACML matematikai könyvtárakat használja, amennyiben az Intel MKL-re van szükségünk, akkor a PRACE környezetet nem kell betölteni. A megfelelő MKL kapcsolókat az [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Intel Link Advisor] szerint kell beállítani, pl.:
<code>
+
<pre>
    FFLAGS=-openmp -I$(MKLROOT)/include
+
FFLAGS=-openmp -I$(MKLROOT)/include
    CFLAGS=-openmp -I$(MKLROOT)/include
+
CFLAGS=-openmp -I$(MKLROOT)/include
    LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \
+
LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \
      -Wl,--start-group \
+
  -Wl,--start-group \
      $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
+
  $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
      $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \
+
  $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \
      $(MKLROOT)/lib/intel64/libmkl_core.a \
+
  $(MKLROOT)/lib/intel64/libmkl_core.a \
      $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a \
+
  $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a \
      -Wl,--end-group -lpthread -lm
+
  -Wl,--end-group -lpthread -lm
</code>
+
</pre>
  
 
=== Párhuzamos környezet ===
 
=== Párhuzamos környezet ===
 
==== OpenMP ====
 
==== OpenMP ====
Az OpenMP paraméterket környezeti változókon keresztül kell beállítani. Az <code>openmp</code> párhuzamos SGE környezet az OpenMP szálak számát beállítja. Tovább környezeti változókat az [https://computing.llnl.gov/tutorials/openMP/#EnvironmentVariables LLNL OpenMP oldalán] találtok.
+
Az OpenMP paraméterket környezeti változókon keresztül kell beállítani. Az <code>openmp</code> párhuzamos SLURM környezet az OpenMP szálak számát beállítja. Tovább környezeti változókat az [https://computing.llnl.gov/tutorials/openMP/#EnvironmentVariables LLNL OpenMP oldalán] találtok.
  
 
==== MPI ====
 
==== MPI ====
 
Az alapértelmezett MPI könyvtár az Open MPI. Ajánlott optimalizációs kapcsolók (CPU binding):
 
Az alapértelmezett MPI könyvtár az Open MPI. Ajánlott optimalizációs kapcsolók (CPU binding):
 
<code>
 
<code>
 
+
--bind-to-core --bycore
    --bind-to-core --bycore
 
 
</code>
 
</code>
  
== SGI UV Pécs ==
+
== SGI ICE Debrecen ==
A pécsi gépen csak SMP vagy MPI programok futtatása engedélyezett. Minimálisan 12 szálat lehet lefoglalni. A foglalás alapegysége a numa node, ami 2x6 processzort és 60GB memóriát tartalmaz. Érdemes 12 többszörösével számolni a lefoglalalndó szálakat, pl.: 12, 24, 48, 96... Ha 2 hatványaira van szükségünk, akkor az SGE foglalást a legközelebbi 12-es szálszámmal kérjük, és az MPI-t vagy az OMP paraméterezzük 2^n szerint.
+
Az alapértelmezett MPI könyvtár az SGI MPT. A felhasználói programokat ehhez a könyvtárhoz érdemes fordítani. Ajánlott fordítás opciók:
 
 
Az alapértelmezett MPI könyvtár az SGI MPT. Ez a könyvtár biztosítja a legjobb teljesítményt az UV gépen. A felhasználói programokat ehhez a könyvtárhoz kell fordítani. Fordításhoz az Intel Link Advisor-t érdemes használni. Az ajánlott fordítás opciók:
 
  
 
=== MPI fordítási opciók ===
 
=== MPI fordítási opciók ===
176. sor: 750. sor:
 
</code>
 
</code>
  
=== MPI SGE job szkript példa ===
+
== ARC köztesréteg ==
<code>
+
Ez a NorduGrid közösség által fejlesztett Grid köztesréteg. Részletes dokumentációkért [http://www.nordugrid.org/documents ezt a weboldalt] érdemes felkeresni.
    #!/bin/bash
+
 
    ### SGE
+
=== Miért is használjuk?! ===
    #$ -N MPITEST
+
* Jobb terhelés elosztást tesz lehetővé a szuperszámítógépek között
    # 12 órás walltime limit
+
* A jobok azon a gépen fognak elindulni, ami a legmegfelelőbb a számára
    #$ -l h_rt=12:00:00
+
* Egy nagy egységgé kapcsolja össze a szuperszámítógépeket
    # 384 szál lefoglalása az
+
* Szabványos webservice interfésszel ([https://www.ogf.org/documents/GFD.108.pdf OGSA-BES], [https://www.ogf.org/documents/GFD.114.pdf HPC Basic Profile]) rendelkezik. Ezáltal könnyen lehet integrálni más rendszerekkel
    # mpi párhuzamos környezetben
+
* Nagyon sok operációs rendszert támogat
    #$ -pe mpi 384
+
* A saját számítógépünkről tudjuk kezelni a szuperszámítógépes jobokat
    # az uv.q sor használatával
+
* A [http://pulse.fgi.csc.fi/gridrer/htdocs/index.phtml futás idejű környezetek használatával] a megfelelő módon lefordított alkalmazást tudjuk használni és nem kell észben tartani, hogy éppen melyik szuperszámítógépen van telepítve a program
    #$ -q uv.q
+
 
    # a standard kimenet ide íródik
+
=== Grid tanúsítvány igénylése ===
    #$ -o StdOut
+
Első lépésként szükségünk lesz egy '''Grides X.509 tanúsítványra''', amivel az ARC klienseket használni tudjuk. A [https://portal.hpc.niif.hu HPC portálon] keresztül lehetőségünk van igényelni egy 2 hétig érvényes SLCS tanúsítványt. A személyes adatok menüpontra kell kattintani és az oldal végén lesz az igénylő felület. '''Fontos: legalább egy HPC projekt tagsággal rendelkeznünk kell a HPC portálon. ''' Itt található az a letölthető UNIX script is, ami minden szükséges beállítást elvégez a számunkra:
    # a hibakimenet ide íródik
+
 
    #$ -e StdErr
+
<code>         
    # a jelenlegi shell környezet exportálódik
+
$ chmod +x slcs_unix_install.sh
    #$ -V
+
$ ./slcs_unix_install.sh
    ### NUMA
+
$HOME/.globus/usercert.pem and $HOME/.globus/userkey.pem installed
    # az StdOut-ba írja a numa node információt
+
NIIF HPC SLCS Root CA installed: $HOME/.globus/certificates/SLCSCA.pem
    numactl --show
+
Default ARC client configuration created: $HOME/.arc/client.conf
    ### OMP
+
NIIF Root CA 2 installed: $HOME/.globus/certificates/NIIFCA.pem
    # OMP beállítások
+
$  
    export OMP_NUM_THREADS=1
 
    ### MPI
 
    # MPI beállítások
 
    export MPI_MEMMAP_OFF=1
 
    # saját szkript vagy az mpirun közvetlen meghívás
 
    # 384 MPI szál fog elindulni
 
    mpirun $NSLOTS dplace -s 1 <APP>
 
 
</code>
 
</code>
Az `<APP>` helyére kell írni a futtatandó programot és paramétereit. A `dplace` egy SGI előtétprogram, ami az MPI szálak ideális CPU elosztását végzi, megadása javasolt, mert általában javítja a teljesítményt.
 
  
=== OMP SGE job szkript példa ===
+
 
 +
Az SLCS másik nagy előnye az egyszerűsített igénylésen kívül az, hogy 1 órán belül az összes szuperszámítógépen automatikusan engedélyezve lesz. Viszont ha nem szeretnénk minden második héten új X.509-es tanúsítványt igényelni, akkor lehetőség van arra is, hogy 1 évig érvényes [https://www.igtf.net IGTF] tanúsítványt igényeljünk a KIFÜ-től [http://www.ca.niif.hu/hu/igenyles ezen az oldal keresztül]. Ebben az esetben a [mailto:hpc-support@niif.hu] címre kell elküldenünk az IGTF-es tanúsítványunk publikus részét és meg kell adnunk, hogy melyik témaszámunkhoz legyen majd rendelve a szuperszámítógépeken.
 +
 
 +
=== ARC kliensek használatba vétele ===
 +
==== Telepítés ====
 +
A csomagok telepítéséhez az itt leírt repo-kat lehet használni: http://download.nordugrid.org/repos-15.03.html
 +
'''Fontos''': 5.0-ás ARC verziót telepítsük.
 +
 
 +
Debian alapú rendszerek esetén: 
 +
  apt-get install nordugrid-arc-client 
 +
 
 +
Redhat alapú rendszerek esetén: 
 +
  yum install nordugrid-arc-client
 +
 
 +
OSX csomag telepítése [http://brew.sh brew] segítségével:
 +
  brew install nordugrid-arc
 +
 
 +
Ha nem találtunk megfelelő csomagot, akkor [http://download.nordugrid.org/packages/nordugrid-arc/releases/5.0.0/src/nordugrid-arc-5.0.0.tar.gz innen] le tudjuk tölteni a forráskódját és le tudjuk fordítani.
 +
 
 +
==== Konfigurálás ====
 +
$HOME/.arc/client.conf:
 
<code>
 
<code>
    #!/bin/bash
+
[common]
    ### SGE
+
           
    #$ -N OMPTEST
+
[computing/budapest]
    # 12 órás walltime limit
+
url=https://login.budapest.hpc.niif.hu:60000/arex
    #$ -l h_rt=12:00:00
+
infointerface=org.nordugrid.wsrfglue2
    # 192 szál lefoglalása az
+
submissioninterface=org.ogf.bes
    # openmp párhuzamos környezetben
+
default=yes
    #$ -pe openmp 192
+
    # az uv.q sor használatával
+
[computing/szeged]
    #$ -q uv.q
+
url=https://login.szeged.hpc.niif.hu:60000/arex
    # a standard kimenet ide íródik
+
infointerface=org.nordugrid.wsrfglue2
    #$ -o StdOut
+
submissioninterface=org.ogf.bes
    # a hibakimenet ide íródik
+
default=yes
    #$ -e StdErr
+
    # a jelenlegi shell környezet exportálódik
+
[computing/debrecen]
    #$ -V
+
url=https://login.debrecen.hpc.niif.hu:60000/arex
    ### NUMA
+
infointerface=org.nordugrid.wsrfglue2
    # az StdOut-ba írja a numa node információt
+
submissioninterface=org.ogf.bes
    numactl --show
+
default=yes
    ### OMP
+
    # OMP beállítások
+
[computing/pecs]
    export OMP_NUM_THREADS=$NSLOTS
+
url=https://login.pecs.hpc.niif.hu:60000/arex
    omplace <APP>
+
infointerface=org.nordugrid.wsrfglue2
 +
submissioninterface=org.ogf.bes
 +
default=yes
 +
 
 +
# FastestQueue – ranks targets according to their queue length
 +
brokername=FastestQueue
 +
 +
# Random – ranks targets randomly
 +
#brokername=Random
 +
 +
# Data – ranks targets according the amount of megabytes of the requested input files that are already
 +
# in the computing resources cache.  
 +
#brokername=Data
 +
 +
# PythonBroker:<module>.<class>[:arguments] – ranks targets using any user-supplied custom
 +
# Python broker module, optionally with broker arguments. Such module can reside anywhere in
 +
# user’s PYTHONPATH
 +
#brokername=PythonBroker
 +
 +
[alias]
 +
pecs=computing:ARC1:https://login.pecs.hpc.niif.hu:60000/arex
 +
szeged=computing:ARC1:https://login.szeged.hpc.niif.hu:60000/arex
 +
debrecen=computing:ARC1:https://login.debrecen.hpc.niif.hu:60000/arex
 +
budapest=computing:ARC1:https://login.budapest.hpc.niif.hu:60000/arex
 +
hp=budapest szeged
 +
sgi=pecs debrecen 
 
</code>
 
</code>
Az `omplace` egy SGI előtétprogram, ami az MPI szálak ideális CPU elosztását végzi, megadása javasolt, mert általában javítja a teljesítményt.
 
  
=== Monitorozás ===
+
Érdemes beállítani, hogy alapértelmezés szerint a FastestQueue brókert használja, ezáltal mindig arra a szuperszámítógépre fogja küldeni a jobokat, ahol a legkevesebb a várakozó jobok száma. A konfigurációs fájl részletes dokumentációját és az ARC kliensek leírásait [http://www.nordugrid.org/documents/arc-ui.pdf itt lehet] megnézni.
A jobhoz rendelt cpusetet (CPU és memória szelet) a következő parancsokkal lehet megfigyelni. A grafikonokhoz <code>ssh -X</code> átirányítás szükséges. A processzorterhelés grafikonján négy adat szerepel: <span style="color:#00FF00">zöld - hasznos, felhasználói terhelés</span>, <span style="color:#FFFF00;background-color:#DDDDDD;">sárga - üresjárat</span>, <span style="color:#0000FF">kék</span> és <span style="color:#FF0000">piros - káros rendszerterhelés</span>. Egy HPC program akkor fut "jól", ha a zöld, felhasználói terhelés maximális, a többi pedig minimális. Ideális esetben a grafikonon egyenes zöld vonalak láthatók. Nem egyenes ("ugráló") grafikon a terhelés nem egyenletes elosztására utal, ezen a CPU binding (dplace, omplace parancsok használata) általában segít.
+
 
 +
=== Grid proxy készítése ===
 +
 
 +
Ha már telepítettük a tanúsítványunkat és az ARC klienseket akkor a következő lépés az, hogy egy proxy tanúsítványt kell készítenünk, ami alapértelmezés szerint 12 óráig érvényes.
  
Processzor terhelés numa node-onként (6 core), az ideális terhelés 6-nál (600%) van:
 
 
<code>
 
<code>
    sgemon -g -n <JOBID>
+
$ arcproxy
 +
Enter pass phrase for private key:
 +
Your identity: /C=HU/O=NIIF/OU=SLCS/L=hpcteszt/CN=joe
 +
Proxy generation succeeded
 +
Your proxy is valid until: 2015-03-30 05:01:09
 +
$   
 
</code>
 
</code>
 +
         
 +
Tesztelési célból ezeket a parancsokat érdemes kipróbálni:
  
Processzor terhelés CPU-nként, az ideális terhelés 1-nél (100%) van:
 
 
<code>
 
<code>
    sgemon -g -n <JOBID>
+
$ arcinfo -c szeged 
 +
$ arcinfo -c hp -l
 +
$ arcinfo
 
</code>
 
</code>
  
Memória terhelés numa node-onként, a maximális terhelés 30 GB-nál van, ami core-onként 5GB-nak felel meg:
+
=== Grid job készítése ===
 +
A jobok leírására több formátumot is használhatunk: [https://www.ogf.org/documents/GFD.56.pdf JSDL], vagy [http://www.nordugrid.org/documents/xrsl.pdf xRSL]. Így adjuk meg, hogy a jobunknak mire van szüksége. Itt egy példa job:
 +
 
 
<code>
 
<code>
    sgemmon -g -m <JOBID>
+
         
 +
$ cat job.xrsl
 +
&
 +
(executable="matlab.sh")
 +
(arguments="matlab.m")
 +
(stdout="stdout.txt")
 +
(stderr="stderr.txt")
 +
(jobname="Matlab test")
 +
(inputFiles=
 +
("matlab.m" "")
 +
)
 +
(memory>="1000")
 +
(gmlog="gm.log")
 +
(wallTime="240")
 +
(runTimeEnvironment="APPS/MATH/MATLAB-7.13") 
 
</code>
 
</code>
  
 +
<code>
 +
$ cat matlab.sh
 +
#!/bin/bash
 +
echo
 +
echo "Compute node: " `/bin/hostname -f`
 +
echo
 +
matlab -nodisplay < $1
 +
</code>
  
==== Tesztelés Linpack-kal ====
 
A monitorozást egy Linpack teszt segítségével érdemes kipróbálni. A következő parancsokkal előkészítjünk egy Linpack teszt futást a <code>test.q</code> sorban:
 
 
<code>
 
<code>
    cd $HOME
+
$ cat matlab.m
    mkdir linpack
+
2+3
    module load hpl/2.0.mpt
 
    cd linpack
 
    cp $LINPACK_HPL_HOME/bin/{xhpl.sh,HPL.dat} .
 
    qsub xhpl.sh
 
 
</code>
 
</code>
A visszakapott jobid-vel hívjuk meg a monitor parancsot:
+
 
 +
Ennél a példánál a '''APPS/MATH/MATLAB-7.13''' futásidejű környezetet kértük, ezáltal ez a job csak azon a szuperszámítógépen fog elindulni, ahol ez telepítve van. Továbbá azt kértük még, hogy 240 percig futhasson és legalább 1000 MByte memória rendelkezésre álljon.
 +
 
 +
Az '''arcinfo -l''' paranccsal tudjuk megnézni, hogy a szuperszámítógépeken milyen futás idejű környezetek (runtime environment-ek) vannak telepítve. Ha szeretnénk egy új környezet beállíttatni, akkor [mailto:hpc-support@niif.hu ide] kell levelet küldeni.
 +
 
 +
==== OpenMP példa ====
 +
 
 +
Job elkészítése:
 +
<code>       
 +
$ cat job-openmp.xrsl
 +
&
 +
(executable="omp_mm")
 +
(stdout="stdout.txt")
 +
(stderr="stderr.txt")
 +
(jobname="OpenMP test")
 +
(queue="test")
 +
(executables="omp_mm")
 +
(count="10")
 +
(countpernode="10")
 +
(environment=("OMP_NUM_THREADS" "10"))
 +
(queue="test")
 +
(inputFiles=
 +
    ("omp_mm" "")
 +
)
 +
(memory>="2600")
 +
(gmlog="gm.log")
 +
(wallTime="20")
 +
 
 +
Job elküldése:
 +
 
 +
$ arcsub job-openmp.xrsl
 +
Job submitted with jobid: https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
 +
 
 +
Job állapotának a lekérdezése:
 +
 
 +
$ arcstat https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
 +
Job: https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
 +
  Name: OpenMP test
 +
  State: Finished
 +
  Exit Code: 0
 +
 +
Status of 1 jobs was queried, 1 jobs returned information
 +
 
 +
Job letöltése:
 +
 
 +
$ arcget https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
 +
Results stored at: cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
 +
Jobs processed: 1, successfully retrieved: 1, successfully cleaned: 1
 +
zion:~ joe $ cd cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
 +
zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $ ls -l
 +
total 16
 +
drwx------  12 joe  staff  408 Mar 29 21:24 gm.log
 +
-rw-------  1 joe  staff    0 Mar 29 21:24 stderr.txt
 +
-rw-------   1 joe  staff  6362 Mar 29 21:24 stdout.txt
 +
zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $
 +
 
 +
Adatok ellenőrzése:
 +
 
 +
zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $ head stdout.txt
 +
Starting matrix multiple example with 10 threads
 +
Initializing matrices...
 +
Thread 0 starting matrix multiply...
 +
Thread=0 did row=0
 +
Thread 9 starting matrix multiply...
 +
Thread 6 starting matrix multiply...
 +
Thread=0 did row=1
 +
Thread 5 starting matrix multiply...
 +
Thread=5 did row=50
 +
Thread=5 did row=51
 +
zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe$         
 +
</code>
 +
 
 +
==== MPI példa ====
 +
 
 
<code>
 
<code>
    sgemon -g -n <JOBID>
+
$ cat job-mpi.xrsl
    sgemon -g -m <JOBID>
+
&
 +
(executable="mpi.sh")
 +
(stdout="stdout.txt")
 +
(stderr="stderr.txt")
 +
(jobname="MPI test")
 +
(executables="connectivity" "mpi.sh")
 +
(count="10")
 +
(inputFiles=
 +
    ("connectivity" "")
 +
    ("mpi.sh" "")
 +
)
 +
(memory>="2600")
 +
(gmlog="gm.log")
 +
(wallTime="20")
 +
(runTimeEnvironment>=ENV/GCC/MPI/OPENMPI-1.4.3) 
 +
 
 +
$ cat mpi.sh
 +
#!/bin/bash
 +
mpirun -np 10 ./connectivity -
 
</code>
 
</code>
A képen látható ábráknak megfelelő terhelési grafikonokat kell kapnunk. A grafikonok jellege más HPC alkalmazások esetén is ilyennek kell legyen ("egyenes" zöld vonal).
 
[[File:Linpack_cpu.jpg|frame|left|320px|Linpack teszt processzorterhelés]]
 
[[File:Linpack_mem.jpg|frame|left|320px|Linpack teszt memóriaterhelés]]
 
<br />
 
 
== GY.I.K ==
 
  
1. Ki használhatja a szuperszámítógépet?
+
==== Grafikus felületű ARC kliens ====
A szuperszámítógép-rendszert felhasználói a magyar akadémiai körből, azon belül is az NIIF tagintézmények köréből kerülhetnek ki. A szuperszámítógépek tényleges felhasználói ezen intézmények munkatársai ill. hallgatói, valamint - indokolt esetben - egy NIIF tagintézmény és egy magyar vagy külföldi nem NIIF tagintézmény közötti tudományos kooperáció esetén a nem NIIF tagintézmény munkatársai lehetnek. Speciális esetben, egyéb indokokra való tekintettel (pl. nagy jelentőségű, az ország számára kiemelten fontos kutatás/fejlesztés/alkalmazás stb.) a fenti szabály alól az NIIF Program vezetése egyedi elbírálás alapján felmentést adhat.
+
Parancssoros klienseken kívül használni lehet még grafikus klienseket is. [http://sourceforge.net/projects/arc-gui-clients/?source=directory Innen tudják] letölteni őket.
2. Mire használható a szuperszámítógép-rendszer?
 
A szuperszámítógép üzemeltetésének célja a magyar kutatás és felsőoktatás nagysebességű ill. kapacitású számítási igényeinek kiszolgálása. A gépek tehát felhasználhatók az alkalmazására jogosult intézmények bármelyikében folyó olyan kutatási és/vagy oktatási célra, amelyhez ilyen teljesítményű számítástechnikai kapacitás szükséges. Elsősorban az extrém számítási mennyiséget vagy sebességet igénylő vagy igen nagy memóriaigényű alkalmazások kiszolgálása a cél.
 
A szuperszámítógépek nem használhatók a fentiektől eltérő célokra (pl. profitérdekelt tevékenység keretében folyó fejlesztésekhez, alkalmazásokhoz, vagy más, hagyományos eszközökkel is kielégítően megoldható feladatokhoz, stb.), vagy hagyományos értelemben vett hálózati szolgáltatások (pl. web-, ftp-, adatbázis- vagy file szerver) üzemeltetésére sem.
 
3. Hogyan lehet a szuperszámítógépekhez hozzáférni?
 
A szuperszámítógép-rendszer mindegyik alrendszere az NIIF központban, illetve NIIF regionális központokban üzemelnek, ott ahol a magyar akadémiai Internet gerinchálózat (HBONE+) nagysebességű vonalai összefutnak. Az alrendszerek többször 10GB/s sebességű, dedikált lambda-kapcsolatokon keresztül kapcsolódnak egymáshoz, illetve a hálózathoz. Igénybevételük távolról, a hálózaton keresztül lehetséges, tetszőleges kliens számítógépről, alfanumerikus vagy grafikus terminál, ill. terminál emuláció valamint biztonságos kapcsolatot lehetővé tevő protokollok (ssh, scp), köztesréteg felhasználásával.
 
A kitűnő hálózati kapcsolódás biztosítja, hogy a rendszert a gerinchálózat bármelyik pontjáról nagy sebességgel el lehet érni, és így még nagy mennyiségű adat mozgatása sem jelent problémát.
 
A szuperszámítógép-rendszerhez való hozzáféréshez témaszám(ok)ra van szükség, amit az üzemeltetőtől kell igényelni. A témaszám igényléshez egy kérdőívet kell kitölteni, amelyen megadott információk alapján dönt az NIIF Intézet az igénylés jogosságáról. Szükség esetén az NIIFI konzultálhat is az igénylővel mielőtt döntést hoz. A témaszám személyre szóló és át nem ruházható. A témaszám átvételével a felhasználó deklarálja, hogy megismerte, és magára nézve kötelezőnek tartja a szuperszámítógép használatára vonatkozó szabályokat.
 
4. Melyek a felhasználás feltételei?
 
A szuperszámítógépeket csak érvényes témaszám birtokában, a témaszám igénylésekor megjelölt feladatokra lehet használni a kapott kvóták keretein belül.
 
A szuperszámítógépek felhasználásával elért tudományos eredmények, tapasztalatok hazai és nemzetközi publikációiban meg kell említeni az NIIF infrastruktúra alkalmazásának tényét.
 
A szuperszámítógépeket felhasználó projektek státuszáról, előrehaladásáról, elért eredményeiről évente legalább egyszer rövid összegzést kell küldeni az NIIF Intézetnek.
 
5. Hogyan kerülnek elosztásra az erőforrások?
 
A szuperszámítógép erőforrásai (gépidő, processzorszám, memória, háttértár) korlátozottak. Az alapvető cél az, hogy mindenki hozzájusson a számára szükséges kapacitáshoz. Amennyiben egy adott pillanatban az igények meghaladják a rendelkezésre álló kapacitást, úgy a felhasználható kvóták, és az egyes projektekhez rendelt prioritások alapján osztjuk fel az erőforrásokat. A szuperszámítógépen a CPU igényes jobok futtatása helyi ütemező és erőforrás elosztó rendszeren, illetve grid erőforrás brókeren keresztül lehetséges.
 
6. Milyen alkalmazások, felhasználói szoftverek ill. fejlesztő eszközök állnak rendelkezésre?
 
A szuperszámítógépeken elérhetők az elterjedt számítógép programozási nyelvek fordítóprogramjai, könyvtárai ill. egyéb fejlesztőeszközei (pl. C, C++, Fortran), a párhuzamos alkalmazások futtatásához szükséges különféle szoftver környezetek (pl. PVM, MPI, OpenMP), egyéb, Linux környezetben használható HPC (High Performance Computing) eszközök, optimalizált párhuzamos matematikai könyvtárak, valamint különféle célalkalmazások.
 
7. Milyen felhasználói támogatás/segítség vehető igénybe?
 
A szuperszámítógépek üzemeltetői helpdesk szolgáltatás keretében a gép felhasználói számára szakmai segítséggel, konzultációval, tanácsadással szolgálnak. Szervezünk továbbá a szuperszámítógéppel és felhasználásával kapcsolatos tanfolyamokat, workshopokat és szemináriumokat is. A projekt weboldalai szintén hasznos információkkal szolgálnak.
 
8. Mennyit kell fizetni a szuperszámítógépek használatáért?
 
A szuperszámítógépek használata ingyenes a jogosult felhasználók számára.
 
  
 
[[Category: HPC]]
 
[[Category: HPC]]
[[Category: HOWTO]]
 

A lap jelenlegi, 2019. október 29., 15:57-kori változata

Tartalomjegyzék

A szuperszámítógépekről

A KIFÜ szuperszámítógép szolgáltatása tudományos számítási feladatok futtatására, valamint tudományos célú adattárolásra szolgál. A jelenleg integrált szuperszámítógép-rendszer komponensei négy helyszínen találhatók:

  • Debreceni Egyetem
  • KIFÜ központ
  • Pécsi Tudományegyetem
  • Szegedi Tudományegyetem

A tudományos számítási feladatok különböző típusainak minél szélesebb körű lefedettsége érdekében az egyes helyszíneken különböző felépítésű gépek találhatók: egy helyszínen ccNUMA, három helyszínen pedig "fat-node" fürtözött megoldás. Az alrendszereket a KIFÜ nagy sávszélességű, alacsony késleltetésű HBONE+ adathálózatán keresztül, ARC grid köztesréteg, valamint harmonizált felhasználói azonosítás segítségével integráljuk egységes elvek mentén elérhető számítási egységgé. Az erőforrás jelenleg Magyarország legnagyobb tudományos számítás céljára felhasználható erőforrása, amely összesen 50 billió lebegőpontos művelet elvégzését teszi lehetővé másodpercenként. A szuperszámítógép-rendszert a KIFÜ üzemelteti és fejleszti. A rendszerhez regisztrációt követően, minden olyan személy vagy kutatócsoport hozzáférhet, amely tagintézményi szerződéses kapcsolatban áll a KIFÜ-vel. A gépen megtalálhatók és futtathatók a legkorszerűbb fejlesztőeszközök és tudományos számításra szolgáló alkalmazások, valamint, a KIFÜ adatközpontban elhelyezett alrendszer kivételével, valamennyi alrendszer kiegészül a számítási feladatok eredményeit megjelenítő vizualizációs eszközökkel.

Köszönetnyilvánítás

Tudományos publikációkban a következő köszönetnyilvánítást javasoljuk:

We acknowledge KIFÜ for awarding us access to resource based in Hungary.

Where technical support has been received the following additional text should also be used:

The support of [name of person/people] from KIFÜ, Hungary to the technical work is gratefully acknowledged.

Hozzáférés a szuperszámítógépekhez

A témában több videót is készítettünk, amelyek bemutatják a hozzáférés menetét (kulcsgenerálás és hozzáférés) és a filefeltöltés gyakorlati tutoriál keretében Windows operációs rendszeren.

A fenti videók tartalmazhatnak elavult információkat pl. az ütemezővel kapcsolatban, a jelenlegi ütemező használatához külön videóanyagot ajánljunk.


A szuperszámítógépekhez kulcsos SSH használatával lehet hozzáférni. Ajánlott UTF-8 képes terminált használ az ékezetes betűk megjeelenítése érdekében. PUTTY terminál esetén a Window/Translation beállítás alatt a character set-et kell UTF-8-ra állítani.

SSH belépés

ssh USER@login.SITE.hpc.niif.hu ahol a USER a felhasználónév, a SITE pedig a belépéshez használt szupergép neve: budapest, debrecen, pecs, szeged. Nem alapértelmezett kulcs használata a -i KULCS kapcsolóval lehetséges.

Belépés a szegedi gépre alice felhasználóként, az SSH privát kulcsot a keys/szeged fájlból olvasva: ssh -i keys/szeged alice@login.szeged.hpc.niif.hu

Fájl másolás SCP segítségével

Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:

scp USER@login.SITE.hpc.niif.hu:FILE FILE
scp FILE USER@login.SITE.hpc.niif.hu:FILE

A szegedi gép HOME könyvtárában lévő stuff.tgz fájl letöltése a helyi gép aktuális könyvtárába: scp bob@login.szeged.hpc.niif.hu:stuff.tgz .

Adatátvitel rsync segítségével

Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához az SSH-t és az rsync-et együtt kell használni. Fel- és leszinkronizálás:

rsync -a -e ssh DIRECTORY USER@login.budapest.hpc.niif.hu:/home/USER
rsync -a -e ssh USER@login.budapest.hpc.niif.hu:/home/USER/DIRECTORY

A budapesti gépre szinkronizálom a helyi src könyvtár tartalmát (nem az alapértelmezett kulcsot használva) és a másolás folyamatát nyomonkövetem: rsync -a -h --progress -e "ssh -i keys/budapest" ./src alice@login.budapest.hpc.niif.hu:/home/alice

Felhasználói felület

A szupergépek elsődleges felhasználói felülete a Bash shell. Az automatikusan betöltődő NIIF Common Environment (NCE) a PS1 promptot a következőképp állítja be:

              rövid CWD
                   |
   BUDAPEST[login] ~ (0)$
       |      |       |
  HPC állomás |       |
        rövid gép név |
              előző parancs exit kódja

Modul környezet

A szupergépekre telepített alkalmazásokat az ún. modul rendszer segítségével lehet használ. A modul rendszer lehetővé teszi egy adott alkalmazás több verziójának használatát is. Feladata a shell környezeti változók helyes beállítása. Normál felhasználók számára az alapértelmezett modul környezet automatikusan betöltődik. Az elérhető modulok listáját a következő paranccsal kapjuk meg: module avail a már betöltött modulok listáját: module list Alkalmazást a következő paranccsal tölthetünk be: module load APPS ahol az APPS a betöltendő modulok space-szel elválasztott listája.

A NIIF által beállított környezeti változókat nce parancs listázza ki.

Példa

A Maple, netcfd és az R csomagok betöltése: module load maple netcdf R

Adatok megosztása projekt tagok számára

Fájlok ill. könyvtárak megosztásához használjuk a [1](fájlrendszer ACL-eket). Az ACL-ekkel a hagyományos unix engedélyeken felül finoman szabályozhatjuk a fájlok és könyvtárak hozzáférési engedélyeit. Kérjük, hogy fokozottan figyeljenek arra, hogy a teljes $HOME könyvtárra sose adjanak "rwx" jogot más felhasználóknak, mivel pl. a .ssh mappa nagyon érzékeny a jogosultságokra, és a rendszer nem fogja beengedni legközelebb a felhasználót! A következő példában a $HOME/Shared könyvtárat osztjuk egy munkatárs számára:

# a home könyvtár beállítása
# user1 user számára belépsi engedély: u:user1:x 
$ setfacl -m u:user1:x $HOME
$ getfacl $HOME
# file: user2/user2
# owner: user2
# group: user2
user::rwx
user:user1:--x
group::r-x
mask::r-x
other::---
# Shared könyvtár megosztása
# user1 számára minden unix jog
$ cd
$ mkdir Shared
$ setfacl -m u:user1:rwx $HOME/Shared
$ getfacl Shared
# file: Shared
# owner: user2
# group: user2
user::rwx
user:user1:rwx
group::rwx
mask::rwx
other::r-x

Python csomag telepítése a saját home könyvtárunkba

Itt egy példa arra, hogy hogyan tudjuk feltelepíteni a mercurial python csomagot.

$ module load python 
$ pip install --user mercurial

Közös home könyvtár használata

A szuperszámítógépek login és vserver node-jai osztott home könyvtárral vannak összekötve. Fontos, hogy az osztott könyvtárat a számítási node-ok nem érik el, ezért az osztott home-ot csak tárolásra ill. megosztásra lehet használni. Az osztott terület Debrecenben van, ezért ott a leggyorsabb. A másik három helyen lassabb a hozzáférés a nagyobb távolság miatt. A programok kimenetét továbbra is a lokális scratch vagy home könyvtárba kell írni. Amelyik login node-on használni szeretnénk az osztott home könyvtárat, ott adjuk ki a következő parancsokat:

cd; mkdir shared; ln -s /mnt/fhgfs/home/$USER shared/$USER 

Ezek után a $HOME/shared/$USER könyvtárba másoljuk a megosztott fájlokat. Ez a könyvtár a következő környezeti változóba is exportálódik:

$NCE_SHARED 

Biztonsági mentés, adatmegosztás

A következő példa mentést végez a $HOME/data könyvtárról:

rsync -avuP $HOME/data $NCE_SHARED

Törölje a fájlokat a mentésben is:

rsync -avuP --delete $HOME/data $NCE_SHARED

Alkalmazások lefordítása

Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: hpc-forum kukac listserv.niif.hu. Feliratkozni itt lehet erre a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. A KIFÜ HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a hpc-support kukac niif.hu címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.

SLURM ütemező használata

Weboldal:

http://slurm.schedmd.com

A SLURM ütemező bemutatása:

A szupergépeken CPU óra (gépidő) alapú ütemezés működik. Ez azt jelenti, hogy a fogyasztási időtartamra (hónap) az elérhető maximális gépidő fel van osztva a felhasználók között. Minden UNIX felhasználó egy vagy több számlához (Account) tartozhat. Az ütemező számla egy adott HPC-s projekthez tartozik, hasonló a UNIX csoporthoz. Szupergépes feladatokat csak az egyes számlák terhére lehet indítani. A CPU óra az elhasznált idő (Walltime) és az igényelt processzorok számának szorzata. Például a budapesti gépen 2 db node (48 processzor mag) foglalása 30 percre 48 * 30 = 1440 CPU perc = 24 CPU óra. A CPU órát az ütemező a futás kezdetétől a befejezésig méri.

Rendkívül fontos arról meggyőződni, hogy a futtatandó alkalmazás rendesen kihasználja-e a szupergépet. Egy üres vagy rosszul futó job hamar elhasználja a rendelkezésre álló gépidőt. Elfogyasztott gépidő esetén új jobokat már nem lehet indítani, és meg kell várni a számlázási időszak végét. A gépidő limitek (Account Limit) minden hónap elején jóváíródnak.

Számláink állapotáról a következő paranccsal kapunk információt: sbalance

A parancs a következő táblázatot jeleníti meg. A felhasználó két számlához (foobar,barfoo) is hozzáfér, futatthat a számla terhére. Saját magát megcsillagozva látja a listában. Bobbal mindkét számlán (Account oszlop) Alice is osztozik. A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyeik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még alérhető (Available) gépidőről ad tájékoztatást.

Scheduler Account Balance
---------- ----------- + ---------------- ----------- + ------------- -----------
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)
---------- ----------- + ---------------- ----------- + ------------- -----------
alice                0 |           foobar           0 |             0           0
bob *                0 |           foobar           0 |             0           0

bob *                7 |           barfoo           7 |         1,000         993
alice                0 |           barfoo           7 |         1,000         993

A gépidő becslése

Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható: sestimate -N NODES -t WALLTIME ahol a NODES a lefoglalni kívánt node-ok száma, a WALLTIME pedig a futás maximális ideje.

Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az sacct paranccsal is ellenőrizni.

Alice 2 nap 10 órára és 2 node-ra szeretne foglalást kérni, megnézi van-e elég gépidő a számláján:

sestimate -N 2 -t 2-10:00:00

Estimated CPU hours: 2784

Sajnos ebben a hónapban erre már nem telik.

Állapotinformációk

Az ütemezőben lévő jobokról az squeue, a klaszter általános állapotáról az sinfo parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői: scontrol show job JOBID

Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni: sacct -l -j JOBID

A felhasznált memóriáról a következő parancs ad tájékoztatást: smemory JOBID

A lemezhasználatról pedig a sdisk JOBID

Slurm figyelmeztető üzenetek

Resources/AssociationResourceLimit - Erőforrásra vár
AssociationJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva
Piority - Alacsony prioritás miatt várakozik

Az utóbbi esetben, csőkkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.

Az ütemezőben 3 feladat van. Az első egy arrayjob, éppen erőforrásra vár (PENDING). A második egy MPI job, ami 4 node-on fut már 25 perce (TIME). A harmadik egy egy node-os OMP futtatás, éppen most indult el. A feladatik nevei (NAME) egyénileg adható meg. Rövid, informatív neveket érdemes adni.

squeue -l

Wed Oct 16 08:30:07 2013              
     JOBID PARTITION     NAME     USER    STATE       TIME TIMELIMIT  NODES NODELIST(REASON)
591_[1-96]    normal    array    alice  PENDING       0:00     30:00      1 (None)
       589    normal      mpi      bob  RUNNING      25:55   2:00:00      4 cn[05-08]
       590    normal      omp    alice  RUNNING       0:25   1:00:00      1 cn09

Ennek a 2 node-os batch jobnak a jellemző memóriaterhelés a következő volt: kb. 10GB virtuális és 6.5GB RSS memóriát használt el node-onként.

smemory 430

 MaxVMSize  MaxVMSizeNode  AveVMSize     MaxRSS MaxRSSNode     AveRSS
---------- -------------- ---------- ---------- ---------- ----------
10271792K           cn06  10271792K   6544524K       cn06   6544524K   
10085152K           cn07  10085152K   6538492K       cn07   6534876K 

CPU felhasználás ellenőrzése

Nagyon fontos meggyőződni arról, hogy az alkalmazás kihasználja-e a rendelkezésre álló gépidőt. Egy futó alkalmazás a következő paranccsal tudunk monitorozni: sjobcheck JOBID

Ez a job 4 node-on fut. A LOAD csoport a gép általános terheléséről ad információt és kb. a core-ok számával egyezik meg. A helyes felhasználásról a CPU csoport ad tájékoztatást. Ideális esetben a User oszlop értékei 90 fölött vannak. Ez alatt valamilyen probléma lépett fel és a futást érdemes megszakítani.

Hostname                     LOAD                       CPU              Gexec  
 CPUs (Procs/Total) [     1,     5, 15min] [  User,  Nice, System, Idle, Wio]
cn08    24 (   25/  529) [ 24.83, 24.84, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF
cn07    24 (   25/  529) [ 24.93, 24.88, 20.98] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF
cn06    24 (   25/  529) [ 25.00, 24.90, 20.97] [  99.9,   0.0,   0.1,   0.0,   0.0] OFF
cn05    24 (   25/  544) [ 25.11, 24.96, 20.97] [  99.8,   0.0,   0.2,   0.0,   0.0] OFF

Licenszek ellenőrzése

Az elérhető és éppen használt licenszekről a következő parancs ad információt: slicenses

Karbantartás ellenőrzése

A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást: sreservations

Összesített felhasználás

Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le: susage

Teljes fogyasztás

Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:

sreport -t Hours Cluster AccountUtilizationByUser Accounts=niif Start=2014-01-01

niif helyett a saját projektünk azonosítóját kell megadni.

Feladatok futtatása

Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a #SBATCH direktívával kell megadni. Az ütemezők összehasonlításáról és a Slurm-ban elérhető direktívákról a következő táblázat ad bővebb tájékoztatást.

Kötelező paraméterek

A következő paramétereket minden esetben meg kell adni:

#!/bin/bash
#SBATCH -A ACCOUNT
#SBATCH --job-name=NAME
#SBATCH --time=TIME

ahol az ACCOUNT a terhelendő számla neve (elérhető számláinkről az sbalance parancs ad felvilágosítást), a NAME a job rövid neve, a TIME pedig a maximális walltime idő (DD-HH:MM:SS). A következő időformátumok használhatók: "minutes", "minutes:seconds", "hours:minutes:seconds", "days-hours", "days-hours:minutes" és "days-hours:minutes:seconds".

A jobok feladását a következő parancs végzi: sbatch jobscript.sh

Sikeres feladás esetén a következő kimenetet kapjuk:

Submitted batch job JOBID

ahol a JOBID a feladat egyedi azonosítószáma.

A feladat leállítását a következő parancs végzi: scancel JOBID

Nem újrainduló jobok

Nem újrainduló jobokhoz a következő direktívát kell használni:

#SBATCH --no-requeue

Feladat sorok

A szupergépeken két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a test sor és a prod sor. Utóbbi az éles számolásokra való, előbbi fejlesztés és tesztelés céljára használható. A teszt sorban összesen 1 node-ot, maximum fél órára lehet lefoglalni. Az alapértelmezett sor a prod. A teszt partíciót a következő direktívával lehet kiválasztani:

#SBATCH --partition=test

A szolgáltatás minősége (QOS)

A szolgáltatást alapértelmezett minősége normal, azaz nem megszakítható a futás.

Magas prioritás

A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.

#SBATCH --qos=fast
Alacsony prioritás

Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.

#SBATCH --qos=lowpri

Memória foglalás

A memória a CPU-hoz hasonlóan korlátozott, foglalható erőforrás. A felhasználás mérése a memória / core alapon történik: 1 core óra, 2600 MB órának felel meg. Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:

#SBATCH --mem-per-cpu=MEMORY

ahol MEMORY MB egységben van megadva. Budapesten és Szegeden a maximális memória/core 2600 MB.

Email értesítés

Levél küldése job állapotának változásakor (elindulás,leállás,hiba):

#SBATCH --mail-type=ALL
#SBATCH --mail-user=EMAIL

ahol az EMAIL az értesítendő emial cím.

Tömbfeladatok (arrayjob)

Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a SLURM_ARRAY_TASK_ID környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. Bővebb ismertető

Alice felhasználó a foobar számla terhére, maximum 24 órára ad fel 96 db soros jobot. A #SBATCH --array=1-96 direktíva jelzi, hogy tömbfeladatról van szó. Az alkalmazást az srun paranccsal kell indítani. Ebben az esetben ez egy shell szkript.

#!/bin/bash
#SBATCH -A foobar
#SBATCH --time=24:00:00
#SBATCH --job-name=array
#SBATCH --array=1-96
srun envtest.sh

Soros (serial) jobok

Több soros job futtatását a tömbfeladatokhoz hasonlóan kell indítani.

A következő példában a test sorban 3 egy szálon dutó programot indítunk el. A programok és az inputok lehetnek különbözőek. Fontos, hogy az utolsó parancsot nem kell a háttérben (&) indítani és a wait-tel kell befejezni a job szkriptet.

#!/bin/bash
#SBATCH --job-name=serial
#SBATCH --time=24:30:00
#SBATCH -n 3
#SBATCH --partition=test
srun -n 1 program input1 &
srun -n 1 program input2 &
srun -n 1 program input3
wait

OpenMPI feladatok

MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (#SBATCH --ntasks-per-node=). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az mpirun paranccsal kell indítani.

Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a slurm.out fájlba irányítja (#SBATCH -o).

#!/bin/bash
#SBATCH -A barfoo
#SBATCH --job-name=mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=24
#SBATCH --time=12:00:00
#SBATCH -o slurm.out
mpirun ./a.out

SGI ccNUMA UV 1000 (Pécs)

A pécsi gépen legalább 6 szálon működő jobok futtatása lehetságes. Az egyetlen elfogadott paraméter a szálak szám (`-n`), amelynek 6 többszörösének kell lenni. Ezen a gépen nincs teszt sor. Kérjük, hogy 48-nál kevesebb szálon futó programokat az UV-n ne futtassanak! Egy szálú ill. array jobok futtatása nem lehetséges.

OMP Példa
#!/bin/bash
#SBATCH -A barfoo
#SBATCH --job-name=omp
#SBATCH -n 48
#SBATCH --time=03:00:00
#SBATCH -o slurm.out
/opt/nce/bin/numainfo
OMP_NUM_THREADS=$SLURM_NTASKS ./a.out
SGI MPT MPI Példa
#!/bin/bash
#SBATCH -A barfoo
#SBATCH --job-name=omp
#SBATCH -n 48
#SBATCH --time=03:00:00
#SBATCH -o slurm.out
/opt/nce/bin/numainfo
mpirun $SLURM_NTASKS ./a.out
Jobok monitorozása

CPU használat:

smonitor -n <JOBID>

Memória használat:

smonitor -m <JOBID>

Ütemezés sor foglaltsága:

sinfo_uv

SGI MPT MPI feladatok (Debrecen)

MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (#SBATCH --ntasks-per-node=). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az mpirun paranccsal kell indítani. Az SGI MPT MPI paraméterezése kicsit más, mint az OpenMPI. Debrecen az SGI MPT az alpértelmezett MPI környezet!

Bob felhasználó a barfoo számla terhére 2 node-ot, 12 órára foglal le egy MPI job számára. Az egyes node-okon 24 MPI szálat fog elindítani. A program stdout kimenetét a slurm.out fájlba irányítja (#SBATCH -o).

#!/bin/bash
#SBATCH -A barfoo
#SBATCH --job-name=mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=12
#SBATCH --time=12:00:00
#SBATCH -o slurm.out
source /opt/nce/bin/machines
export MPI_OPT="${MACHINES} -np ${SLURM_NTASKS_PER_NODE}"
mpirun ${MPI_OPT} ./a.out

SGI PerfBoost egyéb MPI feladatokra (Debrecen)

Az SGI MPT lehetőséget ad arra, hogy nem MPT MPI-vel fordított MPI programok is használjunk. Ebben az esetben az MPI hívások MPT hívásokkal cserélődnek ki.

Egy OpenMPI-re fordított program indítása:

#!/bin/bash
#SBATCH -A barfoo
#SBATCH --job-name=mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=12
#SBATCH --time=12:00:00
#SBATCH -o slurm.out
source /opt/nce/bin/machines
export MPI_OPT="${MACHINES} -np ${SLURM_NTASKS_PER_NODE}"
mpirun ${MPI_OPT} perfboost -ompi ./a.out

CPU binding

Az MPI programok teljesítménye általában javítható a processzek CPU magokhoz kötésével. Ilyenkor a párhuzamos program szálait az operációs rendszer nem ütemezi a CPU magok között, ezért javulhat a memória lokalizáció (kevesebb cache miss). A kötés használata ajánlott. Tesztekkel meg kell győződni, hogy egy adott alkalmazás esetén melyik kötési stratégia adja a legjobb eredményt. A következő beállítások az OpenMPI környezetre vontakoznak. A kötésekről részletes információt a --report-bindings MPI opcióval kaphatunk. Az indítási parancsok melett a részletes binding információ néhány sora is látható. Fontos, hogy az ütemező task binding-ját nem kell használni!

Kötés CPU magonként

Ebben az esetben az MPI szálak (rank) sorban töltik fel a CPU magokat.

Indítási parancs: mpirun --bind-to-core --bycore

[cn05:05493] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05493] MCW rank 1 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05493] MCW rank 2 bound to socket 0[core 2]: [. . B . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05493] MCW rank 3 bound to socket 0[core 3]: [. . . B . . . . . . . .][. . . . . . . . . . . .]
Kötés CPU foglalat szerint

Ebben az esetben az MPI szálak váltakozva töltik fel a CPU-kat.

Indítási parancs: mpirun --bind-to-core --bysocket

[cn05:05659] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05659] MCW rank 1 bound to socket 1[core 0]: [. . . . . . . . . . . .][B . . . . . . . . . . .]
[cn05:05659] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05659] MCW rank 3 bound to socket 1[core 1]: [. . . . . . . . . . . .][. B . . . . . . . . . .]
Kötés node-ok szerint

Ebben az esetben az MPI szálak váltakozva töltik fel a node-okat. Lagalább 2 node foglalása szükséges.

Indítási parancs: mpirun --bind-to-core --bynode

[cn05:05904] MCW rank 0 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
[cn05:05904] MCW rank 2 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]
[cn06:05969] MCW rank 1 bound to socket 0[core 0]: [B . . . . . . . . . . .][. . . . . . . . . . . .]
[cn06:05969] MCW rank 3 bound to socket 0[core 1]: [. B . . . . . . . . . .][. . . . . . . . . . . .]

OpenMP (OMP) feladatok

OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az OMP_NUM_THREADS környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt: export OMP_NUM_THREADS=10

A következő példában egy taskhoz 10 CPU core-t rendeltunk, a 10 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a SLURM_CPUS_PER_TASK változó tartalmazza, és ez állítja be az OMP szálak számát is.

Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 10 szálas OMP alkalmazást.

#!/bin/bash
#SBATCH -A foobar
#SBATCH --job-name=omp
#SBATCH --time=06:00:00
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=10
OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out

Hibrid MPI-OMP feladatok

Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.

A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 24 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 24 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 24 OMP szál fut.

#!/bin/bash
#SBATCH -A foobar
#SBATCH --job-name=mpiomp
#SBATCH --time=08:00:00
#SBATCH -N 2
#SBATCH --ntasks=2
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=24
#SBATCH -o slurm.out
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
mpirun ./a.out

Maple Grid feladatok

Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (${MAPLE}/toolbox/Grid/bin/startserver). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (#SBATCH --licenses=maplegrid:1). A Maple feladat indátását a ${MAPLE}/toolbox/Grid/bin/joblauncher paranccsal kell elvégezni.

Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:

#!/bin/bash
#SBATCH -A foobar
#SBATCH --job-name=maple
#SBATCH -N 1
#SBATCH --ntasks-per-node=24
#SBATCH --time=06:00:00
#SBATCH -o slurm.out
#SBATCH --licenses=maplegrid:1

module load maple

${MAPLE}/toolbox/Grid/bin/startserver
${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl

Matlab feladatok

Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (#SBATCH --licenses=matlabdce:1,matlabdct:1,matlab:1). Összesen 96 darab Distributed Computing Server, 13 darab Distributed Computing Toolbox és 13 Matlab licensz lett megvásárolva.

#!/bin/bash

#SBATCH -A foobar
#SBATCH --job-name="Matlab test job"
#SBATCH -n 1
#SBATCH --licenses=matlabdce:1,matlabdct:1,matlab:1
#SBATCH -o slurm.out

matlab -nodisplay < job.m

GPU-k használata

A szegedi szuperszámítógép rendelkezik 2db GPU kártyákkal is felszerelt compute node-dal. A GPU node-okban 2x6db Nvidia Tesla M2070-es kártya található. A GPU-s node-ok külön job sorban található (--partition gpu). A GPU-k számát a --gres gpu:# direktívával kell megadni.

Alice felhasználó a foobar számla terhére, 4GPU-n, 6 órára indítja a következő jobot.

#!/bin/bash
#SBATCH -A foobar
#SBATCH --job-name=GPU
#SBATCH --partition gpu
#SBATCH --gres gpu:4
#SBATCH --time=06:00:00

$PWD/gpu_burnout 3600

Alkalmazások beállításai

Saját programok telepítése

A saját fordítású programokat a HOME könyvtáradba kell telepíteni, ezt általában a fordítás előtti lefuttatott configure szkripttel lehet beállítani. Az adott program a $HOME/local alá fog települni. A PATH és egyéb környezeti változókat értelem szerűen kell beállítani.

cd $HOME
mkdir local
(belépés az alklamazás könyvtárába)
./configure --prefix=$HOME/local
make; make install

A frontend gépeken felhasználói limitek vannak beállítva. Ezekről a következő paranccsal kapunk információt: ulimit -a A limitek a compute node-okon és az UV-n nincsenek beállítva.

Java JVM heap méret

A memória limit miatt a Java virtuális gépen és fordító nem jól működik, ezért meg kell adni a maximális heap méretét:

java -Xmx512m -version
javac -J-Xmx512m -version

vagy exportálni kell a következő változót:

export _JAVA_OPTIONS="-Xms1g -Xmx1g"

Python Numpy és Scipy használat

A numerikus Python használatához a következő csomagokat kell betölteni: module load python numpy scipy A numpy és a scipy csomagok az Intel MKL OpenMP gyorsítását használják. A jobokat az openmp párhuzamos környezetbe kell elküldeni.

HP Budapest

Fordítás

Elérhető fordítók listája

Forító Soros Párhuzamos
Intel Fortran ifort mpiif90
Intel C icc mpiicc
GNU Fortran gfotran mpif90
GNU C gcc mpicc

A fordítási paramétereket az NCE környezeti változókból érdemes kiolvasni:

NCE_OFLAGS - optimalizációs kapcsolók C és Fortran
NCE_FFLAGS - Fortran kapcsolók
NCE_CFLAGS - C kapcsolók
NCE_LDFLAGS - könyvtárak C és Fortran

Az NCE környezeti változó listáját az nce paranccsal kérhetjük le.

A budapesti gépen elérhető a PRACE környezet is, amely tartalmaz egy ajánlott kapcsoló és könyvtár összeállítást tartalmaz. A PRACE környezet betöltése: module load prace A PRACE környezet az AMD ACML matematikai könyvtárakat használja, amennyiben az Intel MKL-re van szükségünk, akkor a PRACE környezetet nem kell betölteni. A megfelelő MKL kapcsolókat az Intel Link Advisor szerint kell beállítani, pl.:

FFLAGS=-openmp -I$(MKLROOT)/include
CFLAGS=-openmp -I$(MKLROOT)/include
LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \
  -Wl,--start-group \
  $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
  $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \
  $(MKLROOT)/lib/intel64/libmkl_core.a \
  $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a \
  -Wl,--end-group -lpthread -lm

Párhuzamos környezet

OpenMP

Az OpenMP paraméterket környezeti változókon keresztül kell beállítani. Az openmp párhuzamos SLURM környezet az OpenMP szálak számát beállítja. Tovább környezeti változókat az LLNL OpenMP oldalán találtok.

MPI

Az alapértelmezett MPI könyvtár az Open MPI. Ajánlott optimalizációs kapcsolók (CPU binding): --bind-to-core --bycore

SGI ICE Debrecen

Az alapértelmezett MPI könyvtár az SGI MPT. A felhasználói programokat ehhez a könyvtárhoz érdemes fordítani. Ajánlott fordítás opciók:

MPI fordítási opciók

   CFLAGS=-O2 -xSSE4.2
   FFLAGS=-O2 -xSSE4.2
   LDFLAGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \
     -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
     $(MKLROOT)/lib/intel64/libmkl_sequential.a \
     $(MKLROOT)/lib/intel64/libmkl_core.a \
     $(MKLROOT)/lib/intel64/libmkl_blacs_sgimpt_lp64.a -Wl,--end-group \
     -lpthread -lm

MPI és OpenMP fordítási opciók

Ebben az esetben az MKL műveletek OpenMP szálasíthatók, a program hibrid MPI és OMP módban is tud üzemelni.

   CFLAGS=-O2 -xSSE4.2 -openmp
   FFLAGS=-O2 -xSSE4.2 -openmp
   LDFALGS=$(MKLROOT)/lib/intel64/libmkl_scalapack_lp64.a \
     -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a \
     $(MKLROOT)/lib/intel64/libmkl_intel_thread.a \
     $(MKLROOT)/lib/intel64/libmkl_core.a \
     $(MKLROOT)/lib/intel64/libmkl_blacs_sgimpt_lp64.a -Wl,--end-group \
     -liomp5 -lpthread -lm -openmp

ARC köztesréteg

Ez a NorduGrid közösség által fejlesztett Grid köztesréteg. Részletes dokumentációkért ezt a weboldalt érdemes felkeresni.

Miért is használjuk?!

  • Jobb terhelés elosztást tesz lehetővé a szuperszámítógépek között
  • A jobok azon a gépen fognak elindulni, ami a legmegfelelőbb a számára
  • Egy nagy egységgé kapcsolja össze a szuperszámítógépeket
  • Szabványos webservice interfésszel (OGSA-BES, HPC Basic Profile) rendelkezik. Ezáltal könnyen lehet integrálni más rendszerekkel
  • Nagyon sok operációs rendszert támogat
  • A saját számítógépünkről tudjuk kezelni a szuperszámítógépes jobokat
  • A futás idejű környezetek használatával a megfelelő módon lefordított alkalmazást tudjuk használni és nem kell észben tartani, hogy éppen melyik szuperszámítógépen van telepítve a program

Grid tanúsítvány igénylése

Első lépésként szükségünk lesz egy Grides X.509 tanúsítványra, amivel az ARC klienseket használni tudjuk. A HPC portálon keresztül lehetőségünk van igényelni egy 2 hétig érvényes SLCS tanúsítványt. A személyes adatok menüpontra kell kattintani és az oldal végén lesz az igénylő felület. Fontos: legalább egy HPC projekt tagsággal rendelkeznünk kell a HPC portálon. Itt található az a letölthető UNIX script is, ami minden szükséges beállítást elvégez a számunkra:

$ chmod +x slcs_unix_install.sh 
$ ./slcs_unix_install.sh 
$HOME/.globus/usercert.pem and $HOME/.globus/userkey.pem installed
NIIF HPC SLCS Root CA installed: $HOME/.globus/certificates/SLCSCA.pem
Default ARC client configuration created: $HOME/.arc/client.conf
NIIF Root CA 2 installed: $HOME/.globus/certificates/NIIFCA.pem
$ 


Az SLCS másik nagy előnye az egyszerűsített igénylésen kívül az, hogy 1 órán belül az összes szuperszámítógépen automatikusan engedélyezve lesz. Viszont ha nem szeretnénk minden második héten új X.509-es tanúsítványt igényelni, akkor lehetőség van arra is, hogy 1 évig érvényes IGTF tanúsítványt igényeljünk a KIFÜ-től ezen az oldal keresztül. Ebben az esetben a [2] címre kell elküldenünk az IGTF-es tanúsítványunk publikus részét és meg kell adnunk, hogy melyik témaszámunkhoz legyen majd rendelve a szuperszámítógépeken.

ARC kliensek használatba vétele

Telepítés

A csomagok telepítéséhez az itt leírt repo-kat lehet használni: http://download.nordugrid.org/repos-15.03.html Fontos: 5.0-ás ARC verziót telepítsük.

Debian alapú rendszerek esetén:

 apt-get install nordugrid-arc-client  

Redhat alapú rendszerek esetén:

 yum install nordugrid-arc-client

OSX csomag telepítése brew segítségével:

 brew install nordugrid-arc

Ha nem találtunk megfelelő csomagot, akkor innen le tudjuk tölteni a forráskódját és le tudjuk fordítani.

Konfigurálás

$HOME/.arc/client.conf:

[common]
           
[computing/budapest] 
url=https://login.budapest.hpc.niif.hu:60000/arex
infointerface=org.nordugrid.wsrfglue2
submissioninterface=org.ogf.bes
default=yes

[computing/szeged]
url=https://login.szeged.hpc.niif.hu:60000/arex
infointerface=org.nordugrid.wsrfglue2
submissioninterface=org.ogf.bes
default=yes

[computing/debrecen]
url=https://login.debrecen.hpc.niif.hu:60000/arex
infointerface=org.nordugrid.wsrfglue2
submissioninterface=org.ogf.bes
default=yes

[computing/pecs]
url=https://login.pecs.hpc.niif.hu:60000/arex
infointerface=org.nordugrid.wsrfglue2
submissioninterface=org.ogf.bes
default=yes
 
# FastestQueue – ranks targets according to their queue length
brokername=FastestQueue

# Random – ranks targets randomly
#brokername=Random

# Data – ranks targets according the amount of megabytes of the requested input files that are already
# in the computing resources cache. 
#brokername=Data

# PythonBroker:<module>.<class>[:arguments] – ranks targets using any user-supplied custom
# Python broker module, optionally with broker arguments. Such module can reside anywhere in
# user’s PYTHONPATH
#brokername=PythonBroker

[alias]
pecs=computing:ARC1:https://login.pecs.hpc.niif.hu:60000/arex
szeged=computing:ARC1:https://login.szeged.hpc.niif.hu:60000/arex
debrecen=computing:ARC1:https://login.debrecen.hpc.niif.hu:60000/arex
budapest=computing:ARC1:https://login.budapest.hpc.niif.hu:60000/arex
hp=budapest szeged
sgi=pecs debrecen   

Érdemes beállítani, hogy alapértelmezés szerint a FastestQueue brókert használja, ezáltal mindig arra a szuperszámítógépre fogja küldeni a jobokat, ahol a legkevesebb a várakozó jobok száma. A konfigurációs fájl részletes dokumentációját és az ARC kliensek leírásait itt lehet megnézni.

Grid proxy készítése

Ha már telepítettük a tanúsítványunkat és az ARC klienseket akkor a következő lépés az, hogy egy proxy tanúsítványt kell készítenünk, ami alapértelmezés szerint 12 óráig érvényes.

$ arcproxy 
Enter pass phrase for private key:
Your identity: /C=HU/O=NIIF/OU=SLCS/L=hpcteszt/CN=joe
Proxy generation succeeded
Your proxy is valid until: 2015-03-30 05:01:09
$    

Tesztelési célból ezeket a parancsokat érdemes kipróbálni:

$ arcinfo -c szeged  
$ arcinfo -c hp -l
$ arcinfo

Grid job készítése

A jobok leírására több formátumot is használhatunk: JSDL, vagy xRSL. Így adjuk meg, hogy a jobunknak mire van szüksége. Itt egy példa job:

$ cat job.xrsl 
&
(executable="matlab.sh")
(arguments="matlab.m")
(stdout="stdout.txt")
(stderr="stderr.txt")
(jobname="Matlab test")
(inputFiles=
("matlab.m" "")
)
(memory>="1000")
(gmlog="gm.log")
(wallTime="240")
(runTimeEnvironment="APPS/MATH/MATLAB-7.13")  

$ cat matlab.sh 
#!/bin/bash
echo
echo "Compute node: " `/bin/hostname -f`
echo
matlab -nodisplay < $1

$ cat matlab.m
2+3

Ennél a példánál a APPS/MATH/MATLAB-7.13 futásidejű környezetet kértük, ezáltal ez a job csak azon a szuperszámítógépen fog elindulni, ahol ez telepítve van. Továbbá azt kértük még, hogy 240 percig futhasson és legalább 1000 MByte memória rendelkezésre álljon.

Az arcinfo -l paranccsal tudjuk megnézni, hogy a szuperszámítógépeken milyen futás idejű környezetek (runtime environment-ek) vannak telepítve. Ha szeretnénk egy új környezet beállíttatni, akkor ide kell levelet küldeni.

OpenMP példa

Job elkészítése:

$ cat job-openmp.xrsl 
&
(executable="omp_mm")
(stdout="stdout.txt")
(stderr="stderr.txt")
(jobname="OpenMP test")
(queue="test")
(executables="omp_mm")
(count="10")
(countpernode="10")
(environment=("OMP_NUM_THREADS" "10"))
(queue="test")
(inputFiles=
   ("omp_mm" "")
)
(memory>="2600")
(gmlog="gm.log")
(wallTime="20")

Job elküldése:

$ arcsub job-openmp.xrsl
Job submitted with jobid: https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn

Job állapotának a lekérdezése:

$ arcstat https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
Job: https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
 Name: OpenMP test
 State: Finished
 Exit Code: 0

Status of 1 jobs was queried, 1 jobs returned information

Job letöltése:

$ arcget https://login.debrecen.hpc.niif.hu:60000/arex/cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
Results stored at: cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
Jobs processed: 1, successfully retrieved: 1, successfully cleaned: 1
zion:~ joe $ cd cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn
zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $ ls -l
total 16
drwx------  12 joe  staff   408 Mar 29 21:24 gm.log
-rw-------   1 joe  staff     0 Mar 29 21:24 stderr.txt
-rw-------   1 joe  staff  6362 Mar 29 21:24 stdout.txt
zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $

Adatok ellenőrzése:

zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe $ head stdout.txt 
Starting matrix multiple example with 10 threads
Initializing matrices...
Thread 0 starting matrix multiply...
Thread=0 did row=0
Thread 9 starting matrix multiply...
Thread 6 starting matrix multiply...
Thread=0 did row=1
Thread 5 starting matrix multiply...
Thread=5 did row=50
Thread=5 did row=51
zion:cpbNDmLzXwlng5dCemyuQPMmABFKDmABFKDmyVNKDmWBFKDmDQBwOn joe$           

MPI példa

$ cat job-mpi.xrsl 
&
(executable="mpi.sh")
(stdout="stdout.txt")
(stderr="stderr.txt")
(jobname="MPI test")
(executables="connectivity" "mpi.sh")
(count="10")
(inputFiles=
    ("connectivity" "")
    ("mpi.sh" "")
)
(memory>="2600")
(gmlog="gm.log")
(wallTime="20")
(runTimeEnvironment>=ENV/GCC/MPI/OPENMPI-1.4.3)  
$ cat mpi.sh 
#!/bin/bash
mpirun -np 10 ./connectivity -v   

Grafikus felületű ARC kliens

Parancssoros klienseken kívül használni lehet még grafikus klienseket is. Innen tudják letölteni őket.