NIIF szuperszámítógépek használata
Tartalomjegyzék
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>
</source> A következő beállításokat kell beleírni a MID fájlba: <code>
# 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
HP Budapest
Fordítás
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. Betöltés:
module load prace
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).