NIIF szuperszámítógépek használata
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
Tartalomjegyzék
[elrejtés]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 felhasznalonev@login.budapest.hpc.niif.hu
Fájlmásolás SCP (Secure Copy - biztonságos másolás) segítségével
Szintaxis:
scp [options] username1@source_host:directory1/filename1 username2@destination_host:directory2/filename2
Egyszerűsített szintaxis:
- letöltés
scp username@szerver:file helyi_file
- feltöltés
scp helyi_file username@szerver:file
- Példa:
- Adott file másolása a távoli gépen található ~/user könyvtárba:
scp file.txt username@login.budapest.hpc.niif.hu:home/user/
- Adott file letöltése az aktuális könyvtárba:
scp username@login.budapest.hpc.niif.hu:home/user/file.txt
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.
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).