Enterprise, czyli instytutowy
klaster obliczeniowy
Janusz Szwabi ´nski
szwabin@ift.uni.wroc.pl
Enterprise, czyli instytutowy klaster obliczeniowy – p.1/28
Plan wykładu
Klastry komputerowe
Enterprise od podszewki
Obsługa klastra OpenMosix
Przykłady zastosowa ´n
OpenMosix + MPI
Dost˛epne aplikacje
Enterprise, czyli instytutowy klaster obliczeniowy – p.2/28
Tym dysponujemy...
4 w˛ezły: 2 Xeon 2, 8 GHz + 4 GB RAM
Enterprise, czyli instytutowy klaster obliczeniowy – p.3/28
... o tym marzymy
5120 procesorów, 35860 gigaflopów (3. miejsce na li´scie
Top 500)
Enterprise, czyli instytutowy klaster obliczeniowy – p.4/28
Klastry komputerowe
Klaster grupa komputerów (na ogół standardowych
pecetów) poł ˛aczonych sieci ˛a w „superkomputer” w celu
wykonania okre´slonych zada ´n
Rodzaje klastrów:
Klastry obliczeniowe o du ˙zej wydajno´sci
Klastry o zrównowa ˙zonym obci ˛a˙zeniu (
load balancing)
Klastry o wysokiej niezawodno´sci (
high availability)
Enterprise, czyli instytutowy klaster obliczeniowy – p.5/28
Enterprise od podszewki
enterprise
gandhi
horatio
excalibur
IFT
156.17.88.56
Enterprise, czyli instytutowy klaster obliczeniowy – p.6/28
Single System Image grupa komputerów poł ˛aczonych w
klaster „zachowuje” si˛e jak jeden komputer
OpenMosix pakiet rozszerzaj ˛acy j ˛adro Linuksa o mo˙zliwo´s´c
klastrowania komputerów. Zapewnia automatyczne
równowa ˙zenie obci ˛a˙zenia, czyli migracj˛e procesów na
mniej obci ˛a˙zone w˛ezły w klastrze.
Enterprise, czyli instytutowy klaster obliczeniowy – p.7/28
Zalety klastra OpenMosix:
na ogół nie trzeba przepisywa´c kodu aplikacji
zrównowa ˙zone obci ˛a˙zenie wszystkich w˛ezłów
mo ˙zliwo´s´c dynamicznego dodawania/usuwania
w˛ezłów
najdłu ˙zej trwaj ˛ace procesy trafiaj ˛a na najszybszy
procesor
idealny do problemów, które mo ˙zna podzieli´c na
niezale ˙zne podprocesy
Enterprise, czyli instytutowy klaster obliczeniowy – p.8/28
Ograniczenia:
spadek wydajno´sci dla krótkotrwałych procesów
procesy wielow ˛atkowe nie migruj ˛a
nie nadaje si˛e raczej do problemów, w których
poszczególne podprocesy komunikuj ˛a si˛e ze sob ˛a
Enterprise, czyli instytutowy klaster obliczeniowy – p.9/28
Obsługa klastra OpenMosix
mosctl
podstawowe narz˛edzie administracyjne. Przykłady
u ˙zycia:
mosctl whois OM_ID
mosctl isup OM_ID
mosmon
monitoruje działanie klastra
mosrun
uruchamia program na wybranym w˛e´zle:
mosrun -h OM_ID polecenie [argumenty]
mtop/mps
„klastrowe” wersje narz˛edzi
top
i
ps
(pokazuj ˛a
dodatkowo numer w˛ezła, na którym wykonywany jest
proces)
Enterprise, czyli instytutowy klaster obliczeniowy – p.10/28
migrate
wysyła do wybranego procesu pro´sb˛e o migracj˛e:
migrate PID OM_ID
Enterprise, czyli instytutowy klaster obliczeniowy – p.11/28
Pierwsze testy
awk ’BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}’
(16 wykona´n)
AMD XP 1800+
violet3
enterprise
512 RAM
w˛ezeł klaster
5min 3s
8min 17s 2min
40s
Enterprise, czyli instytutowy klaster obliczeniowy – p.12/28
Embarassingly parallel problems
obliczenia mog ˛a by´c podzielone na zupełnie niezale ˙zne
cz˛e´sci
ka ˙zdy proces mo ˙ze wykona´c swoje zadanie bez
konieczno´sci komunikacji z innymi procesami
łatwa paralelizacja
nie zale ˙z ˛a od wydajno´sci sieci
Enterprise, czyli instytutowy klaster obliczeniowy – p.13/28
Przykłady:
Symulacje Monte Carlo
Całkowanie numeryczne
Przeszukiwanie baz danych
SETI@home
Fraktale
Obróbka obrazu
Enterprise, czyli instytutowy klaster obliczeniowy – p.14/28
Przykłady: całkowanie numeryczne
y
x
0
1
0
1
I
1
0
f
x
d
x
f
x
1
x
2
Niech
I
N
1
N
N
1
∑
i
0
f
i
N
Enterprise, czyli instytutowy klaster obliczeniowy – p.15/28
Wówczas
lim
N ∞
I
N
I
Dzielimy przedział
0,
N
1
na
P podprzedziałów
I
p
K
p
,
K
p
1
1
,
p
0, . . . ,
P
1
K
0
K
1
. . .
K
P
N
Otrzymujemy
N
1
∑
i
0
f
x
i
K
1
1
∑
i
K
0
f
x
i
K
2
1
∑
i
K
1
f
x
i
. . .
K
P
1
∑
i
K
P
1
f
x
i
Enterprise, czyli instytutowy klaster obliczeniowy – p.16/28
Przykłady: model drapie˙znik-ofiara (symulacje MC)
program do symulacji pobiera koncentracj˛e zaj˛ecy,
wilków i schronie ´n jako argumenty linii polece ´n
musimy uruchomi´c kilka instancji tego programu
interesuje nas ł ˛aczny czas wykonania wszystkich
symulacji
automatyzacja zada ´n
Enterprise, czyli instytutowy klaster obliczeniowy – p.17/28
#!/usr/bin/env python
import sys, os, time
#koncentracje zajecy, wilkow i norek
zajace = [’0.20’,’0.40’,’0.60’,’0.80’]
wilki
= [’0.30’,’0.60’]
norki
= [’0.00’,’0.50’]
# program do uruchomienia
job = ’./pp’
# liczba instancji programu
np = len(zajace)*len(wilki)*len(norki)
# lista do przechowywania identyfikatorow uruchomionych procesow
pids = np * [0]
# licznik procesow
potomek=0
Enterprise, czyli instytutowy klaster obliczeniowy – p.18/28
starttime = time.time()
for i in zajace:
for j in wilki:
for k in norki:
sl = pids.index(0)
pid = os.spawnv(os.P_NOWAIT,job,(job,i,j,k))
print ’Program %s (pid %d) uruchomiony.’ % (job, pid)
pids[sl] = pid
potomek += 1
while potomek:
wlist = os.waitpid(-1, 0)
done = wlist[0]
if done in pids:
ind = pids.index(done)
print "Proces %d zakonczony." % pids[ind]
pids[ind] = 0
potomek -= 1
Enterprise, czyli instytutowy klaster obliczeniowy – p.19/28
endtime = time.time()
minsec = divmod((endtime - starttime), 60)
print ’%s min %s sec!’ % (str(int((minsec[0]))),str(int((minsec[1]))))
Enterprise, czyli instytutowy klaster obliczeniowy – p.20/28
OpenMosix + MPI
Message Passing Interface standard tworzenia aplikacji
równoległych w oparciu o model z wymian ˛a
komunikatów
OpenMosix + MPI dzi˛eki dynamicznemu równowa˙zeniu
obci ˛a˙zenia aplikacje tworzone w ramach MPI zyskuj ˛a na
ogół na wydajno´sci
Enterprise, czyli instytutowy klaster obliczeniowy – p.21/28
Kompilacja programów:
mpicc -o <program> <plik.c>
mpiCC -o <program> <plik.cpp>
mpi77 -o <program> <plik.f>
Uruchamianie programów:
mpirun -np <liczba_procesów> <program>
Testowanie programów:
mpirun -t -np <liczba_procesów> <program>
Enterprise, czyli instytutowy klaster obliczeniowy – p.22/28
Warto wiedzie´c - klucze SSH:
ssh-keygen -t dsa
cp ~/.ssh/id_dsa.pub
~/.ssh/authorized_keys2
chmod go-rwx ~/.ssh/authorized_keys2
UWAGA! Na potrzeby MPI tworzymy klucz prywatny bez
ochrony hasłem (no passphrase).
Enterprise, czyli instytutowy klaster obliczeniowy – p.23/28
Przykładowy program MPI:
#include <stdio.h>
#include "mpi.h"
main(int argc, char* argv[]) {
int
my_ID,number_proc;
MPI_Init(&argc, &argv); //inicjalizacja
MPI
MPI_Comm_rank(MPI_COMM_WORLD, &my_ID); //identyfikator procesu
MPI_Comm_size(MPI_COMM_WORLD, &number_proc); //liczba procesow
printf("Proces %d z wszystkich %d wita!\n",my_ID,number_proc);
MPI_Finalize(); //zakoncz prace MPI
}
Enterprise, czyli instytutowy klaster obliczeniowy – p.24/28
Dost ˛epne aplikacje
Kompilatory:
gcc/g++ (wersja 2.95.4)
gcc-3.3/g++-3.3 (wersja 3.3.4)
g77/ifc
Biblioteki:
Blitz++
Gnu Scientific Library, Lapack
MPICH
GiNaC
Enterprise, czyli instytutowy klaster obliczeniowy – p.25/28
Interpretery:
Python (wersja 2.3.4)
Perl (wersja 5.8.3)
Oprogramowanie naukowe:
GNU Octave
Yorick
Maxima
Axiom
Yacas
Enterprise, czyli instytutowy klaster obliczeniowy – p.26/28
Edytory:
vi
jed
nano
Enterprise, czyli instytutowy klaster obliczeniowy – p.27/28
Zasoby w sieci
Strona domowa OpenMosix
http://openmosix.sourceforge.net/
OpenMosix HowTo
http://howto.x-tend.be/openMosix-HOWTO/
Strona domowa MPICH
http://www-unix.mcs.anl.gov/mpi/mpich/
Top500 Supercomputer Sites
http://www.top500.org/
Linux Clustering Information Center
http://lcic.org/
Enterprise, czyli instytutowy klaster obliczeniowy – p.28/28