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

Innen: KIFÜ Wiki
a (Az ütemező használata)
a (Hozzáférés a szuperszámítógépekhez)
81. sor: 81. sor:
 
=== SSH belépés ===
 
=== SSH belépés ===
 
<code>
 
<code>
    ssh USER@login.SITE.hpc.niif.hu
+
ssh USER@login.SITE.hpc.niif.hu
 
</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.
 
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.
88. sor: 88. sor:
 
Belépés a szegedi gépre, nem alapértelmezett kulccsal foobar felhasználóként:
 
Belépés a szegedi gépre, nem alapértelmezett kulccsal foobar felhasználóként:
 
<code>
 
<code>
    ssh -i keys/szeged foobar@login.szeged.hpc.niif.hu
+
ssh -i keys/szeged foobar@login.szeged.hpc.niif.hu
 
</code>
 
</code>
  
 
=== Fájl másolás SCP segítségével ===
 
=== 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:
 
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:
<code>
+
<pre>
    scp USER@login.SITE.hpc.niif.hu:FILE FILE
+
scp USER@login.SITE.hpc.niif.hu:FILE FILE
    scp FILE USER@login.SITE.hpc.niif.hu:FILE
+
scp FILE USER@login.SITE.hpc.niif.hu:FILE
</code>
+
</pre>
  
 
==== Példa ====
 
==== Példa ====
 
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:
 
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>
    scp foobar@login.szeged.hpc.niif.hu:stuff.tgz .
+
scp foobar@login.szeged.hpc.niif.hu:stuff.tgz .
 
</code>
 
</code>
  
 
=== Adatátvitel rsync segítségével ===
 
=== 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:
 
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:
<code>
+
<pre>
    rsync -a -e ssh DIRECTORY USER@login.budapest.hpc.niif.hu:/home/USER
+
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
+
rsync -a -e ssh USER@login.budapest.hpc.niif.hu:/home/USER/DIRECTORY
</code>
+
</pre>
  
 
==== Példa ====
 
==== Példa ====
 
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ást nyomonkövetve:
 
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ást nyomonkövetve:
 
<code>
 
<code>
    rsync -a -h --progress -e "ssh -i keys/budapest" ./src foobar@login.budapest.hpc.niif.hu:/home/foobar
+
rsync -a -h --progress -e "ssh -i keys/budapest" ./src foobar@login.budapest.hpc.niif.hu:/home/foobar
 
</code>
 
</code>
  

A lap 2013. október 15., 11:23-kori változata

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.
For PRACE Users: please follow this link: PRACE_User_Support

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
  • NIIFI 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 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 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 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.

Magyar Szuperszámítógépek összehasonlítása

Helyszín Budapest Szeged Debrecen Pécs
Típus HP CP4000BL HP CP4000BL SGI ICE8400EX SGI UV 1000
CPU-k / node 2 4 2 2
Core-ok / CPU 12 12 6 6
Memória / node 66 GB 132 GB 47 GB 6 TB
Memória / core 2.75 GB 2.75 GB 3.9 GB 5 GB
CPU AMD Opteron 6174 @ 2.2GHz AMD Opteron 6174 @ 2.2GHz Intel Xeon X5680 @ 3.33 GHz Intel Xeon X7542 @ 2.66 GHz
Scheduler SGE SGE SGE SGE
MPI OpenMPI (ompi) OpenMPI (ompi) SGI MPT (mpt) SGI MPT (mpt)

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.

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.

Példa

Belépés a szegedi gépre, nem alapértelmezett kulccsal foobar felhasználóként: ssh -i keys/szeged foobar@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

Példa

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 foobar@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

Példa

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ást nyomonkövetve: rsync -a -h --progress -e "ssh -i keys/budapest" ./src foobar@login.budapest.hpc.niif.hu:/home/foobar

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 |
              korábbi parancs exit kódja

Az ütemező használata

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, ez ún. Account Limit. Minden UNIX felhasználó egy vagy több számlához (Account) tartozhat és szupergépes feladatokat csak az egyes számlák terhére futtathat. A CPU óra az elhasznált gépidő (Walltime) és az igényelt processzor szám 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, ezért rendkívül fontos arról meggyőződni, hogy a futtatandó alkalmazás rendesen kihasználja-e a processzorokat. 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. Minden hónap elején a gépidő limitek jóváíródnak.

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

   sbalance

Példa

A parancs Bob számára a következő táblázatot jeleníti meg. A felhasználó két számlához (foobar,barfoo) is hozzáfér. 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.

    sbalance

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.

Példa

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

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


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.

Példa

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

Alkalmazások beállításai

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, ami a frontend gépeken maximum 3500m:

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

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 SGE 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 UV Pécs

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

   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

MPI SGE job szkript példa

   #!/bin/bash
   ### SGE
   #$ -N MPITEST
   # 12 órás walltime limit 
   #$ -l h_rt=12:00:00
   # 384 szál lefoglalása az
   # mpi párhuzamos környezetben
   #$ -pe mpi 384
   # az uv.q sor használatával
   #$ -q uv.q
   # a standard kimenet ide íródik
   #$ -o StdOut
   # a hibakimenet ide íródik
   #$ -e StdErr
   # a jelenlegi shell környezet exportálódik
   #$ -V
   ### NUMA
   # az StdOut-ba írja a numa node információt
   numactl --show
   ### OMP
   # 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>

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

   #!/bin/bash
   ### SGE
   #$ -N OMPTEST
   # 12 órás walltime limit 
   #$ -l h_rt=12:00:00
   # 192 szál lefoglalása az
   # openmp párhuzamos környezetben
   #$ -pe openmp 192
   # az uv.q sor használatával
   #$ -q uv.q
   # a standard kimenet ide íródik
   #$ -o StdOut
   # a hibakimenet ide íródik
   #$ -e StdErr
   # a jelenlegi shell környezet exportálódik
   #$ -V
   ### NUMA
   # az StdOut-ba írja a numa node információt
   numactl --show
   ### OMP
   # OMP beállítások
   export OMP_NUM_THREADS=$NSLOTS
   omplace <APP>

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

A jobhoz rendelt cpusetet (CPU és memória szelet) a következő parancsokkal lehet megfigyelni. A grafikonokhoz ssh -X átirányítás szükséges. A processzorterhelés grafikonján négy adat szerepel: zöld - hasznos, felhasználói terhelés, sárga - üresjárat, kék és piros - káros rendszerterhelés. 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.

Processzor terhelés numa node-onként (6 core), az ideális terhelés 6-nál (600%) van:

   sgemon -g -n <JOBID>

Processzor terhelés CPU-nként, az ideális terhelés 1-nél (100%) van:

   sgemon -g -n <JOBID>

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:

   sgemmon -g -m <JOBID>


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 test.q sorban:

   cd $HOME
   mkdir linpack
   module load hpl/2.0.mpt
   cd linpack
   cp $LINPACK_HPL_HOME/bin/{xhpl.sh,HPL.dat} .
   qsub xhpl.sh

A visszakapott jobid-vel hívjuk meg a monitor parancsot:

   sgemon -g -n <JOBID>
   sgemon -g -m <JOBID>

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

Linpack teszt processzorterhelés


Linpack teszt memóriaterhelés