You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 36 Next »


Uvod

Za raspoređivanje i 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

Korisničke aplikacije (u nastavku poslovi) koji se pokreću pomoću sustava PBS moraju biti opisani startnom shell skritpom (sh, bash, zsh...). Unutar startne skripte 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

Nakon podnošenja posla moguće je pogledati standardni izlaz i grešku posla koji je u stanju izvođenja naredbama:

qcat jobID
qcat -e jobID
qtail jobID
qtail -e jobID

Podnošenje poslova

Postoji nekoliko načina na koji se poslovi mogu podnijeti:

  • interaktivnim podnošenjem
  • korištenjem skripte
  • u interaktivnoj sjednici
  • poljima poslova

U slučaju interaktivnog podnošenja, direktnim pozivanjem naredbe qsub će se u terminalu otvoriti uređivač teksta, putem kojeg se podnose naredbe za izvršavanje:

# pokreni qsub
[korisnik@x3000c0s25b0n0:~] $ qsub
Job script will be read from standard input. Submit with CTRL+D.
echo "Hello world"
14571.x3000c0s25b0n0.hsn.hpc.srce.hr

# ispiši sadržaj direktorija
[korisnik@x3000c0s25b0n0:~] $ ls -l
total 5140716
-rw-------  1 mkvakic hpc          0 Jun  1 07:44 STDIN.e14571
-rw-------  1 mkvakic hpc         12 Jun  1 07:44 STDIN.o14571

# ispiši sadržaj izlazne datoteke
[korisnik@x3000c0s25b0n0:~] $ cat STDIN.o14571
Hello world

U slučaju podnošenja skriptom, naredbe za izvršavanje možemo zadati u ulaznoj datoteci koju podnosimo:

# ispiši datoteku hello.sh
[korisnik@x3000c0s25b0n0:~] $ cat hello.sh 
#!/bin/bash

#PBS -N hello
echo "Hello world"

# podnošenje skripte posla
[korisnik@x3000c0s25b0n0:~] $ qsub hello.sh
14572.x3000c0s25b0n0.hsn.hpc.srce.hr

# ispis sadržaja direktorija
[korisnik@x3000c0s25b0n0:~] $ ls -l
total 5140721
-rw-------  1 mkvakic hpc          0 Jun  1 07:44 STDIN.e14571
-rw-------  1 mkvakic hpc         12 Jun  1 07:44 STDIN.o14571
-rw-------  1 mkvakic hpc          0 Jun  1 08:02 hello.e14572
-rw-------  1 mkvakic hpc         12 Jun  1 08:02 hello.o14572
-rw-r--r--  1 mkvakic hpc         46 Jun  1 07:55 hello.sh

# ispis sadržaja datoteke
[korisnik@x3000c0s25b0n0:~] $ cat hello.o14572 
Hello world

U slučaju interaktivne sjednice, korištenjem opcije qsub -I bez ulazne skripte otvorit će se terminal na glavnom radnom čvoru unutar kojeg možemo pokretati komande:

# hostname na pristupnom poslužitelju
[korisnik@x3000c0s25b0n0:~] $ hostname
x3000c0s25b0n0

# otvaranje interaktivne sjednice
[korisnik@x3000c0s25b0n0:~] $ qsub -I -N hello-interactive
qsub: waiting for job 14574.x3000c0s25b0n0.hsn.hpc.srce.hr to start
qsub: job 14574.x3000c0s25b0n0.hsn.hpc.srce.hr ready

# hostname na glavnom radnom čvoru
[korisnik@x8000c0s3b0n0:~] $ hostname
x8000c0s3b0n0

U slučaju polja poslova, korištenjem opcije qsub -J X-Y[:Z] možemo podnijeti zadani broj identičnih poslova u rangu X do Y s korakom Z:

# podnošenje polja poslova
mkvakic@ login-cpu 08:21 ~ $ qsub -J 1-10:2 hello.sh 
14575[].x3000c0s25b0n0.hsn.hpc.srce.hr

# ispis sadržaja datoteke
mkvakic@ login-cpu 08:21 ~ $ ls -l
total 5140744
-rw-------  1 mkvakic hpc          0 Jun  1 07:44 STDIN.e14571
-rw-------  1 mkvakic hpc         12 Jun  1 07:44 STDIN.o14571
-rw-------  1 mkvakic hpc          0 Jun  1 08:02 hello.e14572
-rw-------  1 mkvakic hpc          0 Jun  1 08:21 hello.e14575.1
-rw-------  1 mkvakic hpc          0 Jun  1 08:21 hello.e14575.3
-rw-------  1 mkvakic hpc          0 Jun  1 08:21 hello.e14575.5
-rw-------  1 mkvakic hpc          0 Jun  1 08:21 hello.e14575.7
-rw-------  1 mkvakic hpc          0 Jun  1 08:21 hello.e14575.9
-rw-------  1 mkvakic hpc         12 Jun  1 08:02 hello.o14572
-rw-------  1 mkvakic hpc         12 Jun  1 08:21 hello.o14575.1
-rw-------  1 mkvakic hpc         12 Jun  1 08:21 hello.o14575.3
-rw-------  1 mkvakic hpc         12 Jun  1 08:21 hello.o14575.5
-rw-------  1 mkvakic hpc         12 Jun  1 08:21 hello.o14575.7
-rw-------  1 mkvakic hpc         12 Jun  1 08:21 hello.o14575.9
-rw-r--r--  1 mkvakic hpc         46 Jun  1 07:55 hello.sh

Polja poslova

Ovaj način poželjan je naspram višetrukog podnošenja (npr. for petljom) jer:

  • smanjuje opterećenje reda poslova - svaki posao će se istovremeno natjecati za resurse sa svima ostalim u redu, umjesto jedan za drugim
  • lakše upravljanje - modifikacija svih poslova moguća je pozivom glavnog (npr. 14575[]) ili pojedinačnog (npr. 14575[3]) identifikatora posla

Opis posla

Za opisivanje poslova koristi se jezik sustava PBS, dok datoteka za opis posla je standardna shell skripta. U zaglavlju svake skripte navode se PBS parametri koji detaljno opisuju posao nakon kojih slijede naredbe za izvršavanje željene aplikacije.

Struktura startne skripte:

moj_posao.pbs
#!/bin/bash

#PBS -<parametar1> <vrijednost>
#PBS -<parametar2> <vrijednost>

<naredba>


Konkretni primjer startne skripte:

moj_posao.pbs
#!/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

OpcijaArgument opcijeZnačenje opcije
-Pime_projektaSpecificiranje imena projekta
-NimePostavljanje imena posla
-qdestinacijaSpecificiranje reda posla i/ili servera
-llista_resursaTraženje resursa potrebnih za izvođenje posla
-Mlista_korisnikaPostavljanje liste primatelja mail-a
-mopcije_mailaPostavljanje vrste notifikacije mail-a
-oputanja/do/željenog/direktorijaPostavljanje imena/putanje u koje se sprema standardni izlaz
-eputanja/do/željenog/direktorijaPostavljanje 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 se 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
Primjer maila
#!/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

Početak posla
PBS Job Id: 2686.x3000c0s25b0n0.hsn.hpc.srce.hr
Job Name:   pbs.pbs
Begun execution
Završetak posla
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=2Traženje 3 komada(chunk-a) čvora po 2 jezgre (ukupno 6 jezgri)
-l select=1:ncpus=10:mem=20GBTraženje 1 komada(chunka-a) čvora sa 10 jezgri i 20GB radne memorije
-l ngpus=2Traženje 2 gpu-a

PBS varijable okoline

ImeOpis
PBS_JOBID Identifikator posla koji daje PBS kada se posao preda. Stvoreno nakon izvršenja naredbe qsub.
PBS_JOBNAMENaziv posla koji je dao korisnik. Zadani naziv je naziv podnešene skripte.
PBS_NODEFILEPopis radnih čvorova, odnosno procesorskih jezgri na kojima se izvršava posao
PBS_O_WORKDIRRadni direktorij u kojem je podnesen posao, odnosno u kojem je pozvana naredba qsub.
OMP_NUM_THREADSOpenMP varijabla koju PBS izvozi u okolinu, a koja je jednaka vrijednosti opcije ncpus iz zaglavlja PBS skripte
NCPUSBroj zatraženih jezgara. Odgovara vrijednosti iz opcije ncpus iz zaglavlja PBS skripte.
TMPDIRPutanja do scratch direktorija.

Određivanje radnog direktorija

Dok je u PBS pro 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 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. 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.

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

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 zahtijevaju 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

cray-pals

Za izvođenje aplikacija koje koriste paralelizaciju MPI (ili hibridno MPI+OMP) potrebno je podignuti modul cray-pals prije pozivanja naredbe  mpiexec , čime se osigurava ispravna integracija aplikacije sa sustavom za podnošenje poslova PBS Pro i Crayevom inačicom aplikacije MPI mpiexec baziranoj na implementaciji MPICH.


Primjer pozivanja ovog modula i izvršavanje paralelne aplikacije na dva procesora:

#!/bin/bash
#PBS -l ncpus=2
module load cray-pals
mpiexec -np 2 moja_aplikacija_MPI

Varijable okoliša koje će naredba mpiexec podesiti na svakom od rangova MPI biti će:

Varijabla okolišaOpis
PALS_APIDJedinstveni identifikator aplikacije koju ste izvršili
PALS_DEPTHBroj procesorskih jezgri po rangu
PALS_LOCAL_RANKIDLokalni rang procesa MPI (ako se posao vrši na više čvorova)
PALS_RANKIDTotalni rang procesa MPI
PALS_NODEIDRedni broj lokalnog čvora (ako se posao vrši na više njih)
PALS_SPOOL_DIRPrivremeni direktorij

Znanstvene aplikacije na Supeku i cray-pals

Znanstvene aplikacije koje su dostupne na Supeku putem modulefiles alata u sebi već pozivaju ovaj modul, stoga ga nije potrebno opet podizati.


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>

Odgađanje izvođenja

PBS pruža mogućnost izvođenja poslova u ovisnosti o drugima, što je korisno u slučajevima poput:

  • izvršavanje poslova ovisi o izlazu ili stanju prethodno izvršenog
  • aplikacija zahtijeva sekvencijalno izvođenje raznih komponenata
  • ispis podataka jednog posla može ugroziti izvođenje drugog

Direktiva koja omogućuje ovu funkcionalnost pri trenutnom podnošenju posla je:

qsub -W depend=<tip>:<ID_posla>[:<ID_posla>] ...

Gdje < tip> može biti:

  • 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 trenutnog nakon greške u završetku navedenih
    • afterany - izvršavanje trenutnog nakon završetka navedenih
  • before* - pokretanje ostalih s obzirom na trenutni
    • before - pokretanje navedenih nakon početka trenutnog
    • beforeok - pokretanje navedenih nakon usprešnog završetka trenutnog
    • beforenotok - pokretanje navedenih nakon greške u izvršavanju trenutnog
    • beforeany - pokretanje navedenih nakon završetka trenutnog
  • on:<broj> - izvršavanje posla koji će ovisiti o naknadno navedenom broju before*   tipa poslova

Posao s direktivom -W depend=... neće biti podnesen ako navedeni ID-ovi poslova ne postoje (iliti, ako nisu u redu čekanja)

Primjeri

Ako želimo da posao1 započne nakon uspješnog završetka posao0 :

[korisnik@x3000c0s25b0n0] $ qsub posao0
1000.x3000c0s25b0n0.hsn.hpc.srce.hr

[korisnik@x3000c0s25b0n0] $ qsub -W depend=afterok:1000 posao1
1001.x3000c0s25b0n0.hsn.hpc.srce.hr

[korisnik@x3000c0s25b0n0] $ qstat 1000 1001
Job id                 Name             User              Time Use S Queue
---------------------  ---------------- ----------------  -------- - -----
1000.x3000c0s25b0n0    posao0           mkvakic           00:00:00 R cpu             
1001.x3000c0s25b0n0    posao1           mkvakic                  0 H cpu


Ako želimo da posao0 započne tek nakon uspješnog završetka posao1 :

[korisnik@x3000c0s25b0n0] $ qsub -W depend=on:1 posao0
1002.x3000c0s25b0n0.hsn.hpc.srce.hr

[korisnik@x3000c0s25b0n0] $ qsub -W depend=beforeok:1002 posao1
1003.x3000c0s25b0n0.hsn.hpc.srce.hr

[korisnik@x3000c0s25b0n0] $ qstat 1002 1003
Job id                 Name             User              Time Use S Queue
---------------------  ---------------- ----------------  -------- - -----
1002.x3000c0s25b0n0    posao0           mkvakic                  0 H cpu             
1003.x3000c0s25b0n0    posao1           mkvakic           00:00:00 R cpu
  • No labels