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.

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