„Budapest2 klaszter” változatai közötti eltérés

Innen: KIFÜ Wiki
a
a
 
(54 közbenső módosítás, amit 4 másik szerkesztő végzett, nincs mutatva)
5. sor: 5. sor:
 
|-  
 
|-  
 
| Típus
 
| Típus
| HP
+
| HP SL250s
 
|-  
 
|-  
 
| core / node
 
| core / node
 
| 10 × 2 Xeon E5-2680v2 2.80GHz   
 
| 10 × 2 Xeon E5-2680v2 2.80GHz   
 
|-  
 
|-  
| GPU / node
+
| Intel Xeon Phi / node
| 2 × Nvidia K20
+
| 2 × Intel(R) Xeon Phi(TM) MIC SE10/7120P
 
|-  
 
|-  
| CN szám
+
| Compute node-ok
| 14
+
| 14 db
 +
|-
 +
| Max Walltime
 +
| 7-00:00:00
 +
|-
 +
| Max core-ok / projekt
 +
| 140 (7db node)
 +
|-
 +
| Max mem / core
 +
| 3000 MB
 
|}
 
|}
  
 
=== Belépés ===
 
=== Belépés ===
<code>
+
<pre>
 
ssh USER@login.budapest2.hpc.niif.hu
 
ssh USER@login.budapest2.hpc.niif.hu
</code>
+
</pre>
 
Nem alapértelmezett kulcs használata esetén a <code>-i KULCS</code> kapcsolóval megadása szükséges (SSH és SCP parancsok).
 
Nem alapértelmezett kulcs használata esetén a <code>-i KULCS</code> kapcsolóval megadása szükséges (SSH és SCP parancsok).
  
33. sor: 42. sor:
 
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni
 
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni
 
<pre>
 
<pre>
Fel:  rsync -a -e ssh DIRECTORY USER@login.budapes2t.hpc.niif.hu:/home/USER
+
Fel:  rsync -a -e ssh DIRECTORY USER@login.budapest2.hpc.niif.hu:/home/USER
 
Le :  rsync -a -e ssh USER@login.budapest2.hpc.niif.hu:/home/USER/DIRECTORY
 
Le :  rsync -a -e ssh USER@login.budapest2.hpc.niif.hu:/home/USER/DIRECTORY
 
</pre>
 
</pre>
39. sor: 48. sor:
  
 
== Felhasználói felület ==
 
== Felhasználói felület ==
<code>
+
<pre>
 
               rövid CWD
 
               rövid CWD
 
                     |
 
                     |
47. sor: 56. sor:
 
         rövid gép név  |
 
         rövid gép név  |
 
               előző parancs exit kódja
 
               előző parancs exit kódja
</code>
+
</pre>
  
 
=== Modul környezet ===
 
=== Modul környezet ===
 
Az elérhető modulok listáját a következő paranccsal kapjuk meg:
 
Az elérhető modulok listáját a következő paranccsal kapjuk meg:
<code>
+
<pre>
 
module avail
 
module avail
</code>
+
</pre>
 
a már betöltött modulok listáját:
 
a már betöltött modulok listáját:
<code>
+
<pre>
 
module list
 
module list
</code>
+
</pre>
 
Alkalmazást a következő paranccsal tölthetünk be:
 
Alkalmazást a következő paranccsal tölthetünk be:
 +
<pre>
 +
module load APP
 +
</pre>
 +
A NIIF által beállított környezeti változókat <code>nce</code> parancs listázza ki.
 +
 +
=== Adatok megosztása projekt tagok számára ===
 +
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük
 +
<pre>
 +
setfacl -m u:OTHER:rx $HOME
 +
</pre>
 +
Addott könyvtárat (DIRECTORY) írahtóvá:
 +
<pre>
 +
setfacl -m u:OTHER:rxw $HOME/DIRECTORY
 +
</pre>
 +
A kiterjesztett jogokat a következő paranccsal kérhetjük le:
 +
<pre>
 +
getfacl $HOME/DIRECTORY
 +
</pre>
 +
 +
== Közös home könyvtár használata ==
 +
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:
 +
<pre>
 +
/mnt/fhgfs/home/$USER
 +
</pre>
 +
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:
 +
<pre>
 +
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER
 +
</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. Az NIIF 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.
 +
 +
== Intel Xeon Phi használata ==
 +
 +
* [[Intel_Xeon_Phi |Részletes]] használati és alkalmazás optimalizációs leírás
 +
* [http://software.intel.com/en-us/mic-developer Itt] található az Intel hivatalos dokumentációja ezzel kapcsolatban
 +
* [https://software.intel.com/en-us/xeonphionlinecatalog Itt] található az Intel által hivatalosan támogatott alkalmazások listája
 +
* [http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor Itt] tájékozódhatnak az Intel matematikai könyvtárainak a linkeléséről
 +
 +
== SLURM ütemező használata ==
 +
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:
 +
<pre>
 +
sbalance
 +
</pre>
 +
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik 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 elérhető (Available) gépidőről ad tájékoztatást.
 +
<pre>
 +
Scheduler Account Balance
 +
---------- ----------- + ---------------- ----------- + ------------- -----------
 +
User            Usage |          Account      Usage | Account Limit  Available (CPU hrs)
 +
---------- ----------- + ---------------- ----------- + ------------- -----------
 +
bob *                7 |          foobar          7 |        1,000        993
 +
alice                0 |          foobar          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ó:
 +
<pre>
 +
sestimate -N NODES -t WALLTIME
 +
</pre>
 +
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.'''
 +
 +
=== Á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:
 +
<pre>
 +
scontrol show job JOBID
 +
</pre>
 +
 +
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:
 +
<pre>
 +
sacct -l -j JOBID
 +
</pre>
 +
 +
A felhasznált memóriáról a következő parancs ad tájékoztatást:
 +
<pre>
 +
smemory JOBID
 +
</pre>
 +
 +
A lemezhasználatról pedig a
 +
<pre>
 +
sdisk JOBID
 +
</pre>
 +
 +
==== Slurm figyelmeztető üzenetek ====
 +
<pre>
 +
Resources/AssociationResourceLimit - Erőforrásra vár
 +
AssociationJobLimit/QOSJobLimit - 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.
 +
 +
==== Licenszek ellenőrzése ====
 +
Az elérhető és éppen használt licenszekről a következő parancs ad információt:
 +
<pre>
 +
slicenses
 +
</pre>
 +
 +
==== 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:
 +
<pre>
 +
sreservations
 +
</pre>
 +
 +
==== Összesített felhasználás ====
 +
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:
 +
<pre>
 +
susage
 +
</pre>
 +
 +
==== 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:
 +
<pre>
 +
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01
 +
</pre>
 +
 +
=== 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.
 +
 +
==== 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".
 +
 +
==== Intel Xeon Phi-k lefoglalása ====
 +
A Intel Xeon Phi-k lefoglalása a következő direktívával történik:
 +
<pre>
 +
#SBATCH --gres=mic:N
 +
</pre>
 +
Az <code>N</code> az Intel Xeon Phi-k/node számát adja meg, ami 1 és 2 lehet maximum.
 +
 +
==== Job-ok indítása ====
 +
A jobok feladását a következő parancs végzi:
 +
<pre>
 +
sbatch slurm.sh
 +
</pre>
 +
 +
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:
 +
<pre>
 +
scancel JOBID
 +
</pre>
 +
 +
==== 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 ====
 +
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. A maximális memória/core 3000 MB lehet.
 +
 +
Amennyiben a szálaknak 4GB-nál több virtuális memóriára van szükségük, akkor az indítandó program elé a következő parancsot is el kell helyezni:
 +
<pre>
 +
ulimit -v unlimited
 +
</pre>
 +
 +
==== 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ő]
 +
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A ACCOUNT
 +
#SBATCH --job-name=array
 +
#SBATCH --time=24:00:00
 +
#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.
 +
<pre>
 +
#!/bin/bash
 +
 +
#SBATCH -A ACCOUNT
 +
#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>
 +
 +
==== IntelMPI 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.
 +
<pre>
 +
#!/bin/bash
 +
#SBATCH -A ACCOUNT
 +
#SBATCH --job-name=mpi
 +
#SBATCH -N 2
 +
#SBATCH --ntasks-per-node=20
 +
#SBATCH --time=12:00:00
 +
 +
mpirun PROGRAM
 +
</pre>
 +
 +
OpenMPI FAQ: http://www.open-mpi.org/faq
 +
 +
==== 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>
 
<code>
module load APP
+
export OMP_NUM_THREADS=10
 
</code>
 
</code>
A NIIF által beállított környezeti változókat <code>nce</code> parancs listázza ki.
+
 
 +
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 10 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 10 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 10 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=10
 +
#SBATCH -o slurm.out
 +
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
 +
mpirun ./a.out
 +
</pre>
 +
 
 +
 
 +
[[Kategória: HPC]]

A lap jelenlegi, 2017. március 15., 12:33-kori változata

Klaszter Budapest2
Típus HP SL250s
core / node 10 × 2 Xeon E5-2680v2 2.80GHz
Intel Xeon Phi / node 2 × Intel(R) Xeon Phi(TM) MIC SE10/7120P
Compute node-ok 14 db
Max Walltime 7-00:00:00
Max core-ok / projekt 140 (7db node)
Max mem / core 3000 MB

Belépés

ssh USER@login.budapest2.hpc.niif.hu

Nem alapértelmezett kulcs használata esetén a -i KULCS kapcsolóval megadása szükséges (SSH és SCP parancsok).

Fájlok másolása SCP-vel

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

Fel:  scp FILE USER@login.budapest2.hpc.niif.hu:FILE
Le :  scp USER@login.budapest2.hpc.niif.hu:FILE FILE

Adatszinkronizáció

Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni

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

A törölt fájlok szinkronizálásához a --delete opciót kell megadni.

Felhasználói felület

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

Modul környezet

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 APP

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

Adatok megosztása projekt tagok számára

Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük

setfacl -m u:OTHER:rx $HOME

Addott könyvtárat (DIRECTORY) írahtóvá:

setfacl -m u:OTHER:rxw $HOME/DIRECTORY

A kiterjesztett jogokat a következő paranccsal kérhetjük le:

getfacl $HOME/DIRECTORY

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

A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:

/mnt/fhgfs/home/$USER

Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:

rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER

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. Az NIIF 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.

Intel Xeon Phi használata

  • Részletes használati és alkalmazás optimalizációs leírás
  • Itt található az Intel hivatalos dokumentációja ezzel kapcsolatban
  • Itt található az Intel által hivatalosan támogatott alkalmazások listája
  • Itt tájékozódhatnak az Intel matematikai könyvtárainak a linkeléséről

SLURM ütemező használata

A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:

sbalance

A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik 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 elérhető (Available) gépidőről ad tájékoztatást.

Scheduler Account Balance
---------- ----------- + ---------------- ----------- + ------------- -----------
User             Usage |          Account       Usage | Account Limit   Available (CPU hrs)
---------- ----------- + ---------------- ----------- + ------------- -----------
bob *                7 |           foobar           7 |         1,000         993
alice                0 |           foobar           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.

Á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/QOSJobLimit - 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.

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=ACCOUNT Start=2015-01-01

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.

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".

Intel Xeon Phi-k lefoglalása

A Intel Xeon Phi-k lefoglalása a következő direktívával történik:

#SBATCH --gres=mic:N

Az N az Intel Xeon Phi-k/node számát adja meg, ami 1 és 2 lehet maximum.

Job-ok indítása

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

sbatch slurm.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

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. A maximális memória/core 3000 MB lehet.

Amennyiben a szálaknak 4GB-nál több virtuális memóriára van szükségük, akkor az indítandó program elé a következő parancsot is el kell helyezni:

ulimit -v unlimited

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ő

#!/bin/bash
#SBATCH -A ACCOUNT
#SBATCH --job-name=array
#SBATCH --time=24:00:00
#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.

#!/bin/bash

#SBATCH -A ACCOUNT
#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

IntelMPI 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.

#!/bin/bash
#SBATCH -A ACCOUNT
#SBATCH --job-name=mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=20
#SBATCH --time=12:00:00

mpirun PROGRAM

OpenMPI FAQ: http://www.open-mpi.org/faq

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 10 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 10 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 10 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=10
#SBATCH -o slurm.out
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
mpirun ./a.out