Turinys

Į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 35/36 48 0 384GiB 0 1Gbit/s, 2x10Gbit/s, 4xEDR(100Gbit/s) infiniband CPU
gpu 3/3 40 8 512GB/32GB 7TB 2x10Gbit/s, 4xEDR(100Gbit/s) infiniband CPU NVIDIA DGX-1
power 2/2 32 4 1024GB/32GB 1.8TB 2x10Gbit/s, 4xEDR(100Gbit/s) infiniband 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 Qlustar 12 operacinė sistema (OS) su Linux branduoliu. Ji yra sukurta Ubuntu 20.04 LTS pagrindu. power yra instaliuota Ubuntu 18.04 LTS. Deja šiuo metu power dalis neveikia.

Instaliuotų OS paketų sąrašą galite pasitikrinti su komanda dpkg -l (prisijungimo mazge hpc arba power mazguose).

Singularity

Su komanda 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.8
$ mkdir ~/workdir
$ 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:20.04
$ cp /libfakeroot-sysv.so /tmp/python/
$ 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.8 ...
$ 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 Magpie rinkiniu.

JupyterHub

Su JupyterHub galite interneto naršyklės pagalba vykdyti skaičiavimus su python komandų eilute ir pasinaudoti 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

Prisijungimas

Norint prisijungti prie PST reikia naudoti SSH programas (ssh, putty, winscp, mobaxterm) ir Kerberos arba SSH raktų autentikaciją.

Jeigu naudojate Kerberos:

Jeigu naudojate SSH raktus (pvz: jei norite kopijuoti didelius failus):

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:

mpi-test-job.sh
#!/bin/bash
#SBATCH -p main
#SBATCH -n4
module load openmpi
mpicc -o mpi-test mpi-test.c
mpirun mpi-test

Pateikus paraišką ITAPC ir gavus teigimą sprendimą, reikia susikurti naudotoją https://hpc.mif.vu.lt/. Sukurtas naudotojas bus įtrauktas į atitinkamą projektą, kuris turės tam tikrą kiekį resursų. Norint naudoti projekto resursus atliekant skaičiavimus reikia nurodyti savo alokacijos numerį. Žemiau pateiktas pavyzdys su nustatytu alokacijos parametru „alloc_xxxx_projektas“ (taikomas ne VU MIF naudotojams, VU MIF naudotojai – account parametro nurodyti neturi).

mpi-test-job.sh
#!/bin/bash
#SBATCH --account=alloc_xxxx_projektas
#SBATCH -p main
#SBATCH -n4
#SBATCH --time=minutes
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 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

Ubuntu 18.04 LTS yra 2.1.1 versijos OpenMPI paketai. Norint pasinaudoti naujesne 4.0.1 versija reikia naudoti

module load openmpi/4.0

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 OpenMPI puslapyje.

Užduočių efektyvumas

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:

Mokymų medžiaga

Toliau pateikiama informacija apie mokymus, kurie vyko 2021m gruodžio mėn.

1 mokymų dalis

2 mokymų dalis

3 mokymų dalis

Nuorodos