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

Innen: KIFÜ Wiki
1. sor: 1. sor:
 +
== Az oldal célja ==
 +
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 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.
 +
 
== Hozzáférés a szuperszámítógépekhez ==  
 
== 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.

A lap 2013. június 19., 15:45-kori változata

Az oldal célja

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

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.

Hozzáférés a Shell Framework használatával

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:

   cd $HOME
   git clone git://github.com/hornos/shf3.git
   echo 'source $HOME/shf3/bin/shfrc' >> $HOME/.profile
   source .profile

A frissítéseket a következő paranccsal tudjuk letölteni:

   shfmgr -u

SSH elérés beállítása

Az SSH modul független a $HOME/.ssh 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 kulcs=érték formában. A MID fájl Bash formátumú szkript fájl, amelyet más programokban a source paranccsal tudunk beolvasni. A $HOME/shf3 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.

Új SSH MID-et a következő paranccsal tudunk létrehozni:

   sshmgr -n <MID>

A következő beállításokat kell beleírni a MID fájlba:

   # a távoli gép IP címe vagy DNS neve
   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"

Amennyiben nincs még SSH kulcsunk a szkript létrehozza ezt. Az SSH kulcsokat a $HOME/shf3/key/ssh könyvtár alatt találjuk: privát kulcs: <MID>.sec, publikus kulcs: <MID>.pub. 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 $HOME/shf3/mid/ssh könyvtár alatt vannak a <MID> 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

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

Általános jellemzők

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.

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

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