Superkompjuter u VirtualBox-u (TORQUE) – deo II
U članku Instalacija HPC klastera – priprema, objašnjeno je podešavanje potrebnih komponenti kako bi neki skup računara mogli da nazovemo klasterom. Kako bi HPC klaster mogao da funkcioniše i kako bi taj povezan skup računara imao nekog smisla, neophodno je podesiti i raspoređivač poslova. Raspoređivač poslova omogućava pokretanje programa na većem broju računara. U daljem tekstu opisana je instalacija TORQUE menadžera resursa, raspoređivača posla MAUI kao i OpenMPI biblioteke.
Sadržaj
TORQUE/PBS
TORQUE (Terascale Open-source Resource and QUEue Manager) je menadžer resursa otvorenog koda, zasnovan na PBS-u. PBS (Portable Batch System) je raspoređivač poslova za Linux klastere, neke osnovne opcije koje omogućava su pokretanje, praćenje i brisanje poslova. Unapređenje u odnosu na PBS, jeste najpre u pogledu skalabilnost a zatim je bitna i jednostavnija upotreba, omogućena u vidu detaljnijih i jasnijih logova. TORQUE se može koristiti i menjati, u skladu sa ograničenjima licence softvera. TORQUE ima osnovni raspoređivač poslova pbs_sched koji poslove raspoređuje po sistemu FIFO (First In First Out). Pored osnovnog raspoređivača, može se koristiti i MAUI ili MOAB raspoređivač. Kako je MAUI nekomercijalni raspoređivač poslova, opredelićemo se za njega.
Preduslovi
Preduslovi koji moraju biti ispunjeni radi uspešne instalacije:
- Sinhronizovani časovnici
- Omogućen Passwordless SSH između headnode-a i čvorova u oba pravca
- Instalirani paketi libtool, openssl-devel, libxml2-devel, boost-devel, gcc, gcc-c++ i *git *
- Deljen /home direktorijum sa svim čvorovima pomoću NFS-a
- Svi čvorovi (uključujući i headnode) imaju identičan /etc/hosts fajl u kome se nalaze svi čvorovi
- Podešena mreža
- Otvoreni portovi 15001, 15002 i 15003
- Podešen MUNGE servis
Većinu stavki smo već podesili u prethodnom članku, povezali smo headnode sa čvorovima, podesili NFS (Network File System), podesili mrežu i HostBased Passwordless SSH autentifikaciju. Takođe smo i popunili /etc/hosts fajl sa odgovarajućim unosima. Potrebno je dodatno podesiti firewall i instalirati MUNGE servis.
Podešavanje Firewall-a
Kako bi TORQUE uspešno radio potrebno je stopirati firewall na čvorovima, pokretanjem komandi
systemctl stop firewalld
systemctl disable firewalld
Takođe je potrebno dozvoliti komunikaciju između pbs_server-a i pbs_mom-a, za to su potrebna tri default-na porta i to su portovi 15001, 15002 i 15003. Zbog toga je potrebno omogućiti ove portove na headnode-u, pomoću sledećih komandi
firewall-cmd --permanent --zone=internal --add-port=15001/tcp firewall-cmd --permanent --zone=internal --add-port=15002/tcp firewall-cmd --permanent --zone=internal --add-port=15003/tcp firewall-cmd --reload
Instalacija MUNGE servisa
MUNGE (MUNGE Uid ‘N’ Gid Emporium) je servis za autentifikacuju, zadužen za kreiranje i potvrđivanje kredencijala. Dizajniran je tako da bude vrlo skalabilan u HPC okruženju. Dozvoljava procesu da identifikuje UID ili GID *drugog lokalnog ili *remote procesa unutar grupe čvorova koji imaju zajedničke grupe i korisnike.
Kako bismo instalirali MUNGE servis, potrebno je instalirati odgovarajuće pakete na svim čvorovima pomoću komande
yum install munge munge-libs munge-devel -y
Nakon instalacije, potrebno je da generišemo ključ za autentifikaciju, kreiranje ključa vrši se na serveru a zatim se ključ podeli ostalim čvorovima. Potrebno je izabrati jedan od čvorova da bude serverski čvor, u našem slučaju to je headnode. Sada je potrebno instalirati rng-tools pomoću komandi
yum install rng-tools -y rngd -r /dev/urandom
Nakon toga kreiraćemo ključ, pri čemu se kreiranje ključa vrši samo na serveru, odnosno headnode-u.
/usr/sbin/create-munge-key -r dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key chown munge: /etc/munge/munge.key chmod 400 /etc/munge/munge.key
Nakon kreiranja ključa, potrebno je poslati ključ svim čvorovima. U ove svrhe koristimo scp odnosno Secure Copy i pokrećemo komande
scp /etc/munge/munge.key root@Node1:/etc/munge scp /etc/munge/munge.key root@Node2:/etc/munge
Slično kao i kod komande cp, prvi argument komande predstavlja lokaciju sa koje želimo da kopiramo sadržaj, dok drugi argument predstavlja odredište. Nakon kopiranje ključa, na čvorovima je potrebno izmeniti prava pristupa
chown -R munge: /etc/munge/ /var/log/munge/ chmod 0700 /etc/munge/ /var/log/munge/
I nakon toga pokrenuti MUNGE servis
systemctl enable munge
systemctl start munge
Možemo testirati MUNGE, tako što ćemo probati da pristupimo nekom od čvorova sa našeg serverskog čvora(headnode-a)
munge -n munge -n | unmunge munge -n | ssh Node1 unmunge remunge
Instalacija paketa
Potrebno je još i instalirati navedene pakete, to možemo uraditi sledećom komandom
yum install libtool openssl-devel libxml2-devel boost-devel gcc gcc-c++ git
Kako biste bili sigurni da skidate najnovije verzije biblioteka, možete preuzeti najnoviju verziju epel repozitorijuma i pre komande za instaliranje pokrenuti komandu
yum install epel-release
Instaliranje paketa je potrebno uraditi na svim čvorovima.
Instalacija TORQUE-a
Najpre je potrebno preuzeti TORQUE instalaciju, ovo možete uraditi kloniranjem git repozitorijuma komandom
git clone https://github.com/adaptivecomputing/torque.git -b 6.0.1 6.0.1
pri čemu je potrebno ovu komandu pokrenuti iz deljenog direktorijuma /nfsshare. Nakon preuzimanja potrebno je pokrenuti autogen.sh, a zatim i komandu za konfigurisanje kao i instaliranje, na sledeći način
cd 6.0.1 ./autogen.sh ./configure make make install
Konfiguracija TORQUE-a na headnode-u
Proverite da li pokretanje komande hostname
u terminalu za izlaz ima ispis HeadNode (ili ime headnode-a u slučaju da ste ga imenovali drugačije). Ukoliko to nije slučaj, možete sledećim komandama postaviti novo hostname ime
hostnamectl set-hostname HeadNode --static hostnamectl set-hostname HeadNode --transient
Potrebno je podesiti ime servera, kako bi sistem znao koji od čvorova je serverski čvor.
echo HeadNode > /var/spool/torque/server_name
Takođe je potrebno podesiti i putanju do potrebnih biblioteka
echo "/usr/local/lib" > /etc/ld.so.conf.d/torque.conf ldconfig
Kao što je potrebno da sistem zna koji čvor je serverski čvor, potrebno je navesti i koji čvorovi su radni čvorovi. Ukoliko fajl nodes ne postoji, možete ga sami napraviti
touch nodes
i zatim popuniti na sledeći način
Node1 np=1 Node2 np=1
Trqauthd daemon * se koristi kako bi se autorizovao pristup korisničkim konekcijama na *pbs_server. Generalno termin daemon u operativnom sistemu je program koji radi u pozadini i koji nije pod direktnom kontrolom korisnika. Pokretanje trqauthd deamon-a
cp contrib/systemd/trqauthd.service /usr/lib/systemd/system/ systemctl enable trqauthd.service systemctl start trqauthd.service
Inicijalizujte serverdb
./torque.setup root qterm
I pokrenite pbs_server:
cp contrib/systemd/pbs_server.service /usr/lib/systemd/system/ systemctl enable pbs_server.service systemctl start pbs_server.service
Izmenite /usr/lib/systemd/system/httpd.service tako što ćete izmeniti liniju
PrivateTmp=true
u PrivateTmp=false
Restarujte daemon-e
sudo systemctl daemon-reload sudo systemctl restart httpd
Konfiguracija TORQUE na radnim čvorovima
Na serveru, u source direktorijumu (direktorijum u kome se nalazi TORQUE, našem slučaju putanje je /nfsshare/6.0.1) pokrenite komandu
make packages
Kopirajte contrib/systemd/pbs_mom.service u /usr/lib/systemd/system/ na svim radnim čvorovima. To možete uraditi na više načina, pomoću komande scp
scp contrib/systemd/pbs_mom.service Node1:/usr/lib/systemd/system/ scp contrib/systemd/pbs_mom.service Node2:/usr/lib/systemd/system/
kao i pomoću komande cp ukoliko je izvršavate na samim čvorovima, pošto se podaci nalaze unutar deljenog direktorijuma /nfsshare.
A zatim instalirajte torque-package-mom-linux-x86_64.sh i torque-package-clients-linux-x86_64.sh na svim radnim čvorovima.
./torque-package-mom-linux-x86_64.sh --install ./torque-package-clients-linux-x86_64.sh --install
Takođe je potrebno podesiti i putanju do potrebnih biblioteka na svim radnim čvorovima
cp /etc/ld.so.conf.d/torque.conf /etc/ld.so.conf.d/ /sbin/ldconfig
Kako bismo bili sigurni da čvorovi znaju koji od računara je serverski čvor, pokrećemo sledeću komandu na svim radnim čvorovima
echo HeadNode > /var/spool/torque/server_name
a zatim kreiramo fajl config u direktorijumu /var/spool/torque/mom_priv
cd /var/spool/torque/mom_priv touch config
i popunimo ga tako da izgleda ovako
$pbsserver HeadNode $logevent 1039
Pokrenimo pbs_mom servis
systemctl enable pbs_mom.service systemctl start pbs_mom.service
Konfiguracija ugrađenog raspoređivača
Na headnode-u kopirajte fajl scheduler servisa na sledeću lokaciju
cp contrib/systemd/pbs_sched.service /usr/lib/systemd/system/
A zatim omogućite i pokrenite
systemctl enable pbs_sched.service systemctl start pbs_sched.service
Testiranje sistema
Proverite da li možete da uradite ssh sa headnode-a na ostale čvorove, kao i sa čvorova na headnode, takođe testirajte mrežu. Pre pozivanja komandi potrebno je dodati putanje u promenljivu $PATH. TORQUE instalira sve binarne fajlove unutar direktorijuma /usr/local/bin i /usr/local/sbin. Ovo se može uraditi na više načina, jedan od njih je pozivanje komande
export PATH=/usr/local/bin/:/usr/local/sbin/:$PATH
Na ovaj način mi smo izvršili konkatenaciju putanje, sa putanjama koje već postoje u promenljivoj $PATH. A nakon toga moramo izvršiti i komandu source ~/.bashrc
. Ovo se mora izvršiti na svakom računaru za svakog korisnika.
Najbolji način jeste izmena datoteke /etc/profile. U ovu datoteku smestićemo naše putanje
pathmunge /usr/local/bin/
pathmunge /usr/local/sbin/
Ova datoteka se mora na isti način izmeniti na svim čvorovima, poželjno je izvršiti reboot sistema.
Pokrenite komandu
pbsnodes -a
Ukoliko ste ispratili sve stavke članka izlaz izgleda ovako
Najzad možemo pokrenuti posao na našem klasteru. Poslovi se pokreću sa korisnikom koji nema root nalog. Pokrenućemo jednostavan posao radi testiranja
echo "date" | qsub
Ukoliko je posao uspešno pokrenut pojaviće se dva fajla STDIN.oXX i STDIN.eXX u radnom direktorijumu. Ukoliko nije, stiže mejl sa greškom, koji se nalazi u direktorijumu /var/mail/username. Ukoliko imate problema sa pokretanjem poslova, postoje dva log fajla jedan je serverski log fajl i nalazi se u direktorijumu /var/spool/torque/server_logs u fajlu koji je imenovan po tekućem danu. Drugi log fajl je mom log fajl, i on se nalazi na radnim čvorovima u direktorijumu /var/spool/torque/mom_logs.
MAUI
MAUI je raspoređivač posla koji pored FIFO politike raspoređivanja, koristi i fairshare, backfill politike raspoređivanja. Koristi se kao eksterni raspoređivač TORQUE/PBS sistema raspodele resursa. MAUI kontroliše kada, gde i kako će resursi kao što su procesor, memorija i disk biti dodeljeni poslovima. Pored samo kontrole, poseduje mehanizam koji optimizuje upotrebu ovih resursa, praćenje performansi sistema i pomaže pronalaženju problema. PBS opslužuje red poslova dok MAUI ispituje pbs_server i mom_server kako bi ažurirao informacije, a zatim na osnovu tih informacija kaže pbs_server-u da raspodeljuje poslove na osnovu MAUI politike i prioriteta. Neki koraci koje MAUI obavlja su navedeni u daljem tekstu
- Određivanje izvodljivosti posla
- Određivanje prioriteta posla – postoji lista izvodljivih poslova u kojoj su poslovi poređani po prioritetu. Prioritet se izračunava na osnovu više faktora, od kojih su neki veličina posla, vreme čekanja, vlasnik posla, …
- Određivanje mogućnosti alokacije resursa
- Alociranje resursa za posao
- Distribuiranje posla do svih alociranih resursa
- Pokretanje posla
Kako bismo preuzeli MAUI potrebno je da se registrujemo na sajtu AdaptiveComputing. Preuzmite najnoviju verziju sa ovog linka. U našem slučaju, to je verzija 3.3.1. Ekstraktujte fajl
gtar -xzvf maui-3.3.1.tar.gz
i kopirajte folder u deljeni direktorijum /nfsshare i zatim pokrenite
cd maui-3.3.1 ./configure make make install
Uradimo neka dodatna podešavanja, izmenimo fajl /usr/local/maui/maui.cfg kako bi MAUI imao potrebne informacije o našem klasteru. Izmenite/dodajte sledeće linije
SERVERPORT 40599 ADMIN1 root ADMIN3 ALL SERVERHOST HeadNode ADMINHOST HeadNode RMCFG[HeadNode] type=PBS
Kopirajte fajl redheat.maui.d u /etc/init.d/maui.d. Kako bi se pokretale MAUI komande bez navođenja pune putanje do njih, potrebno je dodati putanje
pathmunge usr/local/maui/bin
pathmunge mungeusr/local/maui/sbin
u /etc/profile kao kada smo dodavali putanje zbog TORQUE komandi. Pokrenite MAUI komandom service maui.d start
a zatim pokrenite komandu maui
. Testirajte MAUI komandom showq
.
OpenMPI
MPI (Message Passing Interface) je interfejs za prenos poruka. MPI je standard, predstavlja set funkcija koje svaka implementacija biblioteke za prenos mora da ispuni. On omogućava da više procesa, koji se izvršavaju na istoj ili različitim mašinama, komunicira pomoću poruka. Postoji više implementacija ove biblioteke, neke od njih su MPICH, Intel MPI, MVAPICH, OpenMPI. Mi ćemo koristiti implementaciju OpenMPI, ona se koristi za razmenjivanje poruka programa u izvršavanju i stoga je pogodna za pisanje paralelnih programa.
Za početak ćemo sa ove adrese preuzeti poslednju verziju OpenMPI-a. Preuzetu datoteku smestićemo u deljeni direktorijum /nfsshare na headnode-u. I zatim pokrenuti komandu za ekstrakciju.
tar -xvf openmpi-2.1.1.tar.gz
Nakon toga instaliraćemo neophodne C kompajlere na sva tri čvora
yum install gcc gcc-c++ kernel-devel -y
U deljenom direktorijumu /nfsshare ćemo kreirati direktorijum u koji ćemo smestiti već iskompajlirane OpenMPI biblioteke i pakete.
mkdir /nfsshare/opnmpi
Zatim ćemo pokrenuti sledeće komande
cd /nfsshare/openmpi-2.1.1 ./configure --prefix=/nfsshare/opnmpi make make install
Trenutno nećemo biti u mogućnoosti da koristimo ni jednu MPI *komandu, razlog ovoga jeste što ne postoji globalna promenljiva koja će čuvati podatke o tome gde se nalaze komande *MPI-a. Ta promenljiva već postoji na svim Linux sistemima i naziva se $PATH, i toj promenljivoj, koja već sadrži niz nekih vrednosti, moraćemo da dodamo još jednu a to je putanja do naših MPI *komandi. Kao i u prethodnom slučaju, izmenićemo datoteku */etc/profile. U ovu datoteku smestićemo putanju do naših *MPI *komandi
pathmunge /nfsshare/opnmpi/bin
Ova datoteka se mora na isti način izmeniti na svim čvorovima. Nakon toga izvršićemo reboot sistema. Kada se sistem podigne pozivanjem komande which mpirun
na bilo kom od računara dobićemo odgovor koji predstavlja putanju do naših *MPI *komandi, što je u našem slučaju
/nfsshare/opnmpi/bin/mpirun
Pokretanje posla
Kreiraćemo jednostavan posao i pokrenućemo ga na našem klasteru. Najpre napravimo jedan example.c program
#include "mpi.h" #include #include int main( int argc, char *argv[]) { int processId, numOfP; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numOfP); MPI_Comm_rank(MPI_COMM_WORLD, &processId); gethostname(hostname, 1024); puts(hostname); printf("\nProcess %d, n = %d \n", processId, numOfP); MPI_Finalize(); }
Iskompajlirajmo zatim ovaj program komandom
mpicc -o example example.c
Kreirajmo zatim skriptu za pokretanje ovog programa pod nazivom start.sh
#!/bin/bash mpirun -np 2 putanjaDoFajla/example
Ostaje nam još da pokrenemo posao
qsub -l nodes=2 putanjaDoFajla/start.sh
Potrebno je umesto putanjaDoFajla navesti putanju do direktorijuma u kome se nalaze fajlovi example i *start.sh *koji smo napravili. Nakon pokretanja posla kreirani su fajlovi start.sh.oXX i start.sh.eXX.
Ovime smo uspešno kreirali HPC klaster. U ovom i prethodnom članku Instalacija HPC klastera – priprema opisan je proces kreiranja HPC klastera pomoću virtuelnih mašina. Proces kreiranja HPC klastera od računara opšte namene izgleda jako slično, pri čemu se naravno preskače deo postavljanja virtuelnih mašina. Sam HPC klaster, kao i sve njegove komponente su skalabilne, tako da se može primeniti u praktičnoj upotrebi na većim sistemima.
Korisni linkovi
- https://www.webmo.net/support/torque.html
- http://docs.adaptivecomputing.com/torque/5-1-1/Content/topics/hpcSuiteInstall/manual/1-installing/installingTorque.htm
- http://docs.adaptivecomputing.com/maui/
- https://www.slothparadise.com/how-to-setup-mpi-on-centos-7-2-connected-virtual-machines-part-2/