NIIF szuperszámítógépek használata

Innen: KIFÜ Wiki
A lap korábbi változatát látod, amilyen Htom(AT)niif.hu (vitalap | szerkesztései) 2013. június 28., 10:50-kor történt szerkesztése után volt.

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 username@login.budapest.hpc.niif.hu

Az alapértelmezettől eltérő azonosító fájlok is használhatóak az ssh kapcsolódás során a -i kapcsolóval:

   ssh -i $HOME/.ssh/budapest.id_rsa username@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 a $HOME könyvtárból

   scp username@szerver:filename filename 

  • feltöltés a $HOME könyvtárba

   scp filename username@szerver:filename

  • 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 


Adatátvitel rsync segítségével

  • Aktuális könyvtárból a távoli gép /home/user mappájába történő másolás:

   rsync -e ssh *.c username@login.budapest.hpc.niif.hu:/home/user 

(Az ssh kapcsoló használata kötelezően használandó).

A fenti példa az aktuális könyvtárban levő .c fájlokat másolja át a távoli gépre. Ha a távoli gépen már léteznek ezek a .c fájlok, akkor az rsync protokoll szerint csak a fájlok közötti különbséget másolja át program.


Általánosan használt opciós kapcsolók [option]


  • --delete : azon fájlok törlése, melyek a forrás gépen nem léteznek
  • -v : részletesen tájékoztat a futó folyamatokról (Verbose; a -vv kapcsoló még részletesebbé teszi)
  • -a : archiválás
  • -r : rekurzív másolás
  • -z : fájlok tömörítése

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

Linpack teszt processzorterhelés


Linpack teszt memóriaterhelés