Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Tip
titleOdređivanje radnog direktorija

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:

ParametarDefaultna vrijednost
select1
ncpus1
mpiprocs1
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
languagebash
titlePoruka za korisnika kojemu cgrupe ubiju posao zbog nedostatka memorije
-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
languagebash
titlePrimjer traženja resursa
#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
languagebash
titlePrimjer traženja resursa
#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
languagebash
titlePrimjer traženja resursa
#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
titleMemorija

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 $HOME direktorij. Time se smanjuje učinkovitost aplikacije i ne $TMPDIR direktorij umjesto $HOME 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!

...

  1. 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

  2. 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 OMP_NUM_THREADS.

PBS sustav vodi računa o tome umjesto Vas, te joj pridružuje vrijednost varijable ncpus , definirane u zaglavlju PBS skripte.

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
languagebash
linenumberstrue
#!/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
languagebash
linenumberstrue
#!/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
languagebash
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 broju before*   tipa poslova

...