Page tree
Skip to end of metadata
Go to start of metadata


Uvod

Za raspoređivanje i upravljanje poslovima na računalnom klasteru Isabella koristi se SGE (engl. Sun Grid Engine), klasterski sustav za upravljanje poslovima (engl. job management system, JMS). U ovom dokumentu opisano je korištenje SGE verzije 8.

Izvođenje poslova

Korisničke aplikacije (u nastavku poslovi) koji se pokreću pomoću sustava SGE moraju biti opisani startnom shell skriptom (npr. sh, bash). Unutar startne skripte, pored normalnih naredbi navode se SGE parametri. Iste parametre moguće je navesti i izvan startne skripte, prilikom podnošenja posla.

Pokretanje poslova se ostvaruje naredbom qsub:

qsub <SGE_parametri> <ime_startne_skripte>

SGE također sadrži grafičko sučelje (engl. graphical user interface, GUI) za pristup svim funkcionalnostima sustava. GUI se pokreće naredbom qmon. Korištenje GUI-ja neće biti opisivano jer unutar njega postoje upute za uporabu (tipke Help).

Opisivanje poslova

Za opisivanje poslova koristi se jezik sustava SGE, a datoteka za opis posla (startna skripta) je standardna shell skripta. U zaglavlju svake skripte navode se SGE parametri kojima se detaljno opisuje posao nakon kojih slijede normalne naredbe za izvršavanje korisničke aplikacije.

Struktura startne skripte:

moj_posao.sge
#!/bin/bash

#$ -<parametar1> <vrijednost1>
#$ -<parametar2> <vrijednost2>

<naredba1>
<naredba2>

Posao opisan ovakvom startnom skriptom podnosi se naredbom:

qsub moj_posao.sge

Naredba qsub vraća ID posla koji se koristi za kasnije nadziranje stanja posla:

Your job <JobID> ("moj_posao") has been submitted

Osnovni SGE parametri

-N <ime_posla> : ime posla koje će se prikazivati pri dohvatu informacija o poslovima 
-P <ime_projekta> : ime projekta kojemu posao pripada 
-cwd : definira da je direktorij u kojemu se nalazi startna skripta radni direktorij posla 
  • Podrazumijevani radni direktorij posla je $HOME.

-o <ime_dat> : ime datoteke u koju se sprema standardni izlaz 
-e <ime_dat> : ime datoteke u koju se sprema standardna greška 
-j y|n : omogućuje spajanje standardnog izlaza i standardne greške u istu datoteku (podrazumijevana vrijednost je n)
  • Ako se standardni izlaz i greška eksplicitno ne navedu, biti će spremljeni u datoteke:

    1. Ukoliko nije definirano ime posla:
      <radni_direktorij>/<ime_skripte>.o<id_posla>
      <radni_direktorij>/<ime_skripte>.e<id_posla>
    2. inače:
      <radni_direktorij>/<ime_posla>.o<id_posla>
      <radni_direktorij>/<ime_posla>.e<id_posla>

    Parametri -o i -e mogu pokazivati na direktorij:

    #$ -o outputDir/
    #$ -e outputDir/

    U ovom slučaju, SGE će u direktoriju outputDir kreirati datoteke sa standardnim izlazom i standardnom greškom, naziva <ime_posla>.o<JobID> i <ime_posla>.e<JobID>

    Bitno: outputDir je potrebno ručno kreirati prije podnošenja posla.

-M <emailAddress>[,<emailAddress>]…	: lista mail adresa na koju se šalju obavijesti o poslu
-m [a][b][e][n]	: definira u kojem se slučaju šalju mail obavijesti: 
					b - početak izvođenja posla, 
					a - greška u izvođenju, 
					e - završetak izvođenja posla, 
					n - ne šalji obavijesti (podrazumijevana opcija)

-now y|n : vrijednost y definira da se posao mora izvesti odmah. Kod interaktivnih poslova ovo je podrazumijevana vrijednost.
			Ukoliko SGE ne može pronaći slobodne resurse, posao se ne sprema u red nego odmah završava. 
-r y|n : treba li se posao u slučaju greške tokom izvođenja ponovno pokrenuti (podrazumijevana vrijednost je n)
-R y|n : vrijednost y definira da će SGE prilikom raspoređivanja rezervirati čvorove (bitno za višeprocesorske poslove)

-l <resurs>=<vrij>[,<resurs>=<vrij>...] : definira resurse koje posao zahtijeva. Za detalje vidi Resursi.

-pe <paralelna_okolina> <raspon> : parametar se koristi za paralelne poslove.
    Prvi parametar definira modul koji pokreće traženi oblik paralelnog posla. 
    Drugi parametar definira konkretan broj procesora ili raspon u obliku <N>,[<Ni>,...]<S>-<E>,[<Si>-<Ei>,] koji paralelni posao zahtijeva. 
    Za detalje vidi Paralelni poslovi.
-q <ime_reda>[,<ime_reda>...] : red poslova u koje se sprema posao. Ovu opciju je moguće koristiti i za zahtijevanje određenog čvora, na način da se zahtijeva 
   								lokalni red poslova (npr. a12.q@sl250s-gen8-08-01.isabella)
-t <početak>:<kraj>:<korak> : parametar definira da se radi o polju poslova. Za detalje vidi Polja poslova.

-v <var>[=<vrijednost>][,<var>[=<vrijednost>]...] : opcija defnira da SGE prilikom izvođenja posla postavi varijablu okoline. Ovaj parametar je koristan kada
													aplikacija koristi posebne varijable okoline, jer ih SGE podrazumijevano ne postavlja prilikom pokretanja posla.
-V : SGE poslu prenosi sve trenutne varijable okoline.
  • Napomena: prilikom nabrajanja vrijednosti parametara (npr. -l ili -q) nije dozvoljeno stavljati razmake.

Detaljan popis i informacije o parametrima moguće je dobiti naredbom man qsub.

SGE varijable okoline

Unutar startne skripte moguće je koristiti SGE varijable. Neke od njih su:

$TMPDIR : ime direktorija u koji se mogu spremati privremene datoteke (/scratch)
$JOB_ID : SGE identifikator posla
$SGE_TASK_ID : identifikator zadatka kod polja poslova
$SGE_O_HOST : adresa računala sa kojeg je pokrenut posao
$SGE_O_PATH : originalna vrijednost varijable okoline PATH prilikom pokretanja posla
$SGE_O_WORKDIR : direktorij iz kojeg je posao pokrenut
$SGE_STDOUT_PATH : datoteka u koju se sprema standardni izlaz
$SGE_STDERR_PATH : datoteka u koju se sprema standardna greška
$HOSTNAME : adresa računala na kojem se izvršava skripta
$JOB_NAME : ime posla
$PE_HOSTFILE : ime datoteke u kojoj su navedene adrese računala
$QUEUE : ime reda u kojem se posao izvršava

Vrste poslova

Serijski poslovi

Najjednostavniji oblik SGE poslova su serijski poslovi koji zahtijevaju samo jedan procesor za izvođenje. Za njih obično nije potrebno navoditi nikakve posebne parametre, nego se samo navodi ime programa.

Primjeri korištenja:

  1.  Primjer skripte bez dodatnih parametara

    #!/bin/bash 
    
    date
  2. Primjer jednostavne skripte s parametrima

    #!/bin/bash 
    
    #$ -N Date_SGE_script 
    #$ -o Date_SGE.out 
    #$ -e Date_SGE.err 
    
    date
  3. Primjer izvođenja programa iz trenutnog direktorija

    moj_program.sge
    #!/bin/bash
    
    #$ -N mojprog
    #$ -P local
    #$ -o mojprog.out
    #$ -e mojprog.err
    #$ -cwd
    
    mojprog

Paralelni poslovi

Za pokretanje paralelnih poslova potrebno je specificirati željenu paralelnu okolinu te broj procesorskih jezgara koji je potreban za izvođenje posla. Sintaksa je:

#$ -pe <tip_paralelnog_posla> <N>,[<Ni>,...]<S>-<E>,[<Si>-<Ei>,]

Primjeri korištenja:

  1. Posao za izvođenje zahtijeva 14 procesorskih jezgara:

    #$ -pe *mpi 14
  2. Broj dodijeljenih procesorskih jezgara može biti između 2 i 4:

    #$ -pe *mpi 2-4
  3. Broj dodijeljenih procesorskih jezgara može biti 5 ili 10:

    #$ -pe *mpi 5,10
  4. Broj dodijeljenih procesorskih jezgara može biti 1 ili između 2 i 4:

    #$ -pe *mpi 1,2-4

Više informacija o paralelnim okolinama dostupnim na Isabelli možete pronaći na stranici Redovi poslova i paralelne okoline.

Obzirom da korisnik ne mora unaprijed znati koliko procesorskih jezgara će mu biti dodijeljeno, SGE postavlja vrijednost varijable $NSLOTS na broj dodijeljenih jezgara.

Samo pokretanje paralelnih poslova je specifično jer postoje alati za pokretanje podnaslova (npr. mpirun) koji sami obavljaju raspoređivanje podposlova po čvorovima. Kada SGE dodijeli čvorove paralelnom poslu, popis čvorova spremi u datoteku $TMPDIR/machines koja se unutar skripte za opis posla prenosi kao parametar paralelnim poslovima (npr. mpirun, mpiexec, pvm...).

Primjer startne skripte za pokretanje jedne vrste paralelnog posla:

#!/bin/bash

#$ -N paralelni-posao
#$ -cwd
#$ -pe *mpi 14

mpirun_rsh -np $NSLOTS -hostfile $TMPDIR/machines ...

Polja poslova

SGE omogućava višestruko pokretanje istog posla, tzv. polja poslova. Podposlovi unutar polja se nazivaju zadaci i svaki zadatak dobiva svoj identifikator.

Prilikom pokretanja poslova korisnik specificira raspon vrijednosti identifikatora zadataka koristeći parametar -t:

#$ -t <pocetak>:<kraj>:<korak>

Vrijednost <početak> je identifikator prvog zadatka, <kraj> identifikator posljednjeg zadatka, a <korak> vrijednost za koju se uvećava svaki sljedeći identifikator između <početak> i <kraj>. SGE sprema identifikator svakog zadatka u varijablu $SGE_TASK_ID, pomoću koje korisnici mogu dodijeliti različite parametre pojedinom zadatku. Zadaci mogu biti serijski ili paralelni poslovi.

Primjeri korištenja

  1. Primjer skripte za pokretanje polja poslova od 10 serijskih poslova:

    #!/bin/bash
    
    #$ -N job_array_serial
    #$ -cwd
    #$ -o output/
    #$ -j y
    #$ -t 1-10
    
    ./starSeeker starCluster.$SGE_TASK_ID
  2. Primjer skripte za pokretanje polja poslova od 10 paralelnih poslova:

    #!/bin/bash
    
    #$ -N job_array_parallel
    #$ -cwd
    #$ -o output/
    #$ -j y
    #$ -t 1-10
    
    mpiexec -machinefile $TMPDIR/machines ./starseeker starCluster.$SGE_TASK_ID

Interaktivni poslovi

SGE omogućava pokretanje interaktivnih poslova. Za interaktivno izvođenje poslova koristi se naredba qrsh.

Preporuča se koristiti ovaj oblik poslova u slučaju kada je potrebno prevesti ili debuggirati aplikacije na čvorovima. Za razliku od korištenja ssh, na ovaj način se daje do znanja SGE-u da su čvorovi zauzeti i da ne pokreće druge poslove na njima. Prilikom interaktivnog izvođenja naredbe potrebno je navesti puni put do naredbe.

Ukoliko SGE trenutno nema slobodnih resursa i posao se želi ostaviti da čeka u redu, potrebno je navesti parametar "-now n". U suprotnom će SGE odmah završiti izvođenje posla s porukom:

Your "qrsh" request could not be scheduled, try again later.

Primjeri korištenja

  1. Izravan pristup do komandne linije testnog čvora:

    qrsh
  2. Interaktivno izvođenje naredbe

    qrsh /home/user/moja_skripta
  3. Interaktivno izvođenje aplikacije s grafičkim sučeljem

    qrsh -DISPLAY=10.1.1.1:0.0 <moja_skripta>

Napredno opisivanje poslova

Spremanje privremenih rezultata

Za spremanje privremenih rezultata koji se generiraju tijekom izvođenja posla ne preporuča se koristiti $HOME direktorij. Time se smanjuje učinkovitost aplikacije te opterećuju frontend i mreža klastera.

SGE za svaki pojedini posao kreira direktorij na disku na radnim čvorovima (/scratch), oblika /scratch/<jobID>.<taskID>.<queue>. Adresu ovog direktorija SGE sprema u varijablu $TMPDIR.

Zbog veće brzine, korištenje privremenog direktorija na /scratch disku preporuča se i za poslove koji često zahtijevaju nasumičan pristup podacima na disku, kao što su TensorFlow i PyTorch poslovi.

Ukoliko postoje naznake da će kreirane privremene datoteke prijeći 500 GB, spremanje privremenih podataka treba se vršiti na disk /shared (opisano niže).

Privremeni direktorij na /scratch disku se briše automatski po završetku izvršavanja posla.

Primjeri korištenja:

  1. Primjer jednostavnog korištenja $TMPDIR varijable:

    #!/bin/bash 
    
    #$ -N scratch_1 
    #$ -cwd 
    #$ -o output/scratch.out 
    #$ -j y
    #$ -l scratch=50 
    
    cd $TMPDIR 
    pwd > test 
    cp test $SGE_O_WORKDIR
  2. Primjer kopiranja podataka na scratch disk:

    #!/bin/bash 
    
    #$ -N scratch_2 
    #$ -cwd 
    #$ -o output/scratch.out 
    #$ -j y
    #$ -l scratch=50 
    
    mkdir -p $TMPDIR/data 
    cp -r $HOME/data/* $TMPDIR/data 
    
    python3.5 main.py $TMPDIR/data

Ukoliko privremeni podaci premašuju 500 GB potrebno je koristiti /shared. Za razliku od scratch-a, direktorij na shared-u je potrebno ručno kreirati i nema automatskog uklanjanja direktorija.

Primjer korištenja:

#!/bin/bash 

#$ -N shared
#$ -cwd 
#$ -o output/shared.out 
#$ -j y 

mkdir -p /shared/$USER/$TMPDIR
cd /shared/$USER/$TMPDIR

pwd > test
cp test $SGE_O_WORKDIR

Resursi

Prilikom pokretanja poslova korisnik može detaljnije opisati koji uvjeti trebaju biti ispunjeni za posao. Primjerice, moguće je zahtijevati samo određenu arhitekturu radnog čvora, količinu memorije ili vrijeme izvršavanja. Navođenje potrebnih resursa omogućava bolje raspoređivanje poslova, a poslovima daje veći prioritet (vidi LINK).

Potrebni resursi se navode pomoću parametra -l:

#$ -l <resurs>=<vrijednost>

Resursi koji definiraju potrebe posla:

arch : arhitektura čvora (npr. lx26-x86, lx25-amd64)
hostname : adresa čvora (npr. c4140-01.isabella)

Resursi koji postavljaju stvarna ograničenja na poslove:

vmem : količina virtualne memorije (format: <num>K|M|G)
rss : količina stvarne memorije
stack : veličina stoga
data : ukupna količina memorije (bez stoga)
fsize : ukupna veličina datoteka
cput : procesorsko vrijeme (format: [<hours>:<min>:]<sec>)
rt : stvarno vrijeme
scratch : prostor na scratch disku izrazen u GB

Vrijednosti ovih resursa treba pažljivo definirati (npr. uzimati 50% veće vrijednosti od očekivanog). U slučaju prekoračenja posao će biti zaustavljen sa signalom "segmentation fault".

Vrijednosti se ne mogu mijenjati za aktivne poslove.

Vrijednosti resursa definirane u startnoj skripti posla postavljaju se po procesu. Na primjer, ukoliko korisnik na jednom čvoru zahtijeva 3 procesorske jezgre, vrijednosti svih zatraženih resursa biti će pomnožene s 3.

Primjeri korištenja:

  1. Primjer posla koji zahtijeva 20 CPU jezgara i 10 GB radne memorije po procesu (poslu će ukupno biti dodijeljeno 200 GB radne memorije):

    #$ -pe *mpi 20
    #$ -l memory=10
  2. Posao zahtijeva 100 GB prostora na scratchu:

    #$ -pe *mpisingle 4
    #$ -l scratch=25

Red poslova

SGE podržava više redova poslova, za različite vrste i maksimalna trajanja poslova, za različite vrste poslova (interaktivni, vSMP poslovi, ...) itd.

Željeni red poslova može se definirati parametrom -q:

#$ -q <queueName>

Popis dostupnih redova poslova na Isabelli može se pronaći na ???Redovi poslova i paralelne okoline???.

Obavijesti o stanju posla

SGE podržava slanje e-mail obavijesti o promjeni stanja posla.

Parametar -M određuje na koju email adresu će stizati obavijesti o stanju poslova:

#$ -M <email_adresa> 

Parametar -m određuje u kojim slučajevima će se slati obavijest:

#$ -m [b][a][e][n]
  • b - početak izvođenja
  • a - greška u izvođenju
  • e - završetak izvođenja
  • n - ne slati obavijesti (pretpostavljena opcija)

Primjer korištenja:

#$ -m ae
#$ -M moj@mail.com

Obavijest će biti poslana na adresu moj@mail.com prilikom prekida ili završetka posla.

Praćenje i upravljanje izvođenjem poslova

Prikaz stanja poslova

Za prikaz stanja poslova koristi se SGE-ova naredba qstat. Sintaksa naredbe je:

$ qstat <opcije>

Izvršavanjem naredbe qstat bez dodatnih opcija dobiva se ispis svih trenutnih korisnikovih poslova:

[tsmolcic@teran ~]$ qstat
job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
 131982 0.00001 md5-10k.0  tsmolcic     r     05/28/2019 06:24:06 gpu.0.q@c4140-03.isabella          1
 131988 0.00001 md5-10k.2  tsmolcic     r     05/28/2019 09:29:26 gpu.2.q@c4140-01.isabella          1
 131990 0.00001 md1-5k.3   tsmolcic     r     05/28/2019 09:29:41 gpu.3.q@c4140-01.isabella          1
 131991 0.00001 md10-15.4  tsmolcic     r     05/28/2019 10:18:08 gpu.1.q@c4140-01.isabella          1
 131994 0.04119 md1kp.5    tsmolcic     qw    05/27/2019 13:14:14                                   20
 131996 0.00005 md1-5k.6   tsmolcic     qw    05/27/2019 13:16:30                                    1

Neke od važnijih opcija su:

-s [r|p|s|h] : filtrira poslove prema stanju: r - aktivni, s - zaustavljeni, h - zaustavljeni u redu, p - u redu čekanja
-j [job_ID] : detaljan prikaz stanja posla (ukoliko se ne navede job_ID, prikazuju se podaci o svim aktivnim poslovima)
-f : prikazuju se detaljne informacije o opterećenosti čvorova i rasporedu poslova na čvorove
-F : detaljan prikaz podataka o čvorovima
-u <ime_korisnika> : prikazuju se samo poslovi od korisnika <ime_korisnik> (* - za sve korisnike)
-q [ime_reda] : naredba dohvaća isključivo informacije o redovima poslova
-g c : dohvat zbirnih informacija o redovima poslova: ukupno opterećenje reda, ukupan broj čvorova u redu, broj zauzetih
		i slobodnih čvorova te broj čvorova u posebnim stanjima
-g t : u prikazu poslova su označeni slave i master zadaci
-l <resurs>=<vrijednost> : filtriranje poslova prema resursima
-ext : dodatne informacije o poslovima
-pri : detaljni podaci o prioritetima poslova

Opcije naredbe qstat je moguće kombinirati što je naročito bitno kada je potrebno filtrirati kroz nekoliko stotina poslova.

Primjeri korištenja:

  1. Prikaz svih poslova u redu čekanja

    $ qstat -u "*" -s p
  2. Prikaz poslova svih korisnika koji se trenutno izvršavaju i zahtijevali su paralelnu okolinu a16-mpi

    $ qstat -u "*" -s r -pe a16-mpi
  3. Prikaz svih poslova i čvorova korisnika pero

    $ qstat –s r –f –u pero
  4. Prikaz svi poslova koji se trenutno izvršavaju na čvorovima s grafičkim procesorima:

    $ qstat –u "*" -q gpu.*.q

Prikaz radnih čvorova

Za ispis broja procesora, jezgri i količine radne memorije po čvoru koristi se naredba

$ qhost

Naredom se mogu ispisati vrijednosti raspoloživih resursa po radnim čvorovima:

$ qhost -F vendor,scratch,memory

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>

Tako zaustavljen posao može se vratiti u red čekanja naredbom

$ qrls <ID_posla>

Veću kontrolu nad poslom omogućava naredba qmod. Naredba omogućava privremeno zaustavljanje aktivnih poslova i to na način da poslu pošalje signal SIGSTOP. Posao će preći u neaktivno stanje (T), ali neće osloboditi resurse (memoriju, opisnike datoteka). Naredba omogućava i spremanje stanja procesa na disk (checkpointing) za poslove koji imaju tu mogućnost. Nadalje pomoću qmod naredbe korisnik može zaustaviti aktivni proces i vratiti ga natrag u red poslova. Parametri naredbe su:

-c : naredba izvodi spremanje stanja proces
-f : parametar definira da se naredba izvede bez obzira da li je to moguće ili ne 
	(korisno kod vraćanja u red poslova koji su označeni s parametrom -r n).
-r: naredba zaustavlja posao i vraća ga natrag u red.
-s : naredba zaustavlja izvođenje aktivnog procesa.
-us : naredba nastavlja izvođenje zaustavljenog aktivnog posla.

Posao se u potpunosti zaustavlja ili miče iz reda čekanja naredbom:

$ qdel <ID_posla>

Moguće je zaustaviti sve poslove korisnika:

$ qdel -u <ime_korisnika>

Za zaglavljene poslove treba koristiti prisilno zaustavljanje:

$ qdel -f <ID_posla>

Dohvat informacija o završenim poslovima

Za dohvat informacija o završenim poslovima koristi se naredba qacct. Sintaksa je:

$ qacct <opcije>

Najčešći primjer korištenja ove naredbe je

$ qacct -j <ID_posla>

kojom se ispisuju svi podaci o završenom poslu.

Ostale korisne opcije naredbe qacct su:

-j <ID_posla> : detaljan opis pojedinih poslova
-h <adresa_čvora> : statistike za pojedine čvorove
-q <ime_reda> : statistike za pojedine redove
-o <ime_korisnika> : statistike za pojedine korisnike
-pe <ime_paralelne_okoline> : statistike za pojedine paralelne okoline
-slots <broj_procesora> : statistike za poslove za određeni broj procesora
-P <projekt> : prikaz sažetka potrošnje definiranog projekta

Primjeri korištenja:

  1. Detaljne informacije o svim poslovima izvršenim na klasteru (oprez: velika količina podataka):

    $ qacct -j
  2. Prikaz informacija o svim poslovima definiranog korisnika:

    $ qacct -j -o <korisnik>

    Prikaz sažetka potrošnje računalnih resursa definiranog korisnika (ako se ne definira <korisnik>, prikazuju se podaci za sve korisnike):

    $ qacct -o <korisnik>
  3. Prikaz informacija o svim poslovima za definirani projekt:

    $ qacct -j -P <projekt>

    Prikaz sažetka potrošnje definiranog projekta (ako se ne definira <projekt>, prikazuju se podaci za sve projekte):

    $ qacct -P <projekt>



  • No labels