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
Opcija | Argument opcije | Značenje opcije |
-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 mail-a |
-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 |
-j | oe | Povezivanje standardnog izlaza i greške u istu datoteku |
Opcije za slanje obavijesti putem pošte opcijom -m:
a | Mail se šalje kada batch sustav prekine posao |
b | Mail se šalje kada posao počne izvršavati |
e | Mail se šalje kada posao završi |
j | Mail se šalje za podposlove. Mora se kombinirati s jednom ili više podopcija a, b ili e |
#!/bin/bash #PBS -q cpu #PBS -l select=1:ncpus=2 #PBS -M <ime>@srce.hr,<ime2>@srce.hr #PBS -m be echo $PBS_JOBNAME > out echo $PBS_O_HOST
Dobivena su dva maila
PBS Job Id: 2686.x3000c0s25b0n0.hsn.hpc.srce.hr Job Name: pbs.pbs Begun execution
PBS Job Id: 2686.x3000c0s25b0n0.hsn.hpc.srce.hr Job Name: pbs.pbs Execution terminated Exit_status=0 resources_used.cpupercent=0 resources_used.cput=00:00:00 resources_used.mem=0kb resources_used.ncpus=2 resources_used.vmem=0kb resources_used.walltime=00:00:01
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 |
-l ngpus=2 | Traženje 2 gpu-a |
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 naziv podnešene skripte. |
PBS_NODEFILE | Popis radnih čvorova, odnosno procesorskih jezgri na kojima se izvršava posao |
PBS_O_WORKDIR | Radni direktorij u kojem je podnesen posao, odnosno u kojem je pozvana naredba qsub. |
OMP_NUM_THREADS | OpenMP varijabla koju PBS izvozi u okolinu, a koja je jednaka vrijednosti opcije select iz zaglavlja PBS skripte |
NCPUS | Broj zatraženih jezgara. Odgovara vrijednosti iz opcije select iz zaglavlja PBS skripte. |
TMPDIR | Putanja do scratch direktorija. |
Određivanje radnog direktorija
Dok je u PBS pro određena putanja za outpu i error datoteke u direktoriju u kojem se izvode, input i output datoteke samog programa se zadano ščitavaju/spremaju u $HOME direktorij. PBS Pro nema opciju određivanja izvođenja posla u trenutnom direktoriju u kojem se nalazimo stoga je potrebno ručno promijeniti direktorij.
Poslije zaglavlja potrebno je napisati:
cd $PBS_O_WORKDIR
Prebacit će izvođenje posla u direktorij u kojem je pokrenuta skripta.
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 ${MPI_NUM_PROCESSES} 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
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
Praćenje i upravljanje izvođenja posla
Praćenje posla
Za prikaz stanja poslova koristi se PBS-ova naredba qstat. Osnovna sintaksa naredbe je:
qstat <opcije> <ID_posla>
Izvršavanjem naredbe qstat bez dodatnih opcija dobiva se ispis svih trenuthi poslova svih korisnika:
Job id Name User Time Use S Queue ---------------- ---------------- ---------------- -------- - ----- 2663.x3000c0s25b* mpi+omp_s kmrkalj 00:36:09 R cpu
Neke od korištenijih opcija su:
-E | Grupira poslove prema poslužitelju i prikazuje poslove poredane prema uzlaznom ID-u. Kada se qstat prikaže s popisom poslova, poslovi su grupirani po poslužitelju i svaka grupa je prikazana uzlaznim ID-om. Ova opcija također poboljšava performanse qstata. |
-t | Prikazuje informacije o statusu za poslove, nizove poslova i podposlove. |
-p | Prikaz stupca za Iskorišteno vrijeme zamjenjuje se postotkom obavljenog posla. Za posao niza ovo je postotak završenih podposlova. Za normalan posao, to je postotak iskorištenog dodijeljenog CPU vremena. |
-x | Prikazuje informacije o statusu za dovršene i premještene poslove uz poslove u čekanju i pokrenute poslove. |
-Q | Prikazuje status redova u standardnom formatu. |
-q | Prikazuje status redova u alternativnom formatu. |
-f | Prikazuje status posla u alternativnom formatu |
Primjeri korištenja:
Detaljan prikaz posla:
qstat -fxw 2648
Tracejob naredba vadi i prikazuje log poruke za PBS posao po kronološkom redu.
tracejob <ID_posla>
Primjer:
$ tracejob 2670 Job: 2670.x3000c0s25b0n0.hsn.hpc.srce.hr 03/30/2023 11:23:24 L Considering job to run 03/30/2023 11:23:24 S Job Queued at request of mhrzenja@x3000c0s25b0n0.hsn.hpc.srce.hr, owner = mhrzenja@x3000c0s25b0n0.hsn.hpc.srce.hr, job name = mapping, queue = cpu 03/30/2023 11:23:24 S Job Run at request of Scheduler@x3000c0s25b0n0.hsn.hpc.srce.hr on exec_vnode (x8000c0s0b0n0:ncpus=40:mem=104857600kb) 03/30/2023 11:23:24 L Job run 03/30/2023 11:23:24 S enqueuing into cpu, state Q hop 1 03/30/2023 11:23:56 S Holds u set at request of mhrzenja@x3000c0s25b0n0.hsn.hpc.srce.hr 03/30/2023 11:24:22 S Holds u released at request of mhrzenja@x3000c0s25b0n0.hsn.hpc.srce.hr
Upravljanje poslovima
Poslom se može upravljati i nakon pokretanja.
Dok je posao u redu čekanja, moguće je privremeno zaustaviti njegovo izvršavanje naredbom:
qhold <ID_posla>
Vraćanje natrag na red čekanja:
qrls <ID_posla>
Posao se u potpunosti zaustavlja ili miče iz reda čekanja naredbom:
qdel <ID_posla>
Za zaglavljene poslove treba koristiti prisilno zaustavljanje:
qdel -W force -x <ID_posla>
Šalabahteri
Linux šalabahteri
Kretanje po datotečnom sustavu
Naredba | Opis naredbe |
---|---|
pwd | Prikazuje trenutačnu lokaciju korisnika. Lokacija se prikazuje u obliku apsolutne putanje do trenutačnog direktorija. |
cd | Promjena trenutačnog direktorija (cd - change directory). |
cd - | Povratak u prethodni direktorij. |
Upravljanje direktorijima
Naredba | Opis naredbe |
---|---|
mkdir dir1 | Kreira direktorij imena |
mkdir -p /tmp/novi/dir1 | Opcija -p automatski kreira potrebne poddirektorije. |
rm -rf dir1/* | Briše sve datoteke i poddirektorije unutar direktorija dir1 , tj. ostavlja direktorij dir1 praznim. |
rm -rf dir1/ | Briše sve datoteke i poddirektorije uključujući i dir1 . |
Kopiranje datoteka i direktorija
Naredba | Opis naredbe |
---|---|
cp dat1 dat2 | Kopira datoteku dat1 u dat2 (dat1 je nepromijenjena). |
cp dat1 dir/ | Kopira datoteku dat1 u direktorij dir . |
cp -r dir1/* dir2/ | Kopira sve datoteke iz direktorija dir1 u direktorij dir2 bez samog direktorija dir1 . |
cp -r dir1/ dir2/ | Kopira sve datoteke i poddirektorije u direktoriju dir u direktorijdir2 , uključujući direktorij dir1 . |
Premještanje i preimenovanje datoteka i direktorija
Naredba | Opis naredbe |
---|---|
mv dat1 dat2 | Preimenuje datoteku dat1 u dat2 |
mv dat1 dir1 | Ako je dir1 ime direktorija, premješta datoteku dat1 u direktorijdir1 |
Promjena zaporke
Naredba | Opis naredbe |
---|---|
passwd | Promjena zaporke trenutnog korisnika. Naredba prvo traži upis stare lozinke, a zatim traži da se upiše nova lozinka (dva puta). Napomena: prilikom upisivanja lozinke, iz sigurnosnih razloga, u terminalu se ne ispisuje tekst. |
Automatsko nadopunjavanje i pretraživanje povijesti naredbi
Naredba | Opis naredbe |
---|---|
[Tab] | Brzo nadopunjavanje naredbi. Kad korisnik počne pisati naredbu, npr. passwd, može napisati prvih nekoliko slova (npr. pass) i pritisnuti tipku [Tab]. Ljuska će tada automatski završiti naredbu ili ispisati sve naredbe koje započinju nizom pass. Na isti način se mogu nadopunjavati imena datoteka na disku. |
[Ctrl] + [r] | Pretraživanje povijesti naredbi. U terminalu, držite pritisnutu tipku [Ctrl] i pritisnete tipku [r]. Počnete pisati slova iz naredbe, i pojavljuju vam se prijašnje naredbe koje sadržavaju slova koja tipkate. Ako želite rotirati kroz sve naredbe koje sadrže utipkana slova, ponovno stisnete [Ctrl] + [r]. |
Naredbe za dohvaćanje uputa
Naredba | Opis naredbe |
---|---|
man | Upute za korištenje naredbi sustava. Ako želite vidjeti kako se koristi, npr. naredba ls , za otvaranje man-stranice napisat ćete man ls . |
<naredba> [-h/--help] | Dobar dio aplikacija ima mogućnost dohvaćanja uputa korištenjem parametara -h ili --help (ne vrijedi za sve aplikacije!). |
PBS šalabahter
Podnošenje poslova
Naredba | Opis naredbe |
---|---|
qsub | Podnosi posao. |
| Pondošenje posla direktno iz komandne linije bez skripte za podnošenje posla. |
Provjera stanja poslova
Naredba | Opis naredbe |
---|---|
qstat | Prikazuje stanje poslova na klasteru(svi korisnici). |
qstat -u <ime_korisnika> | Prikazuje stanje poslova pojedinog korisnika |
qstat <ID_posla> | Prikaz stanja pojedinog posla. |
qstat -a | Alternativni prikaz stanja poslova(svi korisnici) |
qstat -a -u <ime_korisnika> | Alternativni prikaz stanja poslova(pojedini korisnik) |
qstat -a <ime_reda> | Alternativni prikaz poslova(svi poslovi za pojedini red izvođenja) |
qstat -a <ID_posla> | Alternativni prikaz pojedinog posla |
qstat -Q | Prikaz stanja redova čekanja. |
qstat -r | Prikaz svih poslova koji se trenutno izvode |
qstat -s <ID_posla> | Prikaz komentara od strane batch administratora ili schedulera o izvođenju posla |
qstat -x | Prikaz svih završenih poslova(svi korisnici) |
qstat -x -u <ime_korisnika> | Prikaz svih zavrsenih poslova(pojedini korisnik) |
Zaustavljanje poslova
Naredba | Opis naredbe |
---|---|
qdel <job_id> | Posao se u potpunosti zaustavlja ili miče iz reda čekanja. |
qdel -u <user> | Zaustavljaju se svi poslovi zadanog korisnika. |
qdel -W force <job_id> | Prisilno zaustavljanje za zaglavljene poslove. |