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)
Kompilácia programov
Ak si v skripte nezvolíte žiadnu triedu, job bude zaradený do triedy cluster_short.
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.
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:
Premenná “MP_LABELIO=yes” zabezpečí, že stdout z oboch úloch bude vypísaný do jedného súboru (definovaný v #@output =).
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
- Výroba kľúča cez Linux/Mac
- Výroba kľúča cez Windows
- Prihlasovanie sa na výpočtové prostriedky
- Prenos súborov
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:
- Žiadateľ si vytvorí konto na registračnom portáli register.sivvp.sk
- Žiadateľ emailom potvrdí pravosť svojej mailovej adresy
- Na zvolený email budú žiadateľovi poslané prístupové údaje na registračný portál
- 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.
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).
Prihlasovanie sa na výpočtové prostriedky
Na prihlasovanie sa môžete použiť nasledovné IP adresy:
Stroj IP adresa Port Aurel 1 147.213.80.175 22 Aurel 2 147.213.80.176 22 Žilina 147.213.242.7 22 Košice 147.213.199.31 5522
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.
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.
Na úvodnej obrazovke kliknite na tlačidlo "New" pre vytvorenie nového spojenia.
- Ako protokol zvoľte scp
- Vyplňte IP adresu login nódu
- Vyplňte vaše prihlasovacie údaje (meno a heslo k vášmu ssh kľúču)
- Zadajte cestu k vášmu súkromnému kľúču
- Kliknite na tlačidlo "Login" (tlačidlom save si spojenie môžete uložiť)
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:
- XLF Fortran version 15.1
export OBJECT_MODE=64
Kompilácia sériových 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
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
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
#@ 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* |
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
#@ 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áciamiresuse
- 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 usernameresuse 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álexport OBJECT_MODE=64
#@ 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...
class | max. # of nodes | max. walltime (HH:MM) | priority |
cluster_short | 4 | 24:00 | 80 |
cluster_long | 2 | 480:00 | 50 |
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...
#@ 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
#@ 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 =).