====== Įrangos aprašymas ======
Paskirstytų skaičiavimų tinklas (PST) yra specialiai paruoštas kompiuterių tinklas, kuriame yra galimybė vykdyti programas, kurios galėtų efektyviai apsikeisti duomenimis.
VU MIF PST sudaro superkompiuteris iš telkinių (pirmas skaičius - faktiškai pasiekiamas kiekis):
^Pavadinimas ^Mazgai ^CPU ^GPU ^RAM ^HDD ^Tinklas ^Pastabos|
^main/main2 ^35/36 ^48 ^0 ^384GiB ^0 ^1Gbit/s, 2x10Gbit/s, 4xEDR(100Gbit/s) infiniband ^[[https://ark.intel.com/content/www/us/en/ark/products/192447/intel-xeon-gold-6252-processor-35-75m-cache-2-10-ghz.html|CPU]]|
^gpu/gpu2 ^3/3 ^40 ^8 ^512GB/32GB ^7TB ^2x10Gbit/s, 4xEDR(100Gbit/s) infiniband ^[[https://ark.intel.com/content/www/us/en/ark/products/91753/intel-xeon-processor-e5-2698-v4-50m-cache-2-20-ghz.html|CPU]] [[https://en.wikipedia.org/wiki/Nvidia_DGX#DGX-1|NVIDIA DGX-1]]|
^power ^2/2 ^32 ^4 ^1024GB/32GB ^1.8TB ^2x10Gbit/s, 4xEDR(100Gbit/s) infiniband ^[[https://www.ibm.com/products/power-systems-ac922|IBM Power System AC922]]|
Iš viso **40/41** mazgų, **1912** CPU cores su **17TB** RAM, **32** GPU su **1TB** RAM.
Toliau tekste procesorius = CPU = core - procesoriaus vienas branduolys (su visomis hypergijomis, jei jos yra įjungtos).
====== Programinė įranga ======
**main** ir **gpu** yra instaliuota [[https://docs.qlustar.com/Qlustar/13/HPCstack/hpc-user-manual.html|Qlustar 13]] operacinė sistema (OS) su Linux branduoliu. Ji yra sukurta Ubuntu 22.04 LTS pagrindu. **power** yra instaliuota Ubuntu 18.04 LTS. Deja šiuo metu **power** dalis neveikia.
**main2** ir **gpu2** yra nedidelė dalis resursų, kuriuose yra senoji [[https://docs.qlustar.com/Qlustar/12.0/HPCstack/hpc-user-manual.html|Qlustar 12]] operacinės sistemos aplinka tam atvejui, jei naujojoje Qlustar 13 aplinkoje kažkas dar neveiktų. Taip pat paliktas senas prisijungimo mazgas **sk2.mif.vu.lt**. Jie bus pasiekiami iki 2025-02-01.
Instaliuotų OS paketų sąrašą galite pasitikrinti su komanda ''dpkg -l'' (prisijungimo mazge **hpc** arba **power** mazguose).
===== Singularity =====
Su komanda [[https://sylabs.io/guides/3.2/user-guide/index.html|singularity]] galima pasinaudoti jau paruoštomis konteinerių failų kopijomis kataloguose ''/apps/local/hpc'', ''/apps/local/nvidia'', ''/apps/local/intel'', ''/apps/local/lang'' arba pačiam atsisiųsti iš singularity ir docker internetinių katalogų. Pasinaudojus MIF cloud paslauga galima susikurti ir savo singularity konteinerius.
Su singularity galite paruošti savo konteinerį, pvz:
$ singularity build --sandbox /tmp/python docker://python:3.10
$ mkdir ~/workdir /tmp/python/scratch
$ singularity exec -H ~/workdir:$HOME -w /tmp/python pip install paketas
$ singularity build python.sif /tmp/python
$ rm -rf /tmp/python
Tam kad pasinaudoti tokiu konteineriu, patariama (kad nesusikirstų su esamais python paketais namų kataloge) - pakeisti jame namų katalogą.
$ mkdir ~/workdir
$ singularity exec -H ~/workdir:$HOME python.sif python3 ...
Analogiškai galima pasinaudoti R, Julia ar kitais konteineriais, kuriuose paketams instaliuoti nereikia naudotojo root teisių.
Jeigu reikia papildyti singularity kontainerį OS paketais, tam reikia root/superuser teisių. Su fakeroot jas simuliuojame, o jam reikalingą biblioteką ''libfakeroot-sysv.so'' kopijuojame į konteinerį, pvz:
$ singularity build --sandbox /tmp/python docker://ubuntu:22.04
$ cp /libfakeroot-sysv.so /tmp/python/
$ mkdir /tmp/python/scratch
$ fakeroot -l /libfakeroot-sysv.so singularity exec -w /tmp/python apt-get update
$ fakeroot -l /libfakeroot-sysv.so singularity exec -w /tmp/python apt-get install python3.10 ...
$ fakeroot -l /libfakeroot-sysv.so singularity exec -w /tmp/python apt-get clean
$ rm -rf /tmp/python/libfakeroot-sysv.so /tmp/python/var/lib/apt/lists (galima ir daugiau išvalyti, ko nereikia)
$ singularity build python.sif /tmp/python
$ rm -rf /tmp/python
===== Hadoop =====
Kataloge ''/apps/local/bigdata'' yra paruošti scenarijai pasileisti savo **hadoop** užduotis pasinaudojant [[https://github.com/LLNL/magpie|Magpie]] rinkiniu.
===== JupyterHub =====
Su [[https://mif.vu.lt/hub/|JupyterHub]] galite interneto naršyklės pagalba vykdyti skaičiavimus su python komandų eilute ir pasinaudoti [[https://jupyter.org|JupyterLab]] aplinka. Jeigu savo namų kataloge instaliuosite savo JupyterLab aplinką, tai reikia instaliuoti papildomai ''batchspawner'' paketą - tada jums startuos jūsų aplinką, pvz:
$ python3.8 -m pip install --upgrade pip setuptools wheel
$ python3.8 -m pip install --ignore-installed batchspawner jupyterlab
Taip pat jūs galite pasinaudoti savo pasidarytu konteineriu per JupyterHub. Tame konteineryje reikia instaliuoti ''batchswapner'' ir ''jupyterlab'' paketus bei sukurti script'ą ''~/.local/bin/batchspawner-singleuser'' su vykdymo teisėmis (''chmod +x ~/.local/bin/batchspawner-singleuser'')
#!/bin/sh
exec singularity exec --nv myjupyterlab.sif batchspawner-singleuser "$@"
====== Registracija ======
* **VU MIF tinklo naudotojams** - PST galima naudotis be papildomos registracijos, jei užtenka suteiktų resursų (mėnesio limitas - **500 CPU-h ir 60 GPU-h**). Išnaudojus šį limitą, galima prašyti suteikti jų daugiau užpildant [[https://forms.office.com/Pages/ResponsePage.aspx?id=ghrFgo1UykO8-b9LfrHQEidLsh79nRJAvOP_wV9sgmdURTNUUVhJTzFGOVFWR0Y1STZBMUFNRE4yRy4u|ITAPC paslaugų užsakymo formą]].
* **VU kompiuterių tinklo naudotojams** - paslaugoms gauti turite užpildyti [[https://forms.office.com/Pages/ResponsePage.aspx?id=ghrFgo1UykO8-b9LfrHQEidLsh79nRJAvOP_wV9sgmdURTNUUVhJTzFGOVFWR0Y1STZBMUFNRE4yRy4u|ITAPC paslaugų užsakymo formą]]. Patvirtinus paraišką, [[https://hpc.mif.vu.lt|Waldur portale]] turite susikurti savo paskyrą. Daugiau informacijos skaitykite [[waldur|čia]].
* **Kitiems naudotojams (ne VU bendruomenės nariams)** - paslaugoms gauti turite užpildyti [[https://forms.office.com/Pages/ResponsePage.aspx?id=ghrFgo1UykO8-b9LfrHQEidLsh79nRJAvOP_wV9sgmdUMDE1QUo3Slo3UVYwTjM4TDMyTEdZT0tSNi4u|ITAPC paslaugų užsakymo formą]]. Patvirtinus paraišką, turite atvykti adresu VU MIF Didlaukio g. 47, 302/304 kab. darbo metu, prisijungimo duomenims gauti. Dėl tikslaus laiko būtina susitarti tel. 8 5219 5005 arba 8 5219 5006. Gavus duomenis [[https://hpc.mif.vu.lt|Waldur portale]] turite susikurti savo paskyrą. Daugiau informacijos skaitykite [[waldur|čia]].
====== Prisijungimas ======
Norint prisijungti prie **PST** reikia naudoti SSH programas (ssh, putty, winscp, mobaxterm) ir Kerberos arba SSH raktų autentikaciją.
Jeigu naudojate **Kerberos** (tik MIF naudotojams):
* Prisijunkite į Linux aplinką VU MIF klasėje arba viešame terminale su savo VU MIF naudotojo vardu ir slaptažodžiu
* **arba** su ssh ar putty programa prisijunkite į **uosis.mif.vu.lt** su savo VU MIF naudotojo vardu ir slaptažodžiu.
* Su komanda **klist** patikrinkite, ar turite galiojantį Kerberos raktą (ticket). Jei rakto nėra arba jo galiojimo laikas pasibaigęs, tai reikia įvykdyti komandą **kinit**.
* Junkitės į serverį **hpc** su komanda **ssh hpc** (turi nereikalauti slaptažodžio).
* **Pirmą kartą** prisijungus turi praeiti **5min**, kad galėtumėte naudotis PST.
Jeigu naudojate **SSH raktus**:
* Jei neturite SSH raktų, instrukciją kaip juos susikurti Windows aplinkoje rasite **[[duk:ssh_key|čia]]**
* **Waldur** naudotojai gali prisijungti tik šiuo būdu, su ssh raktu, kuris buvo įkeltas į Waldur HPC naudotojo lauką.
* **MIF** naudotojai turi įkelti savo ssh rakto viešą (public) dalį per [[https://mif.vu.lt/ldap/sshkey.php]].
* Prisijunkite su **ssh**, **sftp**, **scp**, **putty**, **winscp** ar kitomis **ssh** protokolą palaikančiomis programomis į **hpc.mif.vu.lt** su savo **ssh privačiu raktu** nurodydami savo VU MIF naudotojo vardą (turi nereikalauti prisijungimo slaptažodžio, bet gali reikalauti jūsų ssh privataus rakto slaptažodžio).
Pirmą kartą prisijungus jūs **negalėsite** paleisti **SLURM užduočių** per pirmąsias **5 minutes**. Po to jums bus automatiškai sukurtas **SLURM naudotojas** ir priskirti **resursų limitai**.
====== Bendra failų sistema (Lustre) ======
VU MIF PST bendra failų sistema yra pasiekiama ''/scratch/lustre'' kataloge.
Joje kiekvienam PST naudotojui yra sukuriamas ''/scratch/lustre/home/username'' katalogas, kur **username** - PST naudotojo vardas.
Šios failų sistemos failai yra vienodai pasiekiami visuose skaičiavimo mazguose ir mazge **hpc**.
Prašome šiuos katalogus naudoti tik pagal paskirtį ir atlikus skaičiavimus - išsivalyti.
====== PST eilės (partition) ======
^Eilė (partition) ^Laiko limitas ^RAM ^Pastabos|
^main ^nėra ^7900MB ^CPU telkinys|
^gpu ^nėra ^12700MB ^GPU telkinys|
^power ^nėra ^8000MB ^IBM Power9 telkinys|
Visose eilėse užduotims laiko limitas yra **2h**, jei jis nebuvo nurodytas, o lentelėje yra pateiktas maksimalus leidžiamas laiko limitas (nėra).
**RAM** stulpelyje yra pateikiamas kiekvienam rezervuotam **CPU** branduoliui skiriamas RAM kiekis.
====== Paketinis užduočių vykdymas (SLURM) ======
Norint pasinaudoti PST skaičiavimo resursais, reikia formuoti užduočių scenarijus (sh arba csh).
Pavyzdys:
#!/bin/bash
#SBATCH -p main
#SBATCH -n4
module load openmpi
mpicc -o mpi-test mpi-test.c
mpirun mpi-test
Jame kaip specialūs komentarai yra nurodymai užduočių vykdytojui.
-p short - į kokią eilę siųsti (main, gpu, power).
-n4 - kiek procesorių rezervuoti (**PASTABA:** nustačius naudotinų branduolių skaičių x, tačiau realiai programiškai išnaudojant mažiau, apskaitoje vis tiek bus skaičiuojami visi x "užprašyti" branduoliai, todėl rekomenduojame apsiskaičiuoti iš anksto).
Užduoties pradinis einamasis katalogas yra dabartinis katalogas (**pwd**) prisijungimo mazge iš kur paleidžiama užduotis, nebent parametru -D pakeistas į kitą. Pradiniam einamajam katalogui naudokite PST bendros failų sistemos katalogus **/scratch/lustre**, nes jis turi egzistuoti skaičiavimo mazge ir ten yra kuriamas užduoties išvesties failas **slurm-JOBID.out**, nebent nukreiptas kitur parametrais -o arba -i (jiems irgi patariama naudoti bendrą failų sistemą).
Suformuotą scenarijų siunčiame su komanda sbatch
''$ sbatch mpi-test-job''
kuri gražina pateiktos užduoties numerį **JOBID**.
Laukiančios arba vykdomos užduoties būseną galima sužinoti su komanda squeue
''$ squeue -j JOBID''
Su komanda scancel galima nutraukti užduoties vykdymą arba išimti ją iš eilės
''$ scancel JOBID''
Jeigu neatsimenate savo užduočių **JOBID**, tai galite pasižiūrėti su komanda **squeue**
''$ squeue''
Užbaigtų užduočių **squeue** jau neberodo.
Jeigu nurodytas procesorių kiekis nėra pasiekiamas, tai jūsų užduotis yra įterpiama į eilę. Joje ji bus kol atsilaisvins pakankamas kiekis procesorių arba kol jūs ją pašalinsite su **scancel**.
Vykdomos užduoties išvestis (**output**) yra įrašoma į failą **slurm-JOBID.out**. Jei nenurodyta kitaip, tai ir klaidų (error) išvestis yra įrašoma į tą patį failą. Failų vardus galima pakeisti su komandos **sbatch** parametrais -o (nurodyti išvesties failą) ir -e (nurodyti klaidų failą).
Daugiau apie SLURM galimybes galite paskaityti [[https://slurm.schedmd.com/quickstart.html|Quick Start User Guide]].
====== Interaktyvios užduotys (SLURM) ======
Interaktyvias užduotis galima vykdyti su komanda srun:
$ srun --pty $SHELL
Įvykdę aukščiau pateiktą komandą prisijungsite prie SLURM paskirtos skaičiavimo mazgo aplinkos ir galėsite tiesiogiai vykdyti ir derinti programas jame.
Įvykdę komandas atsijunkite nuo skaičiavimo mazgo su komanda
$ exit
Jeigu norima vykdyti grafines programas, tai reikia jungtis su **ssh -X** į **uosis.mif.vu.lt** ir **hpc**:
$ ssh -X uosis.mif.vu.lt
$ ssh -X hpc
$ srun --pty $SHELL
**power** telkinyje interaktyvias užduotis galima vykdyti su
$ srun -p power --mpi=none --pty $SHELL
====== GPU užduotys (SLURM) ======
Norint pasinaudoti GPU, reikia papildomai nurodyti --gres gpu:N
kur N - norimas GPU kiekis.
Su ''nvidia-smi'' užduotyje galite pasitikrinti kiek GPU buvo paskirta.
Pavyzdys interaktyvios užduoties su 1 GPU:
$ srun -p gpu --gres gpu --pty $SHELL
====== Įvadas į OpenMPI ======
Norint pasinaudoti **OpenMPI** reikia įrašyti
module load openmpi
prieš vykdant MPI komandas.
===== MPI programų kompiliavimas =====
Paprastos MPI programos pavyzdys yra kataloge ''/scratch/lustre/test/openmpi''. **mpicc** (**mpiCC**, **mpif77**, **mpif90**, **mpifort**) yra apvalkalai C (C++, F77, F90, Fortran) kompiliatoriams, kurie automatiškai įtraukia į komandų eilutę reikiamus **MPI** intarpų (include) ir bibliotekų failus.
$ mpicc -o foo foo.c
$ mpif77 -o foo foo.f
$ mpif90 -o foo foo.f
===== MPI programų vykdymas =====
MPI programos startuojamos su **mpirun** arba **mpiexec** programa. Daugiau apie jas galima sužinoti su komanda **man mpirun** arba **man mpiexec**.
Paprasta (SPMD) programa gali būti startuojama su tokia mpirun komandų eilute.
$ mpirun foo
Bus naudojami visi paskirti procesoriai pagal tai, kiek jų buvo užsakyta. Jeigu norite panaudoti mažiau, tai **mpirun** nurodykite parametrą ''-np kiekis''. Nerekomenduojama ilgesnį laiką naudoti mažiau nei rezervuota, nes neišnaudoti CPU lieka laisvi.
**DĖMESIO:** griežtai draudžiama naudoti didesnį kiekį CPU nei buvo rezervuotą, nes tai gali turėti įtakos kitų užduočių vykdymui.
Daugiau apie instaliuotą **OpenMPI** yra [[https://www.open-mpi.org|OpenMPI]] puslapyje.
====== Užduočių efektyvumas ======
* Prašome išnaudoti ne mažiau 50% užsakyto CPU kiekio.
* Naudoti daugiau CPU, nei užsakyta, nepadidins efektyvumo, nes jūsų užduotis galės naudoti tik tiek CPU, kiek buvo užsakyta.
* Jeigu naudosite parametrą ''--mem=X'', tai užduotis gali rezervuoti daugiau **CPUs** proporcingai norimos atminties kiekiui. Pvz: užsakius ''--mem=14000'' eilėje **main**, bus užsakyti ne mažiau 2 CPUs, jei kiti parametrai nenurodo daugiau. Jeigu jūsų užduotis naudos mažiau CPU, tai bus neefektyvus resursų naudojimas. Be to, gali veikti netgi lėčiau, nes gali būti naudojama kita (nei vykdančio) procesoriaus atmintis.
====== Resursų limitai ======
Jeigu jūsų užduotys nestartuoja dėl **AssocGrpCPUMinutesLimit** arba **AssocGrpGRESMinutes** priežasties,
turite pasitikrinti, ar užduotims dar liko neišnaudotų CPU/GPU resursų iš mėnesio limito.
//Pirmasis būdas peržiūrėti, kiek išnaudota resursų://
sreport -T cpu,mem,gres/gpu cluster AccountUtilizationByUser Start=0101 End=0131 User=USERNAME
kur **USERNAME** - jūsų MIF naudotojo vardas, o **Start** ir **End** nurodo einamojo mėnesio pradžios ir pabaigos datas. Jas galima nurodyti ir kaip ''$(date +%m01)'' ir ''$(date +%m31)'', kas nurodo einamojo mėnesio pirmą ir paskutinę dienas.
**DĖMESIO**: naudojimas pateikiamas minutėmis, pateiktą skaičių reikia dalinti iš 60, gausite išnaudotas valandas.
//Antrasis būdas peržiūrėti, kiek išnaudota resursų://
sshare -l -A USERNAME_mif -p -o GrpTRESRaw,GrpTRESMins,TRESRunMins
kur **USERNAME** - MIF naudotojo vardas. Arba parametre **-A** nurodyti tą paskyrą, kurios naudojimą reikia pažiūrėti. Duomenys yra pateikiami cpu/gpu minutėmis:
* **GrpTRESRaw** - kiek išnaudota.
* **GrpTRESMins** - koks yra limitas.
* **TRESRunMins** - likę resursai dar vis vykdomų užduočių.
====== Mokymų medžiaga ======
Toliau pateikiama informacija apie mokymus, kurie vyko 2021m gruodžio mėn.
===== 1 mokymų dalis =====
* Trumpai apie HPC, kas tai yra, kam jo reikia
* Kokie HPC būna, koks yra VU ir kokia MIF dalis
* Kaip prisijungti MIF darbuotojams / studentams prie HPC
* SSH rakto kūrimas ir naudojimas Windows aplinkoje
* WinScp naudojimas Windows aplinkoje
* [[https://drive.mif.vu.lt/s/xcK4cS8k3rZoKG9|Įvadas į HPC (skaidrės)]]
* [[https://drive.mif.vu.lt/s/ipy3FLNGnEqm8TE|Įvadas į HPC (video) ]]
===== 2 mokymų dalis =====
* Slurm komandos darbams paleisti/stabdyti ar progresui peržiūrėti.
* Sbatch failas ir jo tipiniai parametrai CPU ir GPU particijoms
* Darbai interaktyviu režimu ir darbai liekantys veikti po atsijungimo (Sbatch)
* Python/R/julia ar kitų kalbų paketų diegimas
* Singularity konteineriai: atsisiuntimas ir/arba esamų modifikavimas
* Darbas su MPI
* Rezultatų išvedimas ir parsisiuntimas į naudotojo kompiuterį
* Papildomų resursų užsakymai (Waldur)
* [[https://drive.mif.vu.lt/s/tHGtLZHbyQHpXK8|Užduočių valdymas, naudotojų PĮ ir CPU skaičiavimai HPC infrastruktūroje (skaidrės)]]
* [[https://drive.mif.vu.lt/s/mDTbB3stWe9AKyS|Užduočių valdymas, naudotojų PĮ ir CPU skaičiavimai HPC infrastruktūroje (video)]]
===== 3 mokymų dalis =====
* GPU skaičiavimai
* CUDA programinio kodo spartinimui naudojant GPU
* Programavimas Python Jupyter-notebooks su GPU
* Simuliacinių skaičiavimų pavyzdys
* Mašininio mokymo projektas (duomenys/modelis jų įkėlimas/atsisiuntimas)
* Mašininio mokymo pavyzdys naudojant vieną GPU
* Mašininio mokymo pavyzdys naudojant kelis GPU
* [[https://drive.mif.vu.lt/s/MgH6Y9NNA63bQpA|GPU skaičiavimai HPC insfrastruktūroje (skaidrės)]]
* [[https://drive.mif.vu.lt/s/9Zpzxzq4XCyMozp|GPU skaičiavimai HPC insfrastruktūroje (video) ]]
====== Nuorodos ======
* [[waldur|HPC Waldur portalo aprašymas]]
* [[http://mif.vu.lt/itapc#paslaug%C5%B3-u%C5%BEsakymas|ITAPC paslaugų užsakymas]]
* [[https://slurm.schedmd.com/quickstart.html|Quick Start User Guide (SLURM)]]
* [[https://docs.qlustar.com/Qlustar/12.0/HPCstack/hpc-user-manual.html|HPC User Manual (Qlustar)]]
* [[http://www.mcs.anl.gov/research/projects/mpi/|MPI standartas]]
* [[pagalba@mif.vu.lt]] - problemų su **HPC** registracija