VÝPOČTOVÉ STREDISKO SLOVENSKEJ AKADÉMIE VIED

ENSK
 

Odbor vysokovýkonnej výpočtovej techniky: Návody

Zriadenie konta a prihlasovanie sa

Návody pre superpočítač AUREL (VS SAV Bratislava)

Návody pre výpočtový klaster v Žiline (VS SAV Žilina)

Zriadenie konta a prihlasovanie sa

Na registráciu používateľov slúži registračný portál register.sivvp.sk. Používatelia pochádzajúci z partnerských inštitúcií SIVVP (STU, UMB, ŽU ZA, TUKE, UI SAV, UEF SAV) sa musia registrovať vo svojich domovských inštitúciách. Registráciu ostatných používateľov spravuje Výpočtové stredisko SAV prostredníctvom registračného portálu.
Proces schvaľovania nových používateľov prebieha nasledovne:
  1. Žiadateľ si vytvorí konto na registračnom portáli register.sivvp.sk
  2. Žiadateľ emailom potvrdí pravosť svojej mailovej adresy
  3. Na zvolený email budú žiadateľovi poslané prístupové údaje na registračný portál
  4. Po overení registračných detailov bude používateľovi vytvorený prístup na výpočtové zdroje SIVVP. Potvrdenie schválenia spolu s ďalšími informáciami bude zaslané na používateľov email.

Prihlásenie na superpočítač je možné iba pomocou secure shell (ssh) na jeden z prihlasovacích nódov. Po prihlásení je možné kompilovať programy a púšťať joby. Prihlásenie je možné iba pomocou ssh kľúča.

  • Výroba kľúča cez Linux/Mac

    Spustite v shelli nasledovny prikaz:

    ssh-keygen -b 2048 -t rsa

    ktorý vyrobí kľúče defaultne v adresári ~/.ssh, na ochranu kľúča si zvoľte kvalitné heslo (aspoň 8 znakov, vrátane špeciálnych znakov). Verejný kľúč (~/.ssh/id_rsa.pub) uložíte na registračný portál. Pripomíname, že súbor ~/.ssh/id_rsa je Váš súkromný kľúč, preto si naň treba dávať zvlášť pozor. V žiadnom prípade ho nešírte. Ak máte podozrenie, že by mohlo dôjsť k jeho kompromitovaniu, dajte nám okamžite vedieť - v prípade potreby si môžete vygenerovať nové kľúče.

  • Výroba kľúča cez Windows

    Pre generovanie sady ssh kľúčov môžete použiť voľne dostupný program PuTTYgen. Typ kľúča zvolte SSH-2 RSA a hodnotu "number of bits in the generated key" nastavte na 2048. Kliknite na "generate" a pohybujte myšou v šedom políčku.

    Putty Gen1

    Putty Gen2

    Nezabudnite vytvorenému kľúču priradiť kvalitné heslo. Verejný kľúč nahrajte prostredníctvom registračného portálu, súkromný si dobre uchovajte (viď informácie vyššie).

    Putty Gen3



  • Prihlasovanie sa na výpočtové prostriedky

    Na prihlasovanie sa môžete použiť nasledovné IP adresy:
    StrojIP adresa
    Aurel 1147.213.80.175
    Aurel 2147.213.80.176
    Žilina147.213.242.7

    Superpočítač Aurel má dva prihlasovacie nódy, ktoré sú ekvivalentné. Ak by Vám prihlasovanie na jeden z nich nefungovalo, môžete sa skúsiť prihlásiť na druhý.

    Prihlasovanie sa cez Linux/Mac
    Použite príkaz ssh:

    ssh login@IP

    "IP" nahradíte za IP adresu zvoleného nódu (tabuľka vyššie) a reťazec "login" nahradíte sa prihlasovacie meno, ktoré ste si zvolili pri registrácii na portál.

    Prihlasovanie sa cez Windows
    Otvorte si program PuTTY, ako hostname nastavte IP adresu zvoleného login nódu a súkromný kľúč si do klienta importujte cez menu: Connection -> SSH -> Auth.

    Putty


  • Prenos súborov

    Na prenos súborov na superpočítač Aurel alebo výpočtový klaster v Žiline sa používa protokol SCP.

    Prenos súborov cez Linux/Mac
    Príklad príkazu na kopírovanie lokálneho súboru na klaster:

    scp /path/to/local/file login@IP:.

    Príklad príkazu na kopírovanie z klastra na lokálny stroj:

    scp login@IP:/path/to/remote/file .

    Rovnako ako pri prihlasovaní sa, "IP" nahradíte za IP adresu zvoleného nódu (tabuľka vyššie) a reťazec "login" nahradíte za Vaše prihlasovacie meno.

    Prenos súborov cez Windows
    Použiť môžete ktorýkoľvek scp klient podporujúci autentifikáciu pomocou ssh kľúčov. Ako príklad uvádzame postup pre voľne dostupný program WinSCP.

    winscp1
    Na úvodnej obrazovke kliknite na tlačidlo "New" pre vytvorenie nového spojenia.

    winscp2
    1. Ako protokol zvoľte scp
    2. Vyplňte IP adresu login nódu
    3. Vyplňte vaše prihlasovacie údaje (meno a heslo k vášmu ssh kľúču)
    4. Zadajte cestu k vášmu súkromnému kľúču
    5. Kliknite na tlačidlo "Login" (tlačidlom save si spojenie môžete uložiť)

    winscp3
    Winscp poskytuje prehľadné používateľské prostredie pre kopírovanie, prenášanie a vymazávanie súborov.

Návody pre superpočítač AUREL (VS SAV Bratislava)


Kompilácia programov


Pre vytvorenie optimalizovaného programu zo zdrojového kódu použite IBM kompilátory, ktoré sú na superpočítači nainštalované v nasledujúcich verziách:
- XL C/C++ (C/C++ compiler) version 13.1
- XLF Fortran version 15.1
Na superpočítači su nainštalované aj GNU kompilátory (gcc,gfortran,g++), tie však neodporúčame používať pre HPC aplikácie. Na kompiláciu pomocných programov však za istých okolností poslúžia dobre.

Nastavenie prostredia
IBM C/C++/fortran - kompilátory sú k dispozícii v štandardnom nastavení

GNU C/C++/fortran - kompilátory sú k dispozícii v štandardnom nastavení

64-bitová adresácia
IBM kompilátory pracujú štandardne v 32-bitovom režime. Pre dosiahnutie vyššieho výkonu, ako aj pre možnosť používať viac operačnej pamäte, musíte vaše programy skompilovať v 64-bitovom móde. Dosiahnete to prepínačom “-q64”, pohodlnejšie však je, ak si pred kompiláciou nastavíte premennú OBJECT_MODE príkazom:

export OBJECT_MODE=64


Pri kompilácii pomocou GNU kompilátorov dosiahnete 64-bitovú adresáciu cez prepínač "-maix64".
  • Kompilácia sériových programov

  • Príklady optimalizovanej kompilácie programov:
    Pre jazyk C:
    xlc_r -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

    Pre jazyk C++:
    xlC_r -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

    Pre jazyk Fortran:
    xlf_r -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f

    Pre jazyk Fortran90:
    xlf90_r -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f90

    Podrobný popis kompilátorov nájdete na stránke IBM:
    http://publib.boulder.ibm.com/infocenter/comphelp/v101v121/index.jsp

  • Kompilácia MPI programov

  • IBM Parallel Environment
    Príklad optimalizovanej kompilácie Message Passing Interface (MPI) programov:
    Pre jazyk C:
    mpcc -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

    Pre jazyk C++:
    mpCC -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

    Pre jazyk Fortran:
    mpxlf -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot _myprog.f

    Pre jazyk Fortran90:
    mpxlf90 -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f90

    Všetky potrebné príkazy sú prístupne v štandardnom nastavení.

  • Kompilácia OpenMP programov

    Príklad optimalizovanej kompilácie Open Multi-Processing (OpenMP) programov:

    Pre jazyk C:
    xlc_r -q64 -qsmp=omp -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

    Pre jazyk C++:
    xlC_r -q64 -qsmp=omp -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

    Pre jazyk Fortran:
    xlf_r -q64 -qsmp=omp -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f

    Pre jazyk Fortran90:
    xlf90_r -qsmp=omp -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f90

MPICH2
Potrebné príkazy si načítate cez moduly (“module load mpi/mpich2). Syntax je rovnaká ako pri IBM PE, rozdielne sú len samotné príkazy:
C: mpicc
C++: mpic++
Fortran 77: mpif77
Fortran 90: mpif90

Spúšťanie programov

Každá výpočtová úloha musí byť spustená pomocou frontového systému IBM LoadLeveler.
  • Základné príkazy

    - llsubmit script.ll - zaradenie jobu do fronty
    - llq - kontrolovanie stavu zadaných jobov
    - llstatus - overenie dostupných zdrojov
    - llclass – zobrazí dostupné triedy jobov a ich parametre
    - llcancel JOBID – ukončenie úlohy s číslom JOBID

    Popis jobu a požadované zdroje musia byť definované v špeciálnom skripte (textovom súbore) pre LoadLeveler.
    Vzorový skript nájdete v adresári /gpfs/home/info/examples.

  • Syntax skriptu pre job

    Skript sa skladá z kľučových výrazov pre LoadLeveler (riadky začínajúce s #@) a príkazov, ktoré budú vyvolané.
    Na začiatku skriptu je nutné špecifikovať zdroje pre job.
    Riadky s kľúčovými slovami LoadLeveleru by nemali byť rozdelené riadkami bez kľúčových slov.
    Po kľúčových slovách nasledujú príkazy pre vykonanie jobu. Väčšinou budete používať 'mpiexec' alebo 'poe' pre spustenie vášho paralelného programu. Takisto môžete využiť príkazy shellu vo vašom skripte. Meno a číslo vášho konta (account_no) zistíte príkazom "showaccount".

  • Príklad skriptu (IBM PE)

    #@ job_type = parallel
    #@ job_name = My_job
    #@ account_no = name-number
    #@ class = My_class
    #@ error = job.err
    #@ output = job.out
    #@ network.MPI = sn_all,not_shared,US
    #@ node = 2
    #@ rset = RSET_MCM_AFFINITY
    #@ mcm_affinity_options = mcm_mem_req mcm_distribute mcm_sni_none
    #@ task_affinity = core(1)
    #@ tasks_per_node = 32
    #@ queue

    mpiexec /path/to/your/app -flags...

    Riadky začínajúce s "#@" sú interpretované Loadlevelerom.
    Najdôležitejšie kľúčové výrazy sú "total_tasks", ktorý určuje celkový počet MPI procesov a "node", ktorého hodnota určuje počet nódov, na ktorých budú rozdistribuované procesy. V našom príklade spúšťame celkovo 64 úloh na 2 nódoch. Dôležitý je tiež výber správnej triedy jobu, ich prehľad je uvedený v nasledovnej tabuľke:

    class max_node per job maxjobs per user max_total_tasks per user max. walltime (HH:MM) priority
    short 32 -1 -1 12:00 100
    medium 16 -1 1024 48:00 80
    long 4 8 512 240:00 60
    testing 1:00 undefined*
    * tejto triede je vyhradený 1 uzol, slúži na testovanie a odlaďovanie aplikácií

    Príklad skriptu (MPICH2)

    #! /bin/bash
    #@ job_type = parallel
    #@ account_no = name-number
    #@ class = My_class
    #@ output = job.out
    #@ error = job.err
    #@ network.MPI = sn_all,not_shared,US
    #@ node = 1
    #@ tasks_per_node = 32
    #@ queue

    export LD_LIBRARY_PATH=/gpfs/home/utils/mpi/mpich2-1.5/lib:$LD_LIBRARY_PATH
    export PATH=/gpfs/home/utils/mpi/mpich2-1.5/bin:$PATH
    $(which mpiexec) ./soft.x

    Pracovný adresár

    Každý používateľ má v adresári /gpfs/scratch/ svoj vlastný podadresár, ktorý je určený na ukladanie medzivýsledkov výpočtov. Tento adresár má nielen väčšiu kapacitu ako váš domovský adresár, je aj rýchlejší. Ak teda spúšťate úlohu, ktorá počas behu produkuje veľké množstvo dočasných dát, nastavte si ho ako svoj pracovný adresár.
  • Používateľské nástroje


    llqs

    - stručnejšia verzia príkazu llq s rôznymi užitočnými informáciami

    resuse

    - spočíta počet spustených úloh a CPU hodín pre aktuálneho používateľa na všetkých projektoch (momentálne sú dáta dostupné od 1.1.2017, v najbližších dňoch ich doplníme aj za celý rok 2016)

    resuse -m

    - s parametrom -m bude spočítaný počet úloh a CPU hodín len za posledný mesiac (posledných 30 dní)

    resuse -q

    - parametrom -q bude spočítaný počet úloh a CPU hodín len za posledný kvartál (posledných 100 dní)

    resuse -y

    - parametrom -y bude spočítaný počet úloh a CPU hodín len za posledný rok (posledných 350 dní)

    resuse username

    - spočíta počet spustených úloh a CPU hodín pre používateľa username

    resuse username -q (alebo resuse -q username)

    - spočíta počet spustených úloh a CPU hodín pre používateľa username za posledný kvartál

Návody pre výpočtový klaster v Žiline (VS SAV Žilina)


Kompilácia programov


Pre vytvorenie optimalizovaného programu zo zdrojového kódu použite IBM kompilátory, ktoré sú na výpočtovom klastri nainštalované v nasledujúcich verziách:
- XL C/C++ (C/C++ compiler) version 12.1
- XLF Fortran version 14.1

Na klastri sú nainštalované aj GNU kompilátory, tie však neodporúčame používať pre HPC aplikácie. Na kompiláciu pomocných programov však za istých okolností poslúžia dobre. Môžete ich tiež skúsiť použiť v prípade problémov s IBM kompilátormi.

Nastavenie prostredia
IBM fortran - k dispozícii cez environmentálne moduly (module load ibm/xlf-14.1)
IBM C/C++ - k dispozícii cez environmentálne moduly (module load ibm/vac-12.1)
GNU C/C++/fortran - kompilátory sú k dispozícii v štandardnom nastavení

64-bitová adresácia
IBM kompilátory pracujú štandardne v 32-bitovom režime. Pre dosiahnutie vyššieho výkonu, ako aj pre možnosť používať viac operačnej pamäte, musíte vaše programy skompilovať v 64-bitovom móde. Dosiahnete to prepínačom “-q64”, pohodlnejšie však je, ak si pred kompiláciou nastavíte premennú OBJECT_MODE príkazom:

export OBJECT_MODE=64


GNU kompilátory sú štandardne nastavené na 64-bitovú adresáciu, 32-bitový mód aktivujete prepínačom "-m32".

Optimalizované numerické knižnice
Použite IBM ESSL pomocou prepínača "-lessl" pri kompilácii, prípadne threaded verziu knižnice "-lesslsmp". Ak by niektoré požadované rutiny v ESSL chýbali, doplňte ich pomocou knižnice LAPACK pridaním "-L/gpfs/home/utils/LINUX/lapack/lapack-3.5.0/ -llapack" pri linkovaní.

K dispozícii sú tieto varianty LAPACK-u:
liblapack.a
liblapack6464.a (verzia so 64-bit integermi)
liblapack32.a (32-bitová verzia)
liblapack_.a (k názvom rutín je pridaný podtržník cez prepínač “-qextname”)
liblapack6464_.a (verzia so 64-bit integermi + qextname)
liblapack32_.a (32-bit + qextname)

Kompilácia sériových programov

Príklady optimalizovanej kompilácie programov:
Pre jazyk C:
xlc_r -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

Pre jazyk C++:
xlC_r -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

Pre jazyk Fortran:
xlf_r -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f

Pre jazyk Fortran90:
xlf90_r -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f90

Podrobný popis kompilátorov nájdete na stránke IBM:
http://publib.boulder.ibm.com/infocenter/comphelp/v101v121/index.jsp

Kompilácia MPI programov

IBM Parallel Environment
Všetky potrebné príkazy sú prístupne v štandardnom nastavení.

Príklad optimalizovanej kompilácie Message Passing Interface (MPI) programov:
Pre jazyk C:
mpcc -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

Pre jazyk C++:
mpCC -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

Pre jazyk Fortran:
mpfort -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot _myprog.f

Pre jazyk Fortran90:
mpfort -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f90

MPICH3
Potrebné príkazy si načítate cez moduly, napr. "module load mpi/mpich-3.1.3-ibm" Syntax je rovnaká ako pri IBM PE, rozdielne sú len samotné príkazy:
C: mpicc
C++: mpic++
Fortran 77: mpif77
Fortran 90: mpif90

Kompilácia OpenMP programov

Príklady optimalizovanej kompilácie Open Multi-Processing (OpenMP) programov:

Pre jazyk C:
xlc_r -q64 -qsmp=omp -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

Pre jazyk C++:
xlC_r -q64 -qsmp=omp -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.c

Pre jazyk Fortran:
xlf_r -q64 -qsmp=omp -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f

Pre jazyk Fortran90:
xlf90_r -qsmp=omp -q64 -qarch=pwr7 -qtune=pwr7 -O3 -qhot myprog.f90


Spúšťanie programov


Každá výpočtová úloha musí byť spustená pomocou frontového systému IBM LoadLeveler.

Základné príkazy

- llsubmit script.ll - zaradenie jobu do fronty
- llq - kontrolovanie stavu zadaných jobov
- llstatus - overenie dostupných zdrojov
- llclass – zobrazí dostupné triedy jobov a ich parametre
- llcancel JOBID – ukončenie úlohy s číslom JOBID

Popis jobu a požadované zdroje musia byť definované v špeciálnom skripte (textovom súbore) pre LoadLeveler.

Syntax skriptu pre job

Skript sa skladá z kľučových výrazov pre LoadLeveler (riadky začínajúce s #@) a príkazov, ktoré budú vyvolané. Na začiatku skriptu je nutné špecifikovať zdroje pre job. Riadky s kľúčovými slovami LoadLeveleru by nemali byť rozdelené riadkami bez kľúčových slov. Po kľúčových slovách nasledujú príkazy pre vykonanie jobu. Väčšinou budete používať 'mpiexec' alebo 'poe' pre spustenie vášho paralelného programu. Takisto môžete využiť príkazy shellu vo vašom skripte.

Príklad skriptu (IBM PE)

#@ job_type = parallel
#@ job_name = My_job
#@ class = My_class
#@ error = job.err
#@ output = job.out
#@ node = 2
#@ tasks_per_node = 32
#@ queue

mpiexec /path/to/your/app -flags...

Najdôležitejšie kľúčové výrazy sú "#@ tasks_per_node", ktorý určuje počet MPI procesov na jednom nóde a "#@ node", ktorého hodnota určuje počet nódov, na ktorých budú rozdistribuované procesy. V našom príklade spúšťame celkovo 64 úloh na 2 nódoch.

Dôležitý je tiež výber správnej triedy jobu, ich prehľad je uvedený v nasledovnej tabuľke:

classmax. # of nodesmax. walltime (HH:MM)priority
cluster_short624:0080
cluster_long4480:00

Ak si v skripte nezvolíte žiadnu triedu, job bude zaradený do triedy cluster_short.

Príklad skriptu (MPICH3)

#@ job_type = parallel
#@ job_name = My_job
#@ class = My_class
#@ error = job.err
#@ output = job.out
#@ node = 2
#@ tasks_per_node = 32
#@ environment = COPY_ALL
#@ queue

mpiexec -hostfile $LOADL_HOSTFILE -launcher rsh -iface ib0 /path/to/your/app -flags...

Pre beh na viacerých uzloch potrebujete funkčné rsh prepojenie. To dosiahnete skopírovaním konfiguračného súboru do Vášho domovského adresára.
cp ~utils/LINUX/mpich/.rhosts ~


Spúšťanie niekoľkých paralelných úloh v rámci jedného jobu

Pokiaľ potrebujete spustiť v rámci jedného jobu naraz viac rôznych paralelných úloh, je potrebné do skriptu pridať
export MP_NEWJOB=parallel

Jednotlivé úlohy zadefinujete nasledovným syntaxom:

[executable name]@[user subjob id]%[subjob size]%[protocol]:*

[user subjob id] je ľubovoľné id jobu, ktoré si zvolíte,
[subjobsize] je počet procesov, ktoré bude mať subjob,
[protocol] určuje, ktorý protokol má byť použitý (napr. MPI, LAPI atď). Môžete zvoliť iba jeden.
Nasledujúci príklad spustí dve rôzne mpi úlohy (soft.x), ktoré budú mať 16 procesov:
#!/bin/bash
#@ job_type = parallel
#@ class = cluster_short
#@ node = 1
#@ tasks_per_node = 32
#@ job_name = multitest
#@ network.MPI = sn_all,not_shared,us
#@ output = job.$(schedd_host).$(jobid).out
#@ error = job.$(schedd_host).$(jobid).err
#@ node_usage = not_shared
#@ queue
export MP_NEWJOB=parallel
export MP_LABELIO=yes
cat << EOF > llcmdfile.cmd
./soft.x@1%16%mpi:*
./soft.x@2%16%mpi:*
EOF
poe -cmdfile llcmdfile.cmd

Premenná “MP_LABELIO=yes” zabezpečí, že stdout z oboch úloch bude vypísaný do jedného súboru (definovaný v #@output =).

Pracovný adresár

Na rozdiel od superpočítača Aurel, majú všetky naše stroje v Žiline lokálne disky. Ak teda potrebujete pre vašu úlohu rýchle dátové úložisko, použite pracovný adresár /scratch/$USER.
 

SLUŽBY VVT