...
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
#$ -<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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
#$ -<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 |
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 | ||
---|---|---|
| ||
-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 | ||
---|---|---|
| ||
#$ -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 | ||
---|---|---|
| ||
#$ -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 | ||
---|---|---|
| ||
#$ -pe *mpi X l <naziv_parametra>=<vrijednost_parametra>[,<naziv_parametra>=<vrijednost_parametra>...] |
Parametri koji samo definiraju potrebe poslaili za mpisingle posao:
Code Block | ||
---|---|---|
| ||
-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 | ||
---|---|---|
| ||
-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 | ||
---|---|---|
| ||
#$ -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 | ||
---|---|---|
| ||
#$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 | ||
---|---|---|
| ||
#$ -l <naziv_parametra>=<vrijednost_parametra>[,<naziv_parametra>=<vrijednost_parametra>...]
|
Parametri koji samo definiraju potrebe posla:
Code Block | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
#$ -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 | ||
---|---|---|
| ||
#$ -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 | ||
---|---|---|
| ||
#$ -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 | ||
---|---|---|
| ||
#$ -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 | ||
---|---|---|
| ||
$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 | ||
| ||
$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
- red za paralelne poslove koji
- 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 | ||
---|---|---|
| ||
-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:
...