Torque i Maui
Izvor: CRO NGI
Sadržaj |
Uvod
PBS (engl. Portable Batching System) je jedan od starijih klasterskih sustava za upravljanje poslovima. Danas postoje tri verzije ovog sustava: open-source OpenPBS i Torque te komercijalni PBSPro. Prilikom izrade ove dokumentacije korišten je Torque, ali veći dio je primjenjiv i na ostale dvije verzije. Stoga se u cijelom dokumentu koristi stari naziv PBS. Torque se uobičajeno koristi zajedno s sustavom za raspoređivanje poslova Maui. Maui je omogućava definiranje različitih politika korištenja čvorova. Pored toga Maui sadrži skup naredbi za upravljanje poslovima i dohvat informacija o klasteru. Više informacija o sustavima Torque i Maui možete pronaći u izvještaju http://www.srce.hr/crogrid/clusters.pdf te njihovim službenim stranicama http://www.clusterresources.com/products/torque/ i http://www.clusterresources.com/products/maui/.
Poslovi se spremaju u redove poslova. Ukoliko se eksplicitno navede red posao se stavlja u podrazumijevani red poslova. Obično su pojedini poslovi namijenjeni za određene vrste poslova (npr. kraće ili duže poslove). Prilikom izvođenja poslova potrebno je definirati kojem projektu (accountu) 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.
Izvođenje poslova
Korisničke aplikacije (u nastavku poslovi) koji se izvode pomoću PBS sustava moraju biti opisani shell skriptom (npr. sh, bash). Unutar skripte, pored normalnih naredbi navode se parametri za PBS. Također je moguće koristiti PBS varijable opisane u odjeljku PBS varijable okoline.
Pokretanje se ostvaruje naredbom qsub:
qsub <PBS_parametri> <ime_skripte>
PBS parametre je, osim u skripti, moguće navesti prilikom poziva naredbe qsub.
PBS također sadrži GUI za pokretanje poslova. GUI se pokreće naredbom xpbs. Korištenje GUI-ja neće biti opisivano jer unutar samog njega postoje upute za uporabu (tipke Help).
PBS okolina i parametri
PBS za radni direktorij uzima $HOME. Ukoliko se želi promijeniti direktorij potrebno je to napraviti u skripti. Moguće je koristiti varijablu okoline $PBS_O_WORKDIR koja sadrži naziv trenutnog direktorija. Ukoliko 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>.
PBS parametri omogućavaju korisniku da PBS-u detaljnije opiše svoj posao. Oni se unutar shell skripte navode u sljedećem obliku:
#PBS -<parametar> <vrijednost>
Osnovni PBS parametri koje se preporuča postaviti su:
-A <ime_projekta>: ime projekta kojemu posao pripada -e <ime_dat>: ime datoteke u koju se sprema standardna greška (stderr) -l nodes=<n>:ppn=<n>: broj cvorova koji se zahtjeva u slučaju paralelnih poslova. Ova opcija se koristi i za definiranje ostalih resursa (vidi Definiranje dodatnih karakteristika poslova) -M <email_adresa>[,<email_adresa>...] : lista mail adresa na koju se šalju obavijesti o poslu -m [a][b][e]: opcija definira u kojem slučaju se šalje mail: b - početak izvođenja, e - završetak izvođenja, a - greška u izvođenju posla -N <ime_prog>: ime programa koje će se prikazati u prikazu informacija o poslovima -o <ime_dat>: ime datoteke u koju se sprema standarni izlaz (stdout) -q <ime_reda>: red poslova u koje se sprema posao -r y|n : da li se prilikom greške posao ponovno pokreće (default:no) -v <var>[=<vrijednost>][,<var>[=<vrijednost>]...]: opcija definira PBS-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 PBS podrazumijevano ne postavlja prilikom pokretanja posla.
Detaljan popis i informacije o parametrima moguće je dobiti naredbom man qsub.
2.2 Serijski poslovi
Najjednostavniji oblik PBS poslova su serijski poslovi koji zahtijevaju samo jedan procesor za izvođenje. Za njih 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 (posao se sprema u red batch)
#!/bin/bash #PBS -N Date_PBS_script #PBS -A local #PBS -q batch #PBS -o Date_PBS.out #PBS -e Date_PBS.err date
3. Primjer izvođenja programa iz trenutnog direktorija
#!/bin/bash #PBS -N mojprog #PBS -A local #PBS -o mojprog.out #PBS -e mojprog.err cd $PBS_O_WORKDIR mojprog
Interaktivni poslovi
PBS omogućava pokretanje interaktivnih poslova. Kod interaktivnih poslova standardni izlaz i greške se šalju izravno korisniku. Drugi oblik interaktivnih poslova je da korisnik dobije komandnu liniju čvora koji mu je dodijeljen. Za interaktivno izvođenje posla potrebno je navesti parametar -I. 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 PBS-u da su čvorovi zauzeti i da ne pokreće druge poslove na njima.
Primjeri korištenja
1. Izravan pristup do komandne linije proizvoljnog čvora
qsub -I -l nodes=node01.local
2. Izravan pristup do komandne linije čvora node01.local (samo jedan procesor)
qsub -I -l nodes=node01.local
3. Izravan pristup do komandne linije čvora node01.local (cijeli SMP čvor)
qsub -I -l nodes=node01.local:ppn=2
4. Primjer skripte za izvođenje interaktivnog posla (posao se sprema u red interactive)
#PBS -N Date_PBS_script #PBS -q interactive #PBS -I /bin/date
Paralelni poslovi
Pokretanje paralelnih poslova je specifično jer alati za pokretanje (npr. mpirun) sami obavljaju raspoređivanje potposlova po čvorovima. Ako se paralelni posao pokrene na taj način JMS ne može kontrolirati izvođenje poslova. Ukoliko se radi o MPI poslovima, prije izvođenja potrebno je postaviti okolinu sa alatom switcher (vidi MPI korisničku dokumentaciju na adresi http://www.srce.hr/crogrid/infrastruktura/upute.html).
Da bi se omogućilo PBS sustavu da kontrolira izvođenje paralelnih poslova potrebno je definirati broj procesora koji je potreban za izvođenje posla. Sintaksa je:
-l nodes=<broj_čvorova|puno_ime_čvora>:ppn=<procesora_po_čvoru>[+<broj_čvorova|puno_ime_čvora>:ppn=<procesora_po_čvoru>]
Korisnik pomoću parametra nodes može precizno definirati gdje će se MPI procesi izvršiti i kako će se raspodijeliti. Na primjer:
-l nodes=1:ppn=2+3:ppn=1
zahtjeva 1 dvoprocesorski čvor i 3 jednoprocesorska. Drugi primjer:
-l nodes=node01.local:ppn=1+node02.local:ppn=2+3:ppn=2
zahtjeva 1 procesor na čvoru node01.local, 2 procesora na čvoru node02.local te bilo koja 3 dvoprocesorska čvora
Kada PBS dodijeli čvorove paralelnom poslu, popis čvorova spremi u datoteku, a varijabla okoline $PBS_NODEFILE sadrži ime datoteke. Unutar PBS skripte ta varijabla se prenosi kao parametar paralelnim programima (npr. pvm, mpiexec). Korisnici mogu iskoristiti varijablu za vlastito raspoređivanje procesa, primjerice sa alatom ssh.
U nastavku su opisane specifičnosti izvođenja pojedinih vrsta paralelnih poslova. Za MPI knjižnice će u budućnosti biti ostvarena jedna skripta za sve verzije.
2.4.1 MPICH
Za izvođenje MPICH poslova na PBS klasteru se obično koristi alat mpiexec. Mpiexec koristi posebno PBS-ovo sučelje tm za pokretanje procesa. Na taj način PBS ima potpunu kontrolu nad procesima što mu omogućava zaustavljanje svih procesa s naredbom qdel i prikupljanje informacija o potrošnji resursa. Ukoliko se koristi standardni mpirun PBS-ova naredba qdel neće zaustaviti sve procese. Osnovni parametar naredbe je -n koji definira broj procesa koj treba pokrenut. Nije potrebno navesti parametar -machinefile.
Primjeri korištenja
1. Primjer poziva mpirun unutar PBS skripte:
mpiexec -n <proc_num> <ime_programa>
2. Primjer skripte za izvođenje paralelnog posla koji pokreće mpi_program koji zahtjeva 8 procesora:
#PBS -l nodes=2:ppn=4 mpiexec -n 8 mpi_program
2.4.2 LAM/MPI
LAM/MPI koristi PBS sučelje (tm) za pokretanje paralelnih procesa. Na taj način PBS u potpunosti kontrolira paralelne procese. Poslovi se pokreću naredbom mpiexec, koja pokreće lamd servise, izvodi posao i na kraju zaustavlja lamd servise. Za razliku od MPICH-eve mpiexec naredbe, ovdje je potrebno navesti parametar machinefile, ali ne i broj procesa koje treba pokrenuti (parametar -n). Detalje o LAM/MPI knjižnici možete pronaći u MPI korisničkoj dokumentaciji.
Primjeri korištenja
1. Primjer poziva LAM/MPI mpiexec unutar PBS skripte:
mpiexec -machinefile $PBS_NODEFILE <ime_programa>
2. Primjer skripte za izvođenje paralelnog posla koji pokreće mpi_program koji zahtjeva 8 procesora:
#PBS -l nodes=2:ppn=4 mpiexec -machinefile $PBS_NODEFILE mpi_program
2.4.3 Intel MPI
Intel MPI je MPICH-2 verzija prevedena s Intelovim prevodiocima. MPICH-2 se pokreće pomoću mpd servisa, pa nije moguće koristiti mpiexec naredbe. Posljedica toga je da PBS nema punu kontrolu nad ovim poslovima. Dodatno, korisnik mora eksplicitno pokrenuti i zaustaviti mpd servise naredbom mpdboot i mpdallexit.
Prije prvog korištenja Intel MPI potrebno je stvoriti datoteku ~/.mpd.conf i u nju zapisati liniju:
pass=
Servisi mpd se pokreću naredbom mpdboot. Osnovni parametri mpdboot naredbe su:
-n : broj čvorova (ne procesora!) -f : datoteka koja sadrži popis čvorova ($PBS_NODEFILE).
Sama aplikacija se pokreće naredbom mpiexec. Za naredbu mpiexec potrebno je postaviti samo parametar -n koji definira broj procesa koji se pokreće. Mpiexec naredba zahtjeva da se izvršni program navodi s punim putem ili ./<prog>. Servisi mpd se zaustavljaju naredbom mpdallexit. Detalje o izvođenju Intel MPI poslova možete pronaći u MPI korisničkoj dokumentaciji.
Mana ovog pristupa je što prilikom greške u aplikaciji ili zaustavljanja posla s qdel mpd servisi ostanu aktivni. Zbog toga je potrebno ručno zaustaviti mpd servise. To se može ostvariti na način da se logira na čvor s kojeg je posao pokrenut (master čvor) i izvede naredba:
mpdallexit
Primjeri korištenja
1. Primjer skripte za izvođenje paralelnog posla koji pokreće mpi_program koji zahtjeva 4 procesora:
#PBS -N IntelMPI #PBS -o IntelMPI.out #PBS -e IntelMPI.err #PBS -l nodes=2:ppn=2 cd $PBS_O_WORKDIR mpdboot -n 2 -f $PBS_NODEFILE mpiexec -n 4 $PBS_O_WORKDIR/mpi_program mpdallexit
2. Primjer zaustavljanja zaostalih mpd servisa na glavnom čvoru compute-0-0.local (Rocks)
cluster-fork --nodes=compute-0-%d:0 mpdallexit
3. Primjer zaustavljanja zaostalih mpd servisa na glavnom čvoru node01.local (OSCAR)
cexec :1 mpdallexit
2.4.4 PVM
PVM (Parallel Virtual Machine) je nešto starija programska okolina za izvođenje paralelnih aplikacija. Za razliku od MPICH-a i LAM/MPI ne koristi PBS za pokretanje pojedinih procesa, nego koristi vlastite servise pvmd. Stoga je u skripti prije izvođenja samog programa potrebno pokrenuti pvmd servise naredbom pvm, a nakon izvođenja zaustaviti ih.
Kao i kod Intel MPI pojavljuje se problem zaostalih procesa u slučaju zaustavljanja posla naredbom qdel ili greške u aplikaciji. Stoga je potrebno ručno zaustaviti pvmd servise u tim slučajevima. To se može ostvariti na način da se logira na glavni čvor s kojeg je posao pokrenut (master čvor) i izvede naredba:
echo halt | pvm
Primjeri korištenja
1. Primjer skripte za pokretanje PVM posla koji zahtijeva 2 procesora
#PBS -N PVM_primjer #PBS -l nodes=1:ppn=2 # pokretanje pvmd servisa echo conf | pvm $PBS_NODEFILE # izlazak iz PVM shella quit # izvođenje programa ./pvm_program # zaustavljanje pvmd servisa echo halt | pvm
2. Primjer zaustavljanja zaostalih pvmd servisa na glavnom čvoru compute-0-0.local (Rocks)
cluster-fork --nodes=compute-0-%d:0 "echo halt | pvm"
3. Primjer zaustavljanja zaostalih pvmd servisa na glavnom čvoru node01.local (OSCAR)
cexec :1 "echo halt | pvm"
Definiranje dodatnih karakteristika poslova
PBS omogućava definiranje dodatnih karakteristika poslova, kao sto su trajanje izvođenja poslova, potrebna količina memorije, diska itd. Navođenjem dodatnih parametara omogućava se efikasnije raspoređivanje poslova.
Parametri se navode pomoću opcije -l:
#PBS -l <naziv_parametra>=<vrijednost_parametra>
Parametri su:
walltime : ukupno vrijeme izvođenja posla cput : stvarno vrijeme koje posao "provede" u procesoru mem : količina stvarne (RAM) memorije koju posao zahtjeva vmem : količina virtualne memorije (zbroj swap i RAM memorije) koju posao zahtijeva nodes : količina čvorova i procesora za izvođenje posla
BITNO!! Ukoliko posao prekorači navedene vrijednosti PBS će zaustaviti izvođenje posla. Stoga je potrebno pažljivo definirati vrijednosti (npr. uzimati 50% veće vrijednosti od očekivanog).
PBS varijable okoline
Unutar skripte moguće je koristiti PBS varijable. Primjer PBS varijable je već spomenuta $PBS_NODEFILE varijabla. Neke od PBS varijabli su:
$PBS_O_HOST : adresa računala sa kojeg je pokrenut posao $PBS_O_WORKDIR : direktorij iz kojeg je posao pokrenut $PBS_STDOUT_PATH : datoteka u koju se sprema standardni izlaz $PBS_STDERR_PATH : datoteka u koju se sprema standardna greška $HOSTNAME : adresa računala na kojem se izvršava skripta $PBS_JOBID : PBS identifikator posla $PBS_NODEFILE : ime datoteke u kojoj su navedene adrese računala $QUEUE : ime reda u kojem se posao izvršava
Praćenje i upravljanje izvođenjem poslova
Nakon pokretanja posla korisnik može koristiti različite PBS-ove alate za praćenje izvođenja posla. U poglavlju 4. je dan pregled naredbi sustava Maui koje omogućavaju slične funkcionalnosti.
Prikaz informacija o poslovima
Naredba qstat je PBS-ova naredba za prikaz stanja poslova. Neki od važnijih parametara naredbe su:
-r : prikazuju se samo aktivni poslovi -n : pored popisa poslova prikazuju se i čvorovi na kojima se aktivni poslovi izvode -i : prikazuju se samo poslovi koji čekaju izvođenje (idle) -f : prikazuju se detaljne informacije o poslovima -u <ime_korisnika> : prikazuju se samo poslovi od korisnika <ime_korisnika> -q [ime_reda] : naredba dohvaća isključivo informacije o redovima poslova
Informacije o ostalim parametrima moguće je dobiti naredbom man qstat.
Uobičajen način praćenja izvođenja poslova je korištenjem parametara -r i -n. Na primjer, naredba:
qstat -r -n
prikazuje sve aktivne poslove i imena čvorove na kojima se izvode.
Detaljni podaci o nekom poslu
qstat -f <id_posla>
Ukoliko se ne navede <id_posla> bit će prikazani podaci o svim aktivnim poslovima. Ne preporuča se korištenje parametra –f bez id posla jer će naredba vratiti veliku količinu podataka.
Upravljanje poslovima
Nakon pokretanja, poslom se može upravljati: privremeno ga zaustaviti, potpuno ga zaustaviti te mu promijeniti karakteristike.
Naredbe za privremeno zaustavljanje posla su: qhold <id_posla> - privremeno zaustavlja izvođenje posla qrls <id_posla> - nastavlja izvođenje posla Napomena: aktivni posao neće biti stvarno zaustavljen. Naredba se koristi isključivo dok posao čeka u redu na izvođenje. Za potrebe zaustavljanja aktivnog posla koristiti Mauijevu naredbu mjobctl (vidi odjeljak Maui naredbe).
Posao je moguće vratiti u red na ponovno izvođenje naredbom qrerun. Ukoliko je posao pokrenut s opcijom -r n, naredba se neće izvršiti. Ukoliko se želi posao vratiti u rad i obustaviti potrebno je prije izvođenja qrerun izvesti naredbu qhold.
Posao se u potpunosti zaustavlja naredbom:
qdel <id_posla>
Dohvat informacija o završenim poslovima
Informacije o završenim poslovima i statistike moguće je dobiti korištenjem naredbe tracejob. Uobičajeno korištenje je:
tracejob -n <broj_dana> <id_posla>
što prikazuje sve podatke o poslu <id_posla>. Parametar -n <broj_dana> navodi se ukoliko je prošlo vise od jednog dana od izvođenja posla.
Maui
Prikaz informacija o klasteru
Maui sadrži nekoliko naredbi koje omogućavaju prikaz informacija o poslovima, čvorovima te stanju samog Mauija.
Prikaz trenutnog stanja klastera dobiva se s naredbom showstate. Jedini parametar naredbe je -x, koji definira da ispis treba biti u XML formatu. Prikaz osnovnih statistika o korištenju klastera se dobiva naredbom showstats. Informacije koje naredba pruža su: postotak vremena koje su čvorovi bili zauzeti, postotak uspješnih poslova, postotak pogođenih trajanja poslova (za poslove za koje je naveden resurs walltime s opcijom -l). Prikaz statistika o klasteru u tabličnom obliku moguće je dobiti naredbom showgrid.
Prikaz stanja poslova dobija se naredbom showq (ekvivalent qstat). Parametri naredbe su:
-b : prikazuju se samo odgođeni poslovi (poslovi zaustavljeni naredbom qhold) -i : prikazuju se samo poslovi koji čekaju u redu -r : prikazuju se samo aktivni poslovi -u <ime_korisnika> : prikazuju se samo poslovi od korisnika <ime_korisnika>
Naredba koja omogućava detaljnu analizu poslova, čvorova te različitih aspekata sustava Maui je diagnose. Parametri naredbe definiraju što će se analizirati:
-a [ime_projekta] : prikazuju se informacije o projektima (ili jednom projektu - ime_projekta) -c [ime_reda] : prikazuju se informacije o redovima poslova (ili jednom redu - ime_reda) -f : prikazuju se informacije o potrošenim resursima i pravednom raspoređivanju poslova -g [ime_grupe] : informacije o postavkama svih grupa -j [ime_posla] : prikazuju se detaljne informacije o poslovima -n [ime_čvora] : prikazuju se detaljne informacije o čvorovima (opterećenje, stanje memorije, diska) -p : prikazuju se informacije o prioritetu poslova koji čekaju u redu -u [ime_korisnika] : informacije o postavkama svih korisnika
Obično se koriste opcije -p za prikaz izračuna prioriteta za pojedine poslove u redu, -n za prikaz stanja čvorova i -j za prikaz stanja poslova.
Detaljniji prikaz stanja čvorova moguće je dobiti naredbom checknode. Jedini parametar naredbe je ime čvora i to kratki oblik (npr. node01 ili compute-0-0). Analogno toj naredbi moguće je koristiti naredbu checkjob za prikaz stanja posla.
Upravljanje poslovima
Maui sadrži skup naredbi analognih PBS-ovim za upravljanje poslovima. Naredbe sethold, releasehold i canceljob su identične naredbama PBS-a qhold, qrls i qdel. Preporuča se koristiti PBS-ove naredbe.
Naredba mjobctl omogućava naprednije upravljanje poslom. 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), ali ta mogućnost nije ostvarena u okviru PBS-a na Linuxu, pa je nije moguće koristit. U slučaju da se pokuša spremiti stanje, PBS će jednostavno zaustaviti posao. Parametri naredbe su: -c <ime_posla> : naredba zaustavlja posao -C <ime_posla> : naredba sprema stanje posla na disk -h <ime_posla> : naredba privremeno zaustavlja posao (sethold) -r <ime_posla> : naredba nastavlja izvođenje posla zaustavljenog sa -s -R <ime_posla> : naredba zaustavlja posao i vraća ga u red -s <ime_posla> : naredba zaustavlja aktivni posao
