...
Tip | ||
---|---|---|
| ||
Dok je u PBS određena putanja za output i error datoteke u direktoriju u kojem se izvode, input i output datoteke samog programa se zadano učitavaju/spremaju u $HOME direktorij. PBS nema opciju određivanja izvođenja posla u trenutnom direktoriju u kojem se nalazimo stoga je potrebno ručno promijeniti direktorij. Ukoliko Ako se želite prebaciti u direktorij u kojem je pokrenuta skripta, poslije zaglavlja potrebno je napisati: cd $PBS_O_WORKDIR Ukoliko Ako želite pokretati poslove visokog opterećenja spremišta (I/O zahtjevni) izvođenje posla ne preporuča se pokretanje iz $PBS_O_WORKDIR-a već sa $TMPDIR lokacije čime će se iskoristiti brzo spremište. U nastavku pročitajte više o korištenju brzog spremišta i privremenim rezultatima. |
...
PBS omogućava definiranje potrebnih resursa na nekoliko načina. Glavna jednica za dodjeljivanje resursa je takozvani "Chunk" ili komad čvora. Chunk se definira sa sa opcijom s opcijom select. Broj procesorskih procesorskih jezgri jezgri po po chunk-u moguće je definirati sa s ncpus, broj mpi procesa sa s mpiprocs i količinu radne memorije sa s mem. Također moguće je definirati walltime (maksimalno vrijeme izvođenja posla) i place (način raspodjeljivanja raspoređivanje chunk-ova po čvorovima).
Ukoliko Ako neki od parametara nisu definirani koristiti će se defaultne vrijednost:
Parametar | Defaultna vrijednost |
---|---|
select | 1 |
ncpus | 1 |
mpiprocs | 1 |
mem | 3500 MB |
walltime | |
48:00:00 | |
place | pack |
Kontrola memorije pomoću cgrupa
Osim za kontrolu korištenja procesora, cgrupe postavljene su da kontroliraju i potrošnju memorije. To znači da su poslovi koje korisnik pokreće ograničene ograničeni na traženu količinu memorije. Ako posao pokuša iskoristiti više memorije nego je to zatraženo u opisu posla, sustav će ubiti prekinuti taj posao i u izlaznu error datoteku zapisati:
...
Kod svakog posla ova poruka bit će malo drugačija, jer jer sadrži podatke kao što su UID (jedinstvena brojčana oznaka korisnika), PID( brojčana oznaka procesa koji je ubijen), JOB_ID (ID posla koji dodijeljuje PBS).
...
Dodjeljivanje po traženom chunku
...
Primjeri:
Korisnik traži dva chunka od kojih se svaki sastoji od 10 procesorskih jezgara i 10GB RAM-a, s time da korisnik nije specificirao na koliko čvorova već će sustav optimizirati dodijelu. U ovom slučaju korisnik će na korištenje dobiti 20 procesorskih jezgara i 20 GB radne memorije (moguće po 10 na dva čvora)radne memorije.
Code Block | ||||
---|---|---|---|---|
| ||||
#PBS -l select=2:ncpus=10:mem=10GB |
...
Korisnik traži 10 chunkova od kojih se svaki sastoji od jedne procesorske jezgre i 1 GB RAM-a, ali uvjetovano s uvjetom na jednom čvoru, pa će korisnik dobiti ukupno 10 procesorskih jezgara i 10 GB RAM-a.
...
U gornjim primjerima poslovi su definirani kroz količinu chunkova, jezgara i memorije, ali sustav dozvoljava da se poslovima dodijeljuju dodjeljuju resursi ako oni nisu zatraženi (default resursi):
Code Block | ||||
---|---|---|---|---|
| ||||
#PBS -l ncpus=4: #PBS -l mem=14GB |
U ovom slučaju korisnik dobiva 4 procesorske jezgre i ukupno 14GB memorije na jednom chunku. Kad se poslovi opisuju bez opcije select, nije moguće "ulančavanje resursa" (odvajanje traženih resursa dvotočkom, potrebno je za svaki resurs staviti u novi red -l opciju)
Tip | ||
---|---|---|
| ||
Ukoliko Ako definirate poslove koristeći ncpus bez opcije select, poželjno je definirati i količinu memorije, jer će u suprotnom dostupna radna memorija iznositi 3500 MB (select x mem → 1 x 3500 MB). |
Spremanje privremenih rezultata
...
- Primjer jednostavnog korištenja $TMPDIR varijable:
Code Block #!/bin/bash #PBS -q cpu #PBS -l walltime=00:00:05 cd $TMPDIR pwd > test cp test $PBS_O_WORKDIR
- Primjer kopiranja ulaznih podataka u $TMPDIR, pokretanje aplikacije, i kopiranje u radni direktorij:
Code Block #!/bin/bash #PBS -q cpu #PBS -l walltime=00:00:05 # Stvaranja direktorija za ulazne podatke u privremenom direktoriju mkdir -p $TMPDIR/data # Kopirati sve potrebne inpute u privremeni direktorij cp -r $HOME/data/* $TMPDIR/data # Pokrenuti aplikaciju i preusmjeriti outpute u "aktualni" (privremeni) direktorij cd $TMPDIR <izvršna naredba aplikacije> 1>output.log 2>error.log # Kopirati željeni output u radni direktorij cp -r /$TMPDIR/output $PBS_O_WORKDIR
Paralelni poslovi
OpenMP paralelizacija
Ukoliko Ako Vaša aplikacija koristi paralelizaciju isključivo na razini OpenMP dretvi (engl. threads) 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.
Tip |
---|
OpenMP aplikacije zahtjevaju definiranje varijable PBS sustav vodi računa o tome umjesto Vas, te joj pridružuje vrijednost varijable Ukoliko Ako definirate poslove koristeći ncpus bez opcije select, poželjno je definirati i količinu memorije, jer će u suprotnom dostupna radna memorija iznositi 3500 MB (select x mem → 1 x 3500 MB). |
...
Code Block | ||||
---|---|---|---|---|
| ||||
#!/bin/bash #PBS -q cpu #PBS -l walltime=10:00:00 #PBS -l ncpus=8:mem=28GB cd ${PBS_O_WORKDIR} xtb C2H4BrCl.xyz --chrg 0 --uhf 0 --opt vtight |
MPI paralelizacija
Ukoliko Ako Vaša aplikacija koristi paralelizaciju isključivo na razini MPI procesa i može se širiti van jednog radnog čvora (odnosno radi s raspodijeljenom memorijom), posao možete pozvati na način kako je prikazano u primjeru Quantum ESPRESSO aplikacije niže. Za izvođenje aplikacija koje koriste paralelizaciju MPI (ili hibridno MPI+OMP) potrebno je učitati mpi modul prije pozivanja naredbe mpiexec ili mpirun.
...
MPI + OpenMP (hibridna) paralelizacija
Ukoliko Ako 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:
...
Izvršavanjem naredbe qstat bez dodatnih opcija dobiva se ispis svih trenuthi trenutnih poslova svih korisnika:
Code Block | ||
---|---|---|
| ||
Job id Name User Time Use S Queue ---------------- ---------------- ---------------- -------- - ----- 111.admin mpi+omp_s kmrkalj 00:36:09 R cpu |
...
-
after*
- pokretanje trenutnog s obzirom na ostale-
after
- izvršavanje trenutnog nakon početka izvršavanja navedenih -
afterok
- izvršavanje trenutnog nakon uspješnog završetka navedenih -
afternotok
-izvršavanje trenutnognakon greške u završetku navedenih -
afterany
- izvršavanje trenutnog nakon završetka navedenih
-
-
before*
- pokretanje ostalih s obzirom na trenutni-
before
- pokretanjenavedenih nakon početka trenutnog -
beforeok
- pokretanjenavedenih nakon usprešnog uspješnog završetka trenutnog -
beforenotok
- pokretanjenavedenih nakon greške u izvršavanju trenutnog -
beforeany
- pokretanjenavedenih nakon završetka trenutnog
-
-
on:<broj>
- izvršavanje posla koji će ovisiti o naknadno navedenom brojubefore*
tipa poslova
...