Módosítások

Debrecen2 Phi klaszter

16 275 bájt hozzáadva, 2016. május 11., 18:55
Új oldal, tartalma: „{| class="wikitable" border="1" |- | Klaszter | Debrecen2 Phi (Apollo) |- | Típus | HP Apollo 8000 |- | core / node | 12 × 2 Intel Xeon E5-2670 v3 @ 2.30GHz |- …”
{| class="wikitable" border="1"
|-
| Klaszter
| Debrecen2 Phi (Apollo)
|-
| Típus
| HP Apollo 8000
|-
| core / node
| 12 × 2 Intel Xeon E5-2670 v3 @ 2.30GHz
|-
| MIC / node
| 44 x 2 Intel(R) Xeon Phi(TM) MIC SE10/7120D
|-
| Compute node-ok
| 44 db
|-
| Max Walltime
| 7-00:00:00
|-
| Max core-ok / projekt
| 336 (21db node)
|-
| Max mem / core
| 7000 MB
|}


=== CPU idő kérés ===


{{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes MIC-et használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes Phi-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része Phi gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a Phi-k használatát, ami kihasználatlansághoz vezet. Az Intel [https://software.intel.com/en-us/xeonphionlinecatalog közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan Intel Xeon Phi támogatással, de természetesen egyéb, Phi-t használó program is nagy valószínűséggel jól fut a gépen.
}}

=== Belépés ===
<pre>
ssh USER@login.debrecen2.hpc.niif.hu
</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).

=== 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:
<pre>
Fel: scp FILE USER@login.debrecen2.hpc.niif.hu:FILE
Le : scp USER@login.debrecen2.hpc.niif.hu:FILE FILE
</pre>

=== Adatszinkronizáció ===
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni
<pre>
Fel: rsync -a -e ssh DIRECTORY USER@login.debrecen2.hpc.niif.hu:/home/USER
Le : rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY
</pre>
A törölt fájlok szinkronizálásához a <code>--delete</code> opciót kell megadni.

== Felhasználói felület ==
<pre>
rövid CWD
|
DEBRECEN2[login] ~ (0)$
| | |
HPC állomás | |
rövid gép név |
előző parancs exit kódja
</pre>

=== Modul környezet ===
Az elérhető modulok listáját a következő paranccsal kapjuk meg:
<pre>
module avail
</pre>
a már betöltött modulok listáját:
<pre>
module list
</pre>
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.

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

==== Phi-k lefoglalása ====
A Phi-k lefoglalása a következő direktívával törénik:
<pre>
#SBATCH --gres=mic:N
</pre>
Az <code>N</code> a Phi-k/node számát adja meg, ami 1, 2 és 3 lehet maximum.

==== Interaktív használat ====
Rövid interaktív feladatokat az 'srun' paranccsal tudunk beküldeni, pl.:
<pre>
srun -l -n 1 -t TIME --gres=mic:1 -A ACCOUNT APP
</pre>

{{INFO|A Xeon Phi gyorsítók használatról, programozásáról és optimalizálásról [[ Intel_Xeon_Phi készítettünk egy wiki oldalt]]}}


==== Batch 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épen login node-ja megegyezik a Debrecen2 GPU login node-jával, a Debrecen2 Phi gép használata a megfelelő várakozási sor megadásával lehetséges. A várakozási sor neve:
<code>prod-phi</code>
A partíciót a következő direktívával lehet kiválasztani:
<pre>
#SBATCH --partition=prod-phi
</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 7000 MB lehet.

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

==== 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.
<pre>
#!/bin/bash
#SBATCH -A ACCOUNT
#SBATCH --job-name=mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=8
#SBATCH --time=12:00:00
mpirun --report-pid ${TMPDIR}/mpirun.pid 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>
export OMP_NUM_THREADS=8
</code>

A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 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 8 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=8
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 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 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=8
#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=16
#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>


[[Kategória: HPC]]

Navigációs menü