Versions Compared

Key

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

...

SGE (engl. Sun Grid Engine) je klasterski sustav za upravljanje poslovima (engl. job management system, JMS). Više informacija o sustavu SGE možete pronaći u izvještaju http://www.srce.hr/crogrid/clusters.pdf te SGE-jevim službenim stranicama http://gridengine.sunsource.net/. U ovom dokumentu je opisano korištenje SGE verzije 6.

Poslovi se spremaju u redove poslova. Ukoliko se eksplicitno ne navede red, posao se stavlja u podrazumijevani red poslova. Obično su pojedini redovi namijenjeni za određene vrste poslova (npr. kraće ili duže poslove). SGE sadrži dva oblika redova: globalni i lokalni. Globalni redovi (analogno redovima kod PBS-a) obuhvaćaju skup čvorova, a lokalni predstavljaju samo jedan čvor. U starijim verzijama SGE-a (do uključivo verzije 5.3) nisu postojali globalni redovi poslova. Lokalni redovi imaju naziv <globalni_red>@<puno_ime_cvora>.

Izvođenje poslova

Korisničke aplikacije (u nastavku poslovi) koji se izvode pomoću sustava SGE moraju biti opisane startnom shell skriptom (npr. sh, bash). Unutar startne skripte, pored normalnih naredbi navode se parametri za SGE. Također je moguće koristiti SGE varijable okoline opisane u odjeljku SGE varijable okoline.

Pokretanje poslova se ostvaruje naredbom qsub:

Code Block
languagetext
qsub <SGE_parametri> <ime_skripte>

SGE parametre je, osim u skripti, moguće navesti prilikom poziva naredbe qsub.

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 samog njega postoje upute za uporabu (tipke Help).

SGE okolina i parametri

Prilikom izvođenja poslova potrebno je definirati kojem projektu poslovi pripadaju. Na taj način se prati trošenje resursa od strane pojedinih projekata i omogućava pravedno raspoređivanje (engl. fair share) poslova među njima.

SGE za radni direktorij uzima $HOME. Ukoliko se želi promijeniti direktorij potrebno je to napraviti u skripti. Ako se eksplicitno ne navedu standardni izlaz i greška, bit će spremljeni u datoteke: <radni_direktorij>/<ime_skripte>.o<id_posla> i <radni_direktorij>/<ime_skripte>.e<id_posla>.

SGE parametri omogućavaju korisniku da SGE-u detaljnije opiše svoj posao. Oni se unutar shell skripte navode u sljedećem obliku:

Code Block
languagetext
#$ -<parametar> <vrijednost>

Osnovni SGE parametri koje se preporuča postaviti su:

Izvođenje poslova

...

Korisničke aplikacije (u nastavku poslovi) koji se izvode pomoću sustava SGE moraju biti opisane startnom shell skriptom (npr. sh, bash). Unutar startne skripte, pored normalnih naredbi navode se parametri za SGE. Također je moguće koristiti SGE varijable okoline opisane u odjeljku SGE varijable okoline.

Pokretanje poslova se ostvaruje naredbom qsub:

Code Block
languagetext
qsub <SGE_parametri> <ime_skripte>

SGE parametre je, osim u skripti, moguće navesti prilikom poziva naredbe qsub.

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 samog njega postoje upute za uporabu (tipke Help).

SGE okolina i parametri

Prilikom izvođenja poslova potrebno je definirati kojem projektu poslovi pripadaju. Na taj način se prati trošenje resursa od strane pojedinih projekata i omogućava pravedno raspoređivanje (engl. fair share) poslova među njima.

SGE za radni direktorij uzima $HOME. Ukoliko se želi promijeniti direktorij potrebno je to napraviti u skripti. Ako se eksplicitno ne navedu standardni izlaz i greška, bit će spremljeni u datoteke: <radni_direktorij>/<ime_skripte>.o<id_posla> i <radni_direktorij>/<ime_skripte>.e<id_posla>.

SGE parametri omogućavaju korisniku da SGE-u detaljnije opiše svoj posao. Oni se unutar shell skripte navode u sljedećem obliku:

Code Block
languagetext
#$ -<parametar> <vrijednost>

Osnovni SGE parametri koje se preporuča postaviti su:

Panel
-cwd : parametar definira da je trenutni direktorij radni direktorij posla.
-e <ime_dat>: ime datoteke u koju se sprema standardna greška.
-l <resurs>=<vrij>[,<resurs>=<vrij>...] : definira resurse koje posao zahtjeva (za razliku od PBS-a, ova opcija se ne koristi kod paralelnih poslova).
-M <email_adresa>[,<email_adresa>...] : lista mail adresa na koju se šalju obavijesti o poslu.
-m [a][b][e] : parametar definira u kojem slučaju se šalje obavijest: b - početak izvođenja, e - završetak izvođenja, a - greška u izvođenju posla.
-now y|n : vrijednost y definira da se posao mora izvesti odmah. Ukoliko SGE ne može pronaći slobodne resurse, 
           posao se ne sprema u red, nego odmah završava. Kod interaktivnih  poslova podrazumijevana vrijednost 
           
Panel
-cwd : parametar definira da je trenutni direktorij radni direktorij posla.
-e <ime_dat>: ime datoteke u koju se sprema standardna greška.
-l <resurs>=<vrij>[,<resurs>=<vrij>...] : definira resurse koje posao zahtjeva (za razliku od PBS-a, ova opcija se ne koristi kod paralelnih poslova).
-M <email_adresa>[,<email_adresa>...] : lista mail adresa na koju se šalju obavijesti o poslu.
-m [a][b][e] : parametar definira u kojem slučaju se šalje obavijest: b - početak izvođenja, e - završetak izvođenja, a - greška u izvođenju posla.
-now y|n : vrijednost y definira da se posao mora izvesti odmah. Ukoliko SGE ne može pronaći slobodne resurse, 
           posao se ne sprema u red, nego odmah završava. Kod interaktivnih  poslova podrazumijevana vrijednost 
           je y, a kod ostalih n.
-N <ime_prog> : ime programa koje će se prikazati pri dohvatu informacija o poslovima.
-o <ime_dat>: ime datoteke u koju se sprema standardni izlaz.
-P <ime_projekta>: ime projekta kojemu posao pripada.
-pe <paralelna_okolina> <raspon_cvorova> : 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 zahtjeva. 
    Za detalje vidi odjeljak 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 zahtjeva 
   lokalni red poslova (npr.  all.q@compute-0-0.local).
-r y|n : da li se prilikom greške posao ponovno pokreće (podrazumijevana vrijednost: no).
-t <početak>:<kraj>:<korak> : parametar definira da se radi o polju poslova. 
   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>.
-v <var>[=<vrijednost>][,<var>[=<vrijednost>]...]: opcija definira SGE-u da uzme 
   trenutne vrijednosti varijable okoline ili da ih postavi na određenu vrijednost prilikom izvođenja posla. 
   Ovaj parametar je koristan kada aplikacija koristi posebne varijable okoline, 
   jer ih SGE podrazumijevano ne postavlja prilikom pokretanja posla.
-V : opcija definira SGE-u da poslu prenese sve trenutne varijable okoline.

...

Kada SGE dodijeli čvorove paralelnom poslu, popis čvorova spremi u datoteku $TMPDIR/machines. Unutar SGE skripte datoteka se prenosi kao parametar paralelnim programima (npr. pvm, mpiexec). Korisnici mogu iskoristiti varijablu za vlastito raspoređivanje procesa, primjerice sa alatom ssh. Obzirom da korisnik ne mora unaprijed znati koliko procesora će mu biti dodijeljeno, SGE postavlja vrijednost varijable $NSLOTS na broj dodijeljenih procesora.

Kako kod SGE-a nema mogućnosti definiranja načina raspoređivanja procesa paralelnog posla po čvorovima, definirana su tri oblika paralelnih poslova:

Panel
*mpi: SGE nastoji rasporediti procese na istom čvoru 
     (prvo će ispuniti sva slobodna mjesta na određenom čvoru prije nego pređe na sljedeći)  
*mpisingle: SGE će raspodijeliti sve procese na istom čvoru
*mpifull: SGE će zauzeti cijele čvorove
broj jezgri treba biti djelitelj broj jezgri na čvoru (ovisno o redu poslova)

Primjeri korištenja različitih MPI okolina nalazi se na stranici Korisničke aplikacije i knjižnice.

Paralelne okoline

S početkom od rujna 2018. paralelne okoline su podijeljene po redovima:

  • a16.q
    • a16-mpi – općeniti paralelni poslovi
    • a16-mpisingle – sve jezgre se dodjeljuju na jednom radnom čvoru
    • a16-mpifull - jezgre se dodijeljuju 16 po radnom čvoru (broj jezgri mora biti djelitelj od 16)
  • p20.q
    • p20-mpi – općeniti paralelni poslovi
    • p20-mpisingle – sve jezgre se dodjeljuju na jednom radnom čvoru
    • p20-mpifull - jezgre se dodijeljuju 20 po radnom čvoru (broj jezgri mora biti djelitelj od 20)
  • p28.q
    • p28-mpi – općeniti paralelni poslovi
    • p28-mpisingle – sve jezgre se dodjeljuju na jednom radnom čvoru
    • p28-mpifull - jezgre se dodijeljuju 28 po radnom čvoru (broj jezgri mora biti djelitelj od 28)
  • p28-big.q
    • p28-big-mpifull - jezgre se dodijeljuju 28 po radnom čvoru (broj jezgri mora biti djelitelj od 28)
  • vsmp.q
    • vsmp – jezgre se dodjeljuju na ScaleMP vSMP čvoru
  • test.q
    • test – pristup testnom čvoru

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

Polja poslova

SGE omogućava izvođenje polja poslova, tj. višestruko pokretanje istog posla. Podposlovi unutar polja se nazivaju zadaci. Svaki zadatak dobija svoj identifikator. Prilikom pokretanja polja poslova korisnik može definirati raspon vrijednosti identifikatora zadataka. Polje poslova i raspon vrijednosti identifikatora se definira parametrom -t:

Code Block
languagetext
-t <početak>:<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>.

Korisnik može koristiti SGE varijablu okoline $SGE_TASK_ID za dohvat identifikatora zadatka. Pomoću identifikatora korisnici mogu dodijeliti različite parametre pojedinom zadatku (vidi primjere korištenja). Zadaci mogu biti i paralelni poslovi, pri čemu je potrebno navesti parametre prema uputama iz prethodnog poglavlja.

Primjeri korištenja

1. Primjer skripte za pokretanje polja poslova koje se sastoji od 10 zadataka

Code Block
languagetext
#$ -N starSeeker
#$ -o ./taskJobOutput/
#$ -e taskJobErr
#$ -t 1-10
./starSeeker starCluster.$SGE_TASK_ID

2. Primjer skripte za pokretanje polja paralelnih poslova koje se sastoji od 10 zadataka

Code Block
languagetext
#$ -N starSeeker
#$ -o ./taskJobOutput/
#$ -e taskJobErr
#$ -pe p20-mpi 4
#$ -t 1-10
mpiexec -machinefile $TMPDIR/machines ./starSeeker starCluster.$SGE_TASK_ID

Definiranje dodatnih karakteristika poslova

Prilikom pokretanja poslova korisnik može detaljnije opisati koji uvjeti trebaju biti ispunjeni za posao. Primjerice, moguće je zahtijevati samo određene redove, arhitekturu, količinu memorije ili procesorskog vremena. Opisivanje poslova je iznimno bitno za rad sustava za upravljanje poslovima jer omogućava učinkovitije raspoređivanje poslova.

Parametri se navode pomoću opcije -lUkoliko se želi pokrenuti posao u bilo kojem redu potrebno je koristiti opciju:

Code Block
languagetext
#$ -pe *mpi X l <naziv_parametra>=<vrijednost_parametra>[,<naziv_parametra>=<vrijednost_parametra>...]

Parametri koji samo definiraju potrebe poslaili za mpisingle posao:

Code Block
languagetext
-pe *mpisingle X 

Polja poslova

SGE omogućava izvođenje polja poslova, tj. višestruko pokretanje istog posla. Podposlovi unutar polja se nazivaju zadaci. Svaki zadatak dobija svoj identifikator. Prilikom pokretanja polja poslova korisnik može definirati raspon vrijednosti identifikatora zadataka. Polje poslova i raspon vrijednosti identifikatora se definira parametrom -t:

Code Block
languagetext
-t <početak>:<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>.

Korisnik može koristiti SGE varijablu okoline $SGE_TASK_ID za dohvat identifikatora zadatka. Pomoću identifikatora korisnici mogu dodijeliti različite parametre pojedinom zadatku (vidi primjere korištenja). Zadaci mogu biti i paralelni poslovi, pri čemu je potrebno navesti parametre prema uputama iz prethodnog poglavlja.

Primjeri korištenja

1. Primjer skripte za pokretanje polja poslova koje se sastoji od 10 zadataka

Code Block
languagetext
#$ -N starSeeker
#$ -o ./taskJobOutput/
#$ -e taskJobErr
#$ -t 1-10
./starSeeker starCluster.$SGE_TASK_ID
arch : arhitektura čvorova. Moguće vrijednosti ovih parametara moguće je vidjeti iz qstat -f naredbe.
mem_free : količina slobodne stvarne memorije
swap_free : količina slobodne swap memorije
virtual_free : zbroj stvarne i swap memorije
mem_total : ukupna količina stvarne memorije
swap_total : ukupna količina swap memorije
virtual_total : zbroj slobodne stvarne i swap memorije
hostname: ime jednog ili više čvorova na kojima se želi izvesti posao.

Parametri koji postavljaju stvarna ograničenja na poslove:2. Primjer skripte za pokretanje polja paralelnih LAM poslova koje se sastoji od 10 zadataka

Code Block
languagetext
#$vmem: -N starSeeker
#$ -o ./taskJobOutput/
#$ -e taskJobErr
#$ -pe mpi 4
#$ -t 1-10
mpiexec -machinefile $TMPDIR/machines ./starSeeker starCluster.$SGE_TASK_ID

Definiranje dodatnih karakteristika poslova

Prilikom pokretanja poslova korisnik može detaljnije opisati koji uvjeti trebaju biti ispunjeni za posao. Primjerice, moguće je zahtijevati samo određene redove, arhitekturu, količinu memorije ili procesorskog vremena. Opisivanje poslova je iznimno bitno za rad sustava za upravljanje poslovima jer omogućava učinkovitije raspoređivanje poslova.

Parametri se navode pomoću opcije -l:

Code Block
languagetext
#$ -l <naziv_parametra>=<vrijednost_parametra>[,<naziv_parametra>=<vrijednost_parametra>...]

Parametri koji samo definiraju potrebe posla:

Code Block
languagetext
arch : arhitektura čvorova. Moguće vrijednosti ovih parametara moguće je vidjeti iz qstat -f naredbe.
mem_free : količina slobodne stvarne memorije
swap_free : količina slobodne swap memorije
virtual_free : zbroj stvarne i swap memorije
mem_total : ukupna količina stvarne memorije
swap_total : ukupna količina swap memorije
virtual_total : zbroj slobodne stvarne i swap memorije
hostname: ime jednog ili više čvorova na kojima se želi izvesti posao.

Parametri koji postavljaju stvarna ograničenja na poslove:

Code Block
languagetext
vmem:   virtualna memorija je zbroj stvarne (RAM) i swap memorije koju procesor koristi.
rss:    stvarna memorija
core:   veličina core datoteke u slučaju da se desi core dump
stack:  veličina stoga programa. Ovaj parametar se postavlja na vmem ako nije naveden.
data:   veličina ukupne memorije koju proces zahtjeva (izuzev stoga). Ovaj parametar se postavlja na vmem ako nije naveden.
fsize:  količina HD koju proces smije potrošiti
cput:   stvarno vrijeme koje proces "provede" u procesoru
rt:     ukupno vrijeme izvođenja procesa

BITNO! SGE koristi alat ulimit za postavljanje ograničenja za poslove (resursi: rss, rt, cpu, data, core, stack, vmem i fsize). Posao će biti zaustavljen sa signalom segmentation fault ukoliko prekorači ograničenja. Stoga je potrebno pažljivo definirati vrijednosti (npr. uzimati 50% veće vrijednosti od očekivanog).

BITNO! Stvarna ograničenja se postavljaju po procesu. Na primjer, ukoliko korisnik na jednom čvoru zahtjeva 3 procesora, vrijednosti ograničenja će biti pomnožene s 3.

-l memory

Kako bi učinkovitije rasporedili željeni posao, jedna od korisnijih karakteristika je -l memory. Ova opcija je izuzetno korisna za poslove koji zahtjevaju veliku količinu radne memorije. Željena količina radne memorije izražava se u Gb koje posao treba za izvođenje jednog procesa! Primjer za posao koji zahjeva 20 jezgri i 200Gb RAM-a:

Code Block
languagetext
#$ -pe mpi 20
#$ -l memory=10

-l scratch

Karakteristiku -l scratch koristimo za poslove koji zahtjevaju veliku količinu prostora na scratchu. Kao i u slučaju karakteristike -l memory, navodi se količina memorije izražena u Gb koje posao treba za izvođenje jednog procesa. Primjer za posao koji zahtjeva 4 jezgre i 200 Gb scratch prostora:

Code Block
languagetext
#$ -pe mpisingle 4
#$ -l scratch=50

SGE varijable okoline

Unutar skripte moguće je koristiti SGE varijable. Primjeri SGE varijabli su već spomenute varijable $NSLOTS i $TMPDIR. Neke od SGE varijabla su:

virtualna memorija je zbroj stvarne (RAM) i swap memorije koju procesor koristi.
rss:    stvarna memorija
core:   veličina core datoteke u slučaju da se desi core dump
stack:  veličina stoga programa. Ovaj parametar se postavlja na vmem ako nije naveden.
data:   veličina ukupne memorije koju proces zahtjeva (izuzev stoga). Ovaj parametar se postavlja na vmem ako nije naveden.
fsize:  količina HD koju proces smije potrošiti
cput:   stvarno vrijeme koje proces "provede" u procesoru
rt:     ukupno vrijeme izvođenja procesa

BITNO! SGE koristi alat ulimit za postavljanje ograničenja za poslove (resursi: rss, rt, cpu, data, core, stack, vmem i fsize). Posao će biti zaustavljen sa signalom segmentation fault ukoliko prekorači ograničenja. Stoga je potrebno pažljivo definirati vrijednosti (npr. uzimati 50% veće vrijednosti od očekivanog).

BITNO! Stvarna ograničenja se postavljaju po procesu. Na primjer, ukoliko korisnik na jednom čvoru zahtjeva 3 procesora, vrijednosti ograničenja će biti pomnožene s 3.

-l memory

Kako bi učinkovitije rasporedili željeni posao, jedna od korisnijih karakteristika je -l memory. Ova opcija je izuzetno korisna za poslove koji zahtjevaju veliku količinu radne memorije. Željena količina radne memorije izražava se u Gb koje posao treba za izvođenje jednog procesa! Primjer za posao koji zahjeva 20 jezgri i 200Gb RAM-a:

Code Block
languagetext
#$ -pe mpi 20
#$ -l memory=10

-l scratch

Karakteristiku -l scratch koristimo za poslove koji zahtjevaju veliku količinu prostora na scratchu. Kao i u slučaju karakteristike -l memory, navodi se količina memorije izražena u Gb koje posao treba za izvođenje jednog procesa. Primjer za posao koji zahtjeva 4 jezgre i 200 Gb scratch prostora:

Code Block
languagetext
#$ -pe mpisingle 4
#$ -l scratch=50

SGE varijable okoline

Unutar skripte moguće je koristiti SGE varijable. Primjeri SGE varijabli su već spomenute varijable $NSLOTS i $TMPDIR. Neke od SGE varijabla su:

Code Block
languagetext
$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 
Code Block
languagetext
$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_ID : SGE identifikator posla
$JOB_NAME : ime posla
$PE_HOSTFILE : ime datoteke u kojoj su navedene adrese računala
$QUEUE : ime reda u kojem se posao izvršava
$SGE_TASK_ID : identifikator zadatka kod polja poslova
$TMPDIR : ime direktorija u koji se mogu spremati privremene datoteke (/scratch).

Redovi poslova

Radni čvorovi Isabelle grupirani su u više redova poslova:

  • a16.q
    • red za sve poslove bez ograničenja
    • poslužitelji HP ProLiant SL250s
  • p20.q
    • red za paralelne poslove trajanja do 7 dana
    • poslužitelji HP ProLiant SL230s Gen8
  • p28.q
    • red za paralelne poslove trajanja do 7 dana
    • poslužitelji Lenovo NeXtScale nx360 M5
  • p28-big.q
    • red za paralelne poslove koji
      • zahtjevaju broj jezgri koji je djelitelj broja 28 i
      • trajanja do 7 dana
    • poslužitelji Lenovo NeXtScale nx360 M5
  • test.q
    • red za potrebe testiranja aplikacija trajanje do 24 sata
    • poslužitelji HP ProLiant SL250s
  • vsmp.q
    • red za korištenje ScaleMP vSMP čvora, tj poslove koji zahtjevaju veliku količinu radne memorije ili procesorskih jezgri na jednom čvoru
    • trajanje poslova ograničeno je na 7 dana.
    • poslužitelji HP ProLiant SL230s Gen8.
 identifikator zadatka kod polja poslova
$TMPDIR : ime direktorija u koji se mogu spremati privremene datoteke (/scratch).

Gdje spremati privremene podatke i rezultate?

...

Code Block
languagetext
-j [ime_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

Primjeri korištenja

1. Dohvat detaljnih informacija o poslovima korisnika toni koji su koristili 4 procesora:

...