...
Ime | Opis |
---|---|
PBS_JOBID | Identifikator posla koji daje PBS kada se posao preda. Stvoreno nakon izvršenja naredbe 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 ncpus iz zaglavlja PBS skripte |
NCPUS | Broj zatraženih jezgara. Odgovara vrijednosti iz opcije ncpus iz zaglavlja PBS skripte. |
TMPDIR | Putanja do scratch privremenog direktorija. |
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. Poslije zaglavlja potrebno je napisati: cd $PBS_O_WORKDIR Ako se želite prebaciti u direktorij u kojem je pokrenuta skripta, poslije zaglavlja potrebno je napisati: cd $PBS_O_WORKDIR 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. |
Dodjeljivanje resursa poslovima
PBS omogućava definiranje potrebnih resursa na nekoliko načina. Glavna jednica za dodjeljivanje resursa je takozvani "Chunk" ili komad čvora. Chunk se definira s opcijom select. Broj procesorskih jezgri po chunk-u moguće je definirati s ncpus, broj mpi procesa s mpiprocs i količinu radne memorije s mem. Također moguće je definirati walltime (maksimalno vrijeme izvođenja posla) i place (način raspoređivanje chunk-ova po čvorovima).
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č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 prekinuti taj posao i u izlaznu error datoteku zapisati:
Code Block | ||||
---|---|---|---|---|
| ||||
-bash: line 1: PID Killed /var/spool/pbs/mom_priv/jobs/JOB_ID.SC
Cgroup mem limit exceeded: oom-kill:constraint=CONSTRAINT_MEMCG,nodemask=(null),cpuset=_JOB_ID,mems_allowed=0,oom_memcg=/pbs_jobs.service/jobid/JOB_ID,task_memcg=/pbs_jobs.service/jobid/JOB_ID,task=JOB_ID,pid=PID,uid=UID
|
Kod svakog posla ova poruka bit će malo drugačija, 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.
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 s uvjetom na jednom čvoru, pa će korisnik dobiti ukupno 10 procesorskih jezgara i 10 GB RAM-a.
Code Block | ||||
---|---|---|---|---|
| ||||
#PBS -l select=10:ncpus=1:mem=1GB:place=pack |
U gornjim primjerima poslovi su definirani kroz količinu chunkova, jezgara i memorije, ali sustav dozvoljava da se poslovima 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 | ||
---|---|---|
| ||
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 MBPrebacit će izvođenje posla u direktorij u kojem je pokrenuta skripta. |
Spremanje privremenih rezultata
Za spremanje privremenih rezultata koji se generiraju tijekom izvođenja posla ne preporuča može se koristiti $TMPDIR direktorij umjesto $HOME direktorij. Time se smanjuje učinkovitost aplikacije i ne direktorija. Korištenjem $TMPDIR-a iskorištava se brzo spremište (BeeGFS-fast) rezervirano za pohranu privremenih datoteka.
PBS za svaki pojedini posao kreira privremeni direktorij na adresi pohranjenoj u varijabli $TMPDIR (/tmpbeegfs-fast/scratch/<jobID>).
Warning |
---|
Privremeni direktorij se briše automatski po završetku izvođenja posla! |
...
- 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 poslaaplikacije, i kopiranje natrag 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 sveželjeni željeneoutput outpute nazad u radni direktorij cp <outputi>-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 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:
...
Code Block | ||||
---|---|---|---|---|
| ||||
#!/bin/bash
#PBS -q cpu
#PBS -l walltime=10:00:00
#PBS -l select=8:ncpus=4:mem=14GB
module load mpi/openmpi-x86_64
cd ${PBS_O_WORKDIR}
mpiexec -d ${OMP_NUM_THREADS} --cpu-bind depth gmx mdrun -v -deffnm md |
...
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
...