Enterprise, czyli instytutowy klaster obliczeniowy Janusz Szwabiński 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ń OpenMosix + MPI Dostępne aplikacje Enterprise, czyli instytutowy klaster obliczeniowy p.2/28
Tym dysponujemy... 4 węzł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ście Top 500) Enterprise, czyli instytutowy klaster obliczeniowy p.4/28
Klastry komputerowe Klaster grupa komputerów (na ogół standardowych pecetów) połaczonych siecia w superkomputer w celu wykonania określonych zadań Rodzaje klastrów: Klastry obliczeniowe o dużej wydajności Klastry o zrównoważonym obciażeniu (load balancing) Klastry o wysokiej niezawodności (high availability) Enterprise, czyli instytutowy klaster obliczeniowy p.5/28
Enterprise od podszewki IFT enterprise 156.17.88.56 excalibur horatio gandhi Enterprise, czyli instytutowy klaster obliczeniowy p.6/28
Single System Image grupa komputerów połaczonych w klaster zachowuje się jak jeden komputer OpenMosix pakiet rozszerzajacy jadro Linuksa o możliwość klastrowania komputerów. Zapewnia automatyczne równoważenie obciażenia, czyli migrację procesów na mniej obciażone węzły w klastrze. Enterprise, czyli instytutowy klaster obliczeniowy p.7/28
Zalety klastra OpenMosix: na ogół nie trzeba przepisywać kodu aplikacji zrównoważone obciażenie wszystkich węzłów możliwość dynamicznego dodawania/usuwania węzłów najdłużej trwajace procesy trafiaja na najszybszy procesor idealny do problemów, które można podzielić na niezależne podprocesy Enterprise, czyli instytutowy klaster obliczeniowy p.8/28
Ograniczenia: spadek wydajności dla krótkotrwałych procesów procesy wielowatkowe nie migruja nie nadaje się raczej do problemów, w których poszczególne podprocesy komunikuja się ze soba Enterprise, czyli instytutowy klaster obliczeniowy p.9/28
Obsługa klastra OpenMosix mosctl podstawowe narzędzie administracyjne. Przykłady użycia: mosctl whois OM_ID mosctl isup OM_ID mosmon monitoruje działanie klastra mosrun uruchamia program na wybranym węźle: mosrun -h OM_ID polecenie [argumenty] mtop/mps klastrowe wersje narzędzi top i ps (pokazuja dodatkowo numer węzła, na którym wykonywany jest proces) Enterprise, czyli instytutowy klaster obliczeniowy p.10/28
migrate wysyła do wybranego procesu prośbę o migrację: 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ń) AMD XP 1800+ violet3 enterprise 512 RAM węzeł klaster 5min 3s 8min 17s 2min 40s Enterprise, czyli instytutowy klaster obliczeniowy p.12/28
Embarassingly parallel problems obliczenia moga być podzielone na zupełnie niezależne części każdy proces może wykonać swoje zadanie bez konieczności komunikacji z innymi procesami łatwa paralelizacja nie zależa od wydajności 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 1 I 0 1 f x dx 0 0 1 x f x 1 x 2 Niech I N 1 N N i 0 1 f i N Enterprise, czyli instytutowy klaster obliczeniowy p.15/28
Wówczas Dzielimy przedział 0, N lim N I N I 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 i 0 1 f x i K 1 i 1 K 0 f x i K 2 i 1 K 1 f x i... i K P K P 1 1 f x i Enterprise, czyli instytutowy klaster obliczeniowy p.16/28
Przykłady: model drapieżnik-ofiara (symulacje MC) program do symulacji pobiera koncentrację zajęcy, wilków i schronień jako argumenty linii poleceń musimy uruchomić kilka instancji tego programu interesuje nas łaczny czas wykonania wszystkich symulacji automatyzacja zadań 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 wymiana komunikatów OpenMosix + MPI dzięki dynamicznemu równoważeniu obciażenia aplikacje tworzone w ramach MPI zyskuja na ogół na wydajności 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ć - 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ępne 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