„Debrecen2 GPU klaszter” változatai közötti eltérés
(12 közbenső módosítás, amit 3 másik szerkesztő végzett, nincs mutatva) | |||
5. sor: | 5. sor: | ||
|- | |- | ||
| Típus | | Típus | ||
− | | HP | + | | HP SL250s |
|- | |- | ||
| core / node | | core / node | ||
20. sor: | 20. sor: | ||
|- | |- | ||
| Max core-ok / projekt | | Max core-ok / projekt | ||
− | | 336 | + | | 336 |
|- | |- | ||
| Max mem / core | | Max mem / core | ||
− | | | + | | 7000 MB |
|} | |} | ||
30. sor: | 30. sor: | ||
− | {{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes GPU-t használni. Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része GPU gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a GPU-k használatát, ami kihasználatlansághoz vezet. Az NVidia [http://www.nvidia.com/object/gpu-applications.html közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan NVidia GPU támogatással, de természetesen egyéb, GPU-t használó program is nagy valószínűséggel jól fut a gépen. | + | {{ATTENTION|A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes GPU-t használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes GPU-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része GPU gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a GPU-k használatát, ami kihasználatlansághoz vezet. Az NVidia [http://www.nvidia.com/object/gpu-applications.html közzétett egy listát] arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan NVidia GPU támogatással, de természetesen egyéb, GPU-t használó program is nagy valószínűséggel jól fut a gépen. |
+ | * A GPU programozás iránt érdeklődőknek tartottunk egy workshopot, amelynek video anyagai elérhetőek itt: [http://videotorium.hu/hu/events/details/1864,GPU_programozas_workshop GPU programozás workshop (videotorium)] | ||
+ | |||
+ | }} | ||
=== Belépés === | === Belépés === | ||
106. sor: | 109. sor: | ||
== Alkalmazások lefordítása == | == Alkalmazások lefordítása == | ||
− | Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: <code>hpc-forum kukac listserv.niif.hu</code>. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a | + | Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: <code>hpc-forum kukac listserv.niif.hu</code>. Feliratkozni [https://listserv.niif.hu/mailman/listinfo/hpc-forum itt lehet erre] a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a <code>hpc-support kukac niif.hu</code> címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig. |
== SLURM ütemező használata == | == SLURM ütemező használata == | ||
204. sor: | 207. sor: | ||
#SBATCH --gres=gpu:N | #SBATCH --gres=gpu:N | ||
</pre> | </pre> | ||
− | Az <code>N</code> a GPU-k/node számát adja meg, ami 1 és | + | Az <code>N</code> a GPU-k/node számát adja meg, ami 1, 2 és 3 lehet maximum. |
==== Interaktív használat ==== | ==== Interaktív használat ==== | ||
236. sor: | 239. sor: | ||
==== Feladat sorok ==== | ==== Feladat sorok ==== | ||
− | A | + | A szupergépen két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a <code>prod-gpu-k40</code> sor és a <code>prod-gpu-k20</code> sor. Mind a kettő éles számolásokra való, az első olyan CN gépeket tartalmaz amikben Nvidia K40x GPU-k, a másodikban pedig Nvidia K20x GPU-k vannak. Az alapértelmezett sor a <code> prod-gpu-k20</code>. A prod-gpu-k40 partíciót a következő direktívával lehet kiválasztani: |
<pre> | <pre> | ||
− | #SBATCH --partition= | + | #SBATCH --partition=prod-gpu-k40 |
</pre> | </pre> | ||
− | |||
==== A szolgáltatás minősége (QOS) ==== | ==== A szolgáltatás minősége (QOS) ==== | ||
282. sor: | 284. sor: | ||
#SBATCH --array=1-96 | #SBATCH --array=1-96 | ||
srun envtest.sh | srun envtest.sh | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
307. sor: | 293. sor: | ||
#SBATCH --job-name=mpi | #SBATCH --job-name=mpi | ||
#SBATCH -N 2 | #SBATCH -N 2 | ||
− | #SBATCH --ntasks-per-node= | + | #SBATCH --ntasks-per-node=8 |
#SBATCH --time=12:00:00 | #SBATCH --time=12:00:00 | ||
− | mpirun PROGRAM | + | mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM |
</pre> | </pre> | ||
OpenMPI FAQ: http://www.open-mpi.org/faq | OpenMPI FAQ: http://www.open-mpi.org/faq | ||
+ | |||
+ | ==== OpenMP (OMP) feladatok ==== | ||
+ | OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az <code>OMP_NUM_THREADS</code> környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt: | ||
+ | <code> | ||
+ | export OMP_NUM_THREADS=8 | ||
+ | </code> | ||
+ | |||
+ | A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a <code> | ||
+ | SLURM_CPUS_PER_TASK</code> változó tartalmazza, és ez állítja be az OMP szálak számát is. | ||
+ | |||
+ | Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 8 szálas OMP alkalmazást. | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | #SBATCH -A foobar | ||
+ | #SBATCH --job-name=omp | ||
+ | #SBATCH --time=06:00:00 | ||
+ | #SBATCH --ntasks=1 | ||
+ | #SBATCH --cpus-per-task=8 | ||
+ | OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out | ||
+ | </pre> | ||
+ | |||
+ | ==== Hibrid MPI-OMP feladatok ==== | ||
+ | Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell. | ||
+ | |||
+ | A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 OMP szál fut. | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | #SBATCH -A foobar | ||
+ | #SBATCH --job-name=mpiomp | ||
+ | #SBATCH --time=08:00:00 | ||
+ | #SBATCH -N 2 | ||
+ | #SBATCH --ntasks=2 | ||
+ | #SBATCH --ntasks-per-node=1 | ||
+ | #SBATCH --cpus-per-task=8 | ||
+ | #SBATCH -o slurm.out | ||
+ | export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK | ||
+ | mpirun ./a.out | ||
+ | </pre> | ||
+ | |||
+ | ==== Maple Grid feladatok ==== | ||
+ | Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (<code>${MAPLE}/toolbox/Grid/bin/startserver</code>). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (<code>#SBATCH --licenses=maplegrid:1</code>). A Maple feladat indátását a <code>${MAPLE}/toolbox/Grid/bin/joblauncher</code> paranccsal kell elvégezni. | ||
+ | |||
+ | Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást: | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | #SBATCH -A foobar | ||
+ | #SBATCH --job-name=maple | ||
+ | #SBATCH -N 1 | ||
+ | #SBATCH --ntasks-per-node=16 | ||
+ | #SBATCH --time=06:00:00 | ||
+ | #SBATCH -o slurm.out | ||
+ | #SBATCH --licenses=maplegrid:1 | ||
+ | |||
+ | module load maple | ||
+ | |||
+ | ${MAPLE}/toolbox/Grid/bin/startserver | ||
+ | ${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | [[Kategória: HPC]] |
A lap jelenlegi, 2018. március 12., 13:03-kori változata
Klaszter | Debrecen2 (Leo) |
Típus | HP SL250s |
core / node | 8 × 2 Xeon E5-2650v2 2.60GHz |
GPU / node | 68 * 3 Nvidia K20x + 16 * 3 Nvidia K40x |
Compute node-ok | 84 db |
Max Walltime | 7-00:00:00 |
Max core-ok / projekt | 336 |
Max mem / core | 7000 MB |
CPU idő kérés
![]() |
FIGYELEM!
A CPU idő igénylésekor egy olyan rövid indoklást várunk a HPC projekt vezetőktől, amiből kiderül, hogy a futtatandó alkalmazás képes GPU-t használni (ez alól kivétel, ha a felhasználás célja a gépen elérhető licenszelt szoftver használata, amennyiben az nem képes GPU-t használni (pl. Gaussian, Maple)). Erre azért van szükség, mert az erőforrás teljesítményének nagyobbik része GPU gyorsításból származik, egy gyorsítás nélküli program a CPU-kat lefoglalja, korlátozva ezzel a GPU-k használatát, ami kihasználatlansághoz vezet. Az NVidia közzétett egy listát arról, hogy melyik alkalmazás rendelkezik jelenleg hivatalosan NVidia GPU támogatással, de természetesen egyéb, GPU-t használó program is nagy valószínűséggel jól fut a gépen.
|
Belépés
ssh USER@login.debrecen2.hpc.niif.hu
Nem alapértelmezett kulcs használata esetén a -i KULCS
kapcsolóval megadása szükséges (SSH és SCP parancsok).
Fájlok másolása SCP-vel
Letöltés a HOME könyvtárból és feltöltés a HOME könyvtárba:
Fel: scp FILE USER@login.debrecen2.hpc.niif.hu:FILE Le : scp USER@login.debrecen2.hpc.niif.hu:FILE FILE
Adatszinkronizáció
Nagyobb fájlok ill. könyvtárstruktúrák szinkronizálásához a következő parancsokat kell használni
Fel: rsync -a -e ssh DIRECTORY USER@login.debrecen2.hpc.niif.hu:/home/USER Le : rsync -a -e ssh USER@login.debrecen2.hpc.niif.hu:/home/USER/DIRECTORY
A törölt fájlok szinkronizálásához a --delete
opciót kell megadni.
Felhasználói felület
rövid CWD | DEBRECEN2[login] ~ (0)$ | | | HPC állomás | | rövid gép név | előző parancs exit kódja
Modul környezet
Az elérhető modulok listáját a következő paranccsal kapjuk meg:
module avail
a már betöltött modulok listáját:
module list
Alkalmazást a következő paranccsal tölthetünk be:
module load APP
A NIIF által beállított környezeti változókat nce
parancs listázza ki.
Adatok megosztása projekt tagok számára
Fájlok ill. könyvtárak megosztásához ACL-eket kell beállítani. A HOME könyvtárat más felhasználó (OTHER) számára olvashatóvá, így tehetjük
setfacl -m u:OTHER:rx $HOME
Addott könyvtárat (DIRECTORY) írahtóvá:
setfacl -m u:OTHER:rxw $HOME/DIRECTORY
A kiterjesztett jogokat a következő paranccsal kérhetjük le:
getfacl $HOME/DIRECTORY
Közös home könyvtár használata
A szuperszámítógépek login gépeit összekötő közös fájlrendszer a következő könyvtár alatt található:
/mnt/fhgfs/home/$USER
Biztonsági mentést a közös könyvtárba a következő paranccsal tudunk végezni:
rsync -avuP --delete $HOME/DIRECTORY /mnt/fhgfs/home/$USER
Alkalmazások lefordítása
Mindenkitől azt kérjük, hogy először próbálja meg saját maga lefordítani az alkalmazását. Ha ez valamilyen oknál fogva mégsem sikerülne, akkor következő lépésként a magyarországi szuperszámítógép felhasználóktól érdemes kérdezni, mert nagy esély van rá hogy mások is belefutottak ugyanabba a problémába. Ezen a címen lehet őket elérni: hpc-forum kukac listserv.niif.hu
. Feliratkozni itt lehet erre a levelezőlistára. Az archívumban is érdemes utánanézni a kérdésnek. Az NIIF HPC support csak igen korlátozottan képes egyéni fordítási kérésekkel foglalkozni, de problémával felkeresheti a hpc-support kukac niif.hu
címet. Az utóbbi esetben pár napos türelmüket mindenképp kérjük válaszunkig.
SLURM ütemező használata
A szuperszámítógépen CPU óra (gépidő) alapú ütemezés működik. A felhasználóhoz tartozó Slurm projektek (Account) állapotáról a következő parancs ad információt:
sbalance
A második oszlopban (Usage) az egyes felhasználók elhasznált gépideje, a negyedik oszlopban pedig a számla összesített gépideje látható. Az utolsó két oszlop a maximális (Account Limit) és a még elérhető (Available) gépidőről ad tájékoztatást.
Scheduler Account Balance ---------- ----------- + ---------------- ----------- + ------------- ----------- User Usage | Account Usage | Account Limit Available (CPU hrs) ---------- ----------- + ---------------- ----------- + ------------- ----------- bob * 7 | foobar 7 | 1,000 993 alice 0 | foobar 7 | 1,000 993
A gépidő becslése
Nagyüzemi (production) futtatások előtt gépidőbecslést érdemes végezni. Ehhez a következő parancs használható:
sestimate -N NODES -t WALLTIME
ahol a NODES
a lefoglalni kívánt node-ok száma, a WALLTIME
pedig a futás maximális ideje.
Fontos, hogy a lefoglalni kívánt gépidőt a lehető legpontosabban adjuk meg, mivel az ütemező ez alapján is rangsorolja a futtatásra váró feladatokat. Általában igaz, hogy a rövidebb job hamarabb sorra kerül. Érdemes minden futás idejét utólag az sacct
paranccsal is ellenőrizni.
Állapotinformációk
Az ütemezőben lévő jobokról az squeue
, a klaszter általános állapotáról az sinfo
parancs ad tájékoztatást. Minden beküldött jobhoz egy egyedi azonosítószám (JOBID) rendelődik. Ennek ismeretében további információkat kérhetünk. Feladott vagy már futó job jellemzői:
scontrol show job JOBID
Minden job egy ún. számlázási adatbázisba (accounting) is bekerül. Ebből az adatbázisból visszakereshetők a lefuttatott feladatok jellemzői és erőforrás-felhasználás statisztikái. A részletes statisztikát a következő paranccsal tudjuk megnézni:
sacct -l -j JOBID
A felhasznált memóriáról a következő parancs ad tájékoztatást:
smemory JOBID
A lemezhasználatról pedig a
sdisk JOBID
Slurm figyelmeztető üzenetek
Resources/AssociationResourceLimit - Erőforrásra vár AssociationJobLimit/QOSJobLimit - Nincs elég CPU idő vagy a maximális CPU szám le van foglalva Piority - Alacsony prioritás miatt várakozik
Az utóbbi esetben, csökkenteni kell a job által lefoglalni kívánt időt. Egy adott projekt részére maximálisan 512 CPU-n futhatnak jobok egy adott időben.
Licenszek ellenőrzése
Az elérhető és éppen használt licenszekről a következő parancs ad információt:
slicenses
Karbantartás ellenőrzése
A karbantartási időablakban az ütemező nem indít új jobokat, de beküldeni lehet. A karbantartások időpontjairól a következő parancs ad tájékoztatást:
sreservations
Összesített felhasználás
Egy hónapra visszamenőleg az elfogyasztott CPU perceket a következő paranccsal kérhetjük le:
susage
Teljes fogyasztás
Ha szeretnénk tájékozódni arról, hogy egy bizony idő óta mennyi a CPU idő felhasználásunk akkor azt ezzel paranccsal tudjuk lekérdezni:
sreport -t Hours Cluster AccountUtilizationByUser Accounts=ACCOUNT Start=2015-01-01
Feladatok futtatása
Alkalmazások futtatása a szupergépeken kötegelt (batch) üzemmódban lehetséges. Ez azt jelenti, hogy minden futtatáshoz egy job szkriptet kell elkészíteni, amely tartalmazza az igényelt erőforrások leírását és a futtatáshoz szükséges parancsokat. Az ütemező paramétereit (erőforrás igények) a #SBATCH
direktívával kell megadni.
Kötelező paraméterek
A következő paramétereket minden esetben meg kell adni:
#!/bin/bash #SBATCH -A ACCOUNT #SBATCH --job-name=NAME #SBATCH --time=TIME
ahol az ACCOUNT
a terhelendő számla neve (elérhető számláinkről az sbalance
parancs ad felvilágosítást), a NAME
a job rövid neve, a TIME
pedig a maximális walltime idő (DD-HH:MM:SS
). A következő időformátumok használhatók:
"minutes", "minutes:seconds", "hours:minutes:seconds", "days-hours", "days-hours:minutes" és "days-hours:minutes:seconds".
GPU-k lefoglalása
A GPU-k lefoglalása a következő direktívával törénik:
#SBATCH --gres=gpu:N
Az N
a GPU-k/node számát adja meg, ami 1, 2 és 3 lehet maximum.
Interaktív használat
Rövid interaktív feladatokat az 'srun' paranccsal tudunk beküldeni, pl.:
srun -l -n 1 -t TIME --gres=gpu:1 -A ACCOUNT APP
Batch job-ok indítása
A jobok feladását a következő parancs végzi:
sbatch slurm.sh
Sikeres feladás esetén a következő kimenetet kapjuk:
Submitted batch job JOBID
ahol a JOBID
a feladat egyedi azonosítószáma.
A feladat leállítását a következő parancs végzi:
scancel JOBID
Nem újrainduló jobok
Nem újrainduló jobokhoz a következő direktívát kell használni:
#SBATCH --no-requeue
Feladat sorok
A szupergépen két, egymást nem átfedő, sor (partíció) áll rendelkezésre, a prod-gpu-k40
sor és a prod-gpu-k20
sor. Mind a kettő éles számolásokra való, az első olyan CN gépeket tartalmaz amikben Nvidia K40x GPU-k, a másodikban pedig Nvidia K20x GPU-k vannak. Az alapértelmezett sor a prod-gpu-k20
. A prod-gpu-k40 partíciót a következő direktívával lehet kiválasztani:
#SBATCH --partition=prod-gpu-k40
A szolgáltatás minősége (QOS)
A szolgáltatást alapértelmezett minősége normal
, azaz nem megszakítható a futás.
Magas prioritás
A magas prioritású jobok maximum 24 óráig futhatnak, és kétszer gyorsabb időelszámolással rendelkeznek, cserébe az ütemező előreveszi ezeket a feladatokat.
#SBATCH --qos=fast
Alacsony prioritás
Lehetőség van alacsony prioritású jobok feladására is. Az ilyen feladatokat bármilyen normál prioritású job bármikor megszakíthatja, cserébe az elhasznált gépidő fele számlázódik csak. A megszakított jobok automatikusan újraütemeződnek. Fontos, hogy olyan feladatokat indítsunk alacsony prioritással, amelyek kibírják a véletlenszerű megszakításokat, rendszeresen elmentik az állapotukat (checkpoint) és ebből gyorsan újra tudnak indulni.
#SBATCH --qos=lowpri
Memória foglalás
Alapértelmezetten 1 CPU core-hoz 1000 MB memória van rendelve, ennél többet a következő direktívával igényelhetünk:
#SBATCH --mem-per-cpu=MEMORY
ahol MEMORY
MB egységben van megadva. A maximális memória/core 7800 MB lehet.
Email értesítés
Levél küldése job állapotának változásakor (elindulás,leállás,hiba):
#SBATCH --mail-type=ALL #SBATCH --mail-user=EMAIL
ahol az EMAIL
az értesítendő emial cím.
Tömbfeladatok (arrayjob)
Tömbfeladatokra akkor van szükségünk, egy szálon futó (soros) alkalmazást szeretnénk egyszerre sok példányban (más-más adatokkal) futtatni. A példányok számára az ütemező a SLURM_ARRAY_TASK_ID
környezeti változóban tárolja az egyedi azonosítót. Ennek lekérdezésével lehet az arrayjob szálait elkülöníteni. A szálak kimenetei a slurm-SLURM_ARRAY_JOB_ID-SLURM_ARRAY_TASK_ID.out
fájlokba íródnak. Az ütemező a feltöltést szoros pakolás szerint végzi. Ebben az esetben is érdemes a processzorszám többszörösének választani a szálak számát. Bővebb ismertető
#!/bin/bash #SBATCH -A ACCOUNT #SBATCH --job-name=array #SBATCH --time=24:00:00 #SBATCH --array=1-96 srun envtest.sh
OpenMPI feladatok
MPI feladatok esetén meg kell adnunk az egy node-on elinduló MPI processzek számát is (#SBATCH --ntasks-per-node=
). A leggyakoribb esetben ez az egy node-ban található CPU core-ok száma. A párhuzamos programot az mpirun
paranccsal kell indítani.
#!/bin/bash #SBATCH -A ACCOUNT #SBATCH --job-name=mpi #SBATCH -N 2 #SBATCH --ntasks-per-node=8 #SBATCH --time=12:00:00 mpirun --report-pid ${TMPDIR}/mpirun.pid PROGRAM
OpenMPI FAQ: http://www.open-mpi.org/faq
OpenMP (OMP) feladatok
OpenMP párhuzamos alkalmazásokhoz maximum 1 node-ot lehet lefoglalni. Az OMP szálák számát az OMP_NUM_THREADS
környezeti változóval kell megadni. A változót vagy az alkamazás elé kell írni (ld. példa), vagy exportálni kell az indító parancs előtt:
export OMP_NUM_THREADS=8
A következő példában egy taskhoz 8 CPU core-t rendeltunk, a 8 CPU core-nak egy node-on kell lennie. A CPU core-ok számát a
SLURM_CPUS_PER_TASK
változó tartalmazza, és ez állítja be az OMP szálak számát is.
Alice felhasználó a foobar számla terhére, maximum 6 órára indít el egy 8 szálas OMP alkalmazást.
#!/bin/bash #SBATCH -A foobar #SBATCH --job-name=omp #SBATCH --time=06:00:00 #SBATCH --ntasks=1 #SBATCH --cpus-per-task=8 OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK ./a.out
Hibrid MPI-OMP feladatok
Hibrid MPI-OMP módról akkor beszélünk, ha a párhuzamos alkalmazás MPI-t és OMP-t is használ. Érdemes tudni, hogy az Intel MKL-el linkelt programok MKL hívásai OpenMP képesek. Általában a következő elosztás javasolt: az MPI processzek száma 1-től az egy node-ban található CPU foglalatok száma, az OMP szálak ennek megfelelően az egy node-ban található összes CPU core szám vagy annak fele, negyede (értelem szerűen). A jobszkipthez a fenti két mód paramétereit kombinálni kell.
A következő példában 2 node-ot, és node-onként 1-1 taskot indítunk taskonként 10 szállal. Alice felhasználó a foobar számla terhére, 8 órára, 2 node-ra küldött be egy hibrid jobot. Egy node-on egyszerre csak 1 db MPI processz fut ami node-onként 8 OMP szálat használ. A 2 gépen összesen 2 MPI proceszz és 2 x 8 OMP szál fut.
#!/bin/bash #SBATCH -A foobar #SBATCH --job-name=mpiomp #SBATCH --time=08:00:00 #SBATCH -N 2 #SBATCH --ntasks=2 #SBATCH --ntasks-per-node=1 #SBATCH --cpus-per-task=8 #SBATCH -o slurm.out export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK mpirun ./a.out
Maple Grid feladatok
Maple-t az OMP feladatokhoz hasonlóan 1 node-on lehet futtatni. Használatához be kell tölteni a maple modult is. A Maple kliens-szerver üzemmódban működik ezért a Maple feladat futtatása előtt szükség van a grid szerver elindítására is (${MAPLE}/toolbox/Grid/bin/startserver
). Ez az alkalmazás licensz köteles, amit a jobszkriptben meg kell adni (#SBATCH --licenses=maplegrid:1
). A Maple feladat indátását a ${MAPLE}/toolbox/Grid/bin/joblauncher
paranccsal kell elvégezni.
Alice felhasználó a foobar számla terhére, 6 órára indítja el a Maple Grid alkalmazást:
#!/bin/bash #SBATCH -A foobar #SBATCH --job-name=maple #SBATCH -N 1 #SBATCH --ntasks-per-node=16 #SBATCH --time=06:00:00 #SBATCH -o slurm.out #SBATCH --licenses=maplegrid:1 module load maple ${MAPLE}/toolbox/Grid/bin/startserver ${MAPLE}/toolbox/Grid/bin/joblauncher ${MAPLE}/toolbox/Grid/samples/Simple.mpl