Debrecen2 GPU klaszter

Belépés
ssh USER@login.debrecen2.hpc.niif.hu Nem alapértelmezett kulcs használata esetén a  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.debrecen2.hpc.niif.hu:FILE Le : scp USER@login.debrecen2.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.debrecen2.hpc.niif.hu:/home/USER Le : rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY A törölt fájlok szinkronizálásához a  opciót kell megadni.

Felhasználói felület
rövid CWD |   DEBRECEN2[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  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:. 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  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: 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  a lefoglalni kívánt node-ok száma, a   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  paranccsal is ellenőrizni.'''

Állapotinformációk
Az ütemezőben lévő jobokról az, a klaszter általános állapotáról az   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  direktívával kell megadni.

Kötelező paraméterek
A következő paramétereket minden esetben meg kell adni: ahol az  a terhelendő számla neve (elérhető számláinkről az   parancs ad felvilágosítást), a   a job rövid neve, a   pedig a maximális walltime idő. 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".
 * 1) !/bin/bash
 * 2) SBATCH -A ACCOUNT
 * 3) SBATCH --job-name=NAME
 * 4) SBATCH --time=TIME

GPU-k lefoglalása
A GPU-k lefoglalása a következő direktívával törénik: Az  a GPU-k/node számát adja meg, ami 1, 2 és 3 lehet maximum.
 * 1) SBATCH --gres=gpu:N

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

Batch 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  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:
 * 1) SBATCH --no-requeue

Feladat sorok
A szupergépen két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a  sor és a   sor. Mind a kettő éles számolásokra való, az első olyan CN gépeket tartalmaz amikben Nvidia K40x GPU-k, a másodikban pedig Nvidia K20x GPU-k vannak. Az alapértelmezett sor a. A prod-gpu-k40 partíciót a következő direktívával lehet kiválasztani:
 * 1) SBATCH --partition=prod-gpu-k40

A szolgáltatás minősége (QOS)
A szolgáltatást alapértelmezett minősége, 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.
 * 1) 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.
 * 1) 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: ahol  MB egységben van megadva. A maximális memória/core 7800 MB lehet.
 * 1) SBATCH --mem-per-cpu=MEMORY

Email értesítés
Levél küldése job állapotának változásakor (elindulás,leállás,hiba): ahol az  az értesítendő emial cím.
 * 1) SBATCH --mail-type=ALL
 * 2) SBATCH --mail-user=EMAIL

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

srun envtest.sh
 * 1) !/bin/bash
 * 2) SBATCH -A ACCOUNT
 * 3) SBATCH --job-name=array
 * 4) SBATCH --time=24:00:00
 * 5) SBATCH --array=1-96

OpenMPI feladatok
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is. A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az  paranccsal kell indítani. mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM
 * 1) !/bin/bash
 * 2) SBATCH -A ACCOUNT
 * 3) SBATCH --job-name=mpi
 * 4) SBATCH -N 2
 * 5) SBATCH --ntasks-per-node=8
 * 6) SBATCH --time=12:00:00

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

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  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. OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out
 * 1) !/bin/bash
 * 2) SBATCH -A foobar
 * 3) SBATCH --job-name=omp
 * 4) SBATCH --time=06:00:00
 * 5) SBATCH --ntasks=1
 * 6) SBATCH --cpus-per-task=8

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. export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK mpirun ./a.out
 * 1) !/bin/bash
 * 2) SBATCH -A foobar
 * 3) SBATCH --job-name=mpiomp
 * 4) SBATCH --time=08:00:00
 * 5) SBATCH -N 2
 * 6) SBATCH --ntasks=2
 * 7) SBATCH --ntasks-per-node=1
 * 8) SBATCH --cpus-per-task=8
 * 9) SBATCH -o slurm.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. Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni. A Maple feladat indátását a  paranccsal kell elvégezni.

Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:
 * 1) !/bin/bash
 * 2) SBATCH -A foobar
 * 3) SBATCH --job-name=maple
 * 4) SBATCH -N 1
 * 5) SBATCH --ntasks-per-node=16
 * 6) SBATCH --time=06:00:00
 * 7) SBATCH -o slurm.out
 * 8) SBATCH --licenses=maplegrid:1

module load maple

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