Uvod
Za raspoređivanje u upravljanje poslovima na računalnom klasteru Supek, koristi se PBS Pro (Portable Batch System Professional) koji obavlja raspoređivanje poslova unutar klastera. Njegova primarna zadaća je raspodjela računalnih zadataka, tj. paketnih poslova, među dostupnim računalnim resursima.
U ovom dokumentu opisano je korištenje PBS Pro 2022.1.1 verzije.
Izvođenje poslova
Korinsičke aplikacije(u nastavku poslovi) koji se pokreću pomoću sustava PBS moraju biti opisani startnom shell skritpom(sh, bash, zsh...). Unutar startne skriipte iznad normalnih naredbi, navode se PBS parametri. Te parametre moguće je navesti i prilikom podnošenja posla.
Osnovno pokretanje posla:
qsub moj_posao.pbs
Pokretanje posla uz parametre:
qsub -q cpu -l ncpus=4:mem=10GB moj_posao.pbs
Više informacija za qsub parametre:
qsub --help
Opis posla
Za opisivanje poslova koristi se jezik sustava PBS, dok datoteka za opis posla je standardna shell skripta. U zaglavlju svek skripte navode se PBS parametri koji detaljno opisuju posao nakon kojih slijede naredbe za izvrašavanje željene aplikacije.
Struktura startne skripte:
#!/bin/bash #PBS -<parametar1> <vrijednost> #PBS -<parametar2> <vrijednost> <naredba>
Konkretni primjer startne skripte:
#!/bin/bash #PBS -P testni_primjer #PBS -q cpu #PBS -e /home/moj_direktorij #PBS -l select=2:ncpus=10 module load gcc/12.1.0 gcc --version
Osnovni PBS parametri
-P | ime_projekta | Specificiranje imena projekta |
-N | ime | Postavljanje imena posla |
-q | destinacija | Specificiranje reda posla i/ili servera |
-l | lista_resursa | Traženje resursa potrebnih za izvođenje posla |
-M | lista_korisnika | Postavljanje liste primatelja mail-a |
-m | opcije_maila | Postavljanje vrste notifikacije maila |
-o | putanja/do/željenog/direktorija | Postavljanje imena/putanje u koje se sprema standardni izlaz |
-e | putanja/do/željenog/direktorija | Postavljanje imena/putanje u koje se sprema standardna greška |
Opcije za slanje obavijesti putem pošte opcijom -m:
a | Mail se šalje kada batch sustav prekine posao |
b | Pošta se šalje kada posao počne izvršavati |
e | Pošta se šalje kada posao završi |
j | Pošta se šalje za podposlove. Mora se kombinirati s jednom ili više podopcija a, b ili e |
Opcije za traženje resursa opcijom -l
-l select=3:ncpus=2 | Traženje 3 komada(chunk-a) čvora po 2 jezgre |
-l select=1:ncpus=10:mem=20GB | Traženje 1 komada(chunka-a) čvora sa 10 jezgri i 20GB radne memorije |
PBS varijable okoline
Ime | Opis |
---|---|
PBS_JOBID | Identifikator posla koji daje PBS kada se posao preda. Stvoreno nakon izvršenjanaredbe qsub. |
PBS_JOBNAME | Naziv posla koji je dao korisnik. Zadani naziv je |
Paralelni poslovi
OpenMP paralelizacija
Ukoliko Vaša aplikacija koristi paralelizaciju isključivo na razini OpenMP dretvi (engl. threadovs) i ne može se širiti van jednog radnog čvora (odnosno radi s dijeljenom memorijom), posao možete pozvati na način kako je prikazano u primjeru xTB aplikacije niže.
OpenMP aplikacije zahtjevaju definiranje varijable OMP_NUM_THREADS
.
PBS sustav vodi računa o tome umjesto Vas, te joj pridružuje vrijednost varijable ncpus
, definirane u zaglavlju PBS skripte.
#!/bin/bash #PBS -q cpu #PBS -l ncpus=8 cd ${PBS_O_WORKDIR} xtb C2H4BrCl.xyz --chrg 0 --uhf 0 --opt vtight
MPI paralelizacija
Ukoliko Vaša aplikacija koristi paralelizaciju isključivo na razini MPI procesa (engl. threadovs) i može se širiti van jednog radnog čvora (odnosno radi s raspodjeljenom memorijom), posao možete pozvati na način kako je prikazano u primjeru Quantum ESPRESSO aplikacije niže.
Vrijednost varijable select
iz zaglavlja PBS skripte odgovara broju MPI procesa, međutim, nema pripadajuću varijablu koju PBS sustav izvodi u okolinu.
Kako bi se izbjeglo prepisivanje, u primjeru niže, definirana je varijabla MPI_NUM_PROCESSES
koja odgovara vrijednosti varijable select
.
#!/bin/bash #PBS -q cpu #PBS -l select=16 MPI_NUM_PROCESSES=$(cat ${PBS_NODEFILE} | wc -l) cd ${PBS_O_WORKDIR} mpiexec -n ${PBS_O_WORKDIR} pw.x -i calcite.in
MPI + OpenMP (hibridna) paralelizacija
Ukoliko se Vaša aplikacije može paralelizirati hibridno, odnosno dijeliti svoje MPI procese u OpenMP threadove, možete posao pozvati na način kako je prikazano u primjeru GROMACS aplikacije niže:
OpenMP aplikacije zahtjevaju definiranje varijable OMP_NUM_THREADS
. PBS sustav joj automatski pridružuje vrijednost varijable ncpus
, definirane u zaglavlju PBS skripte.
Vrijednost varijable select
iz zaglavlja PBS skripte odgovara broju MPI procesa, međutim, nema pripadajuću varijablu koju PBS sustav izvodi u okolinu. Kako bi se izbjeglo prepisivanje, u primjeru niže, definirana je varijabla MPI_NUM_PROCESSES
koja odgovara vrijednosti varijable select
.
#!/bin/bash #PBS -q cpu #PBS -l select=8:ncpus=4 MPI_NUM_PROCESSES=$(cat ${PBS_NODEFILE} | wc -l) cd ${PBS_O_WORKDIR} mpiexec -n ${MPI_NUM_PROCESSES} -d ${OMP_NUM_THREADS} --cpu-bind depth gmx mdrun -v -deffnm md
Prilagođena raspodjela MPI procesa po radnim čvorovima
Ukoliko sami želite kontrolirati kako će PBS sustav raspodjeliti Vašu aplikaciju na čvorove, odnosno koliko će se MPI procesa nalaziti na svakom čvoru, morate dodatno aktivirati opciju place=scatter
u zaglavlju skripte, te koristiti mpiexec
opciju --ppn
, čiji je argument broj MPI procesa koji želite na svakom čvoru.
Primjer je dan s GROMACS aplikacijom niže, kojoj je svaki MPI proces smješten na vlastiti čvor. Aplikacija će se izvoditi na 8 čvorova i koristiti sumarno 32 procesorske jezgre; svaki MPI proces bit će smješten na vlastiti čvor, a svaki MPI proces dodatno će stvoriti 4 OpenMP dretve (eng. threads).
#!/bin/bash #PBS -q cpu #PBS -l select=8:ncpus=4 #PBS -l place=scatter MPI_NUM_PROCESSES=$(cat ${PBS_NODEFILE} | wc -l) cd ${PBS_O_WORKDIR} mpiexec -n ${MPI_NUM_PROCESSES} --ppn 1 -d ${OMP_NUM_THREADS} --cpu-bind depth gmx mdrun -v -deffnm md