pobierz3

Transkrypt

pobierz3
Seminarium Zakładowe IDSS
Równoległe obliczenia
metaheurystyczne z
wykorzystaniem klastra
obliczeniowego
Krzysztof Kowalczykiewicz
Marek Kubiak
Dawid Weiss
Przemysław Wesołek
Motywacje raz jeszcze...
●
●
●
●
Zagospodarowanie “wolnych” mocy
obliczeniowych w lab. 45 (15 x 3.2Ghz)
Zbadanie istniejących rozwiązań do budowy
klastrów obliczeniowych
Zbudowanie dostępnego, łatwego w obsłudze i
nieinwazyjnego systemu obliczeniowego
Analiza metaheurystyk pod kątem
zrównoleglenia
–
–
w szczególności PMA - Pareto Memetic Algorithm
na przykładzie problemów MOKP i MOTSP
Początki...
●
Parallel Knoppix
●
●
●
●
system Linux startujący z CD (lub pobierający dane z
innego komputera już wystartowanego - PXE)
łatwy w obsłudze i dobrze radzący sobie ze sprzętem
w stosunku do Knoppix rozszerzony o skrypty do budowy
klastra, odpowiednie API i przykłady
Wady
●
●
●
statyczny klaster
kłopotliwe inicjowanie
niskopoziomowe API (MPI, PVM)
Infrastruktura Alchemi
●
Dostępna
●
●
●
Nieinwazyjna
●
●
●
możliwość inicjowania obliczeń z dowolnej maszyny
(nawet z zewnątrz PP - tunel)
monitorowanie z zewnątrz
pracująca w tle na komputerach lab. usługa
mały narzut i możliwość normalnego wykorzystywania
maszyn nawet w trakcie obliczeń
Łatwa w obsłudze
●
●
●
możliwość stosowania Job API (dowolne binaria)
aplikacje natywne .NET (naśladujące wątki)
prostota - ograniczona ilość narzędzi
Wyzwania technologiczne
●
Integracja biblioteki MOMHlib z platformą .NET
–
–
–
●
●
oryginalnie napisana w Visual C++
przeniesiona na Linux/C++
ponowna integracja w Managed C++ (CLR)
“Oswojenie” składni Managed C++ i mieszanie
kodu managed i unmanaged
“Oswojenie” API Alchemi
Adaptacja MOMHlib
●
●
●
kompilacja się powiodła po usunięciu kilku
drobnych problemów
domyślnie aplikacja C++/CLR działa jako
unmanaged)
próba konwersji na managed nie powiodła się
●
●
●
●
class -> ref class
new -> gcnew
biblioteka std ++ -> kolekcje .NET
wskaźniki & i * -> referencje ^
Managed C++
●
●
●
●
●
rozszerzenia języka C++ do pisania aplikacji
działających na maszynie wirt. CLR (.NET)
umożliwia mieszanie kodu/klas zarządzanych
(wykorzystujących GC) i niezarządzanych
(tradycyjne wskaźniki/referencje)
skomplikowana składnia w porównaniu do C#,
ale większa kontrola i możliwość mieszania z
kodem unmanaged
trudności mieszania kodu m/um w obrębie
jednej klasy
trudności z przenoszeniem typów
Managed C++ - przykład
API Alchemi
●
●
●
●
Naśladuje API wątków
Należy “opakować” jednostkę uruchomienia w
potomka klasy GThread i zaimplementować
metodę Start()
Alchemi sam przenosi binaria (i wskazane pliki)
na maszynę docelową
Batch vs On-the-fly
●
●
utworzenie wszystkich wątków na początku
dodawanie nowych wątków w razie potrzeby
Obliczenia równoległe
●
Podejście trywialne
●
●
Podejście ambitniejsze
●
●
●
●
●
równoległe uruchamianie algorytmu z różnym
wartościami parametrów i różnymi instancjami
analiza strukturalna algorytmu
analiza czasów i krotności uruchomienia poszczególnych
faz algorytmu (profiling)
analiza możliwości rozdziału pętli
analiza możliwości rozdziału danych
Dobry kandydat
●
●
dobrze separowalne dane lub pętle
długotrwała iteracja (co najmniej kilka sekund)
PMA - Pareto Memetic Algorithm
●
●
hybryda algorytmu genetycznego
(rekombinacja) z przeszukiwaniem lokalnym
(heurystyka lokalna)
ogólny schemat:
wygeneruj początkowy zbiór rozwiązań
powtarzaj
wylosuj wektor wag dla funkcji skalaryzującej
wybierz dwa rozwiązania dobre wg funkcji skalaryzującej
dokonaj rekombinacji rozwiązań
zastosuj lokalną heurystykę do potomka
aż zajdzie warunek zatrzymania
Równoległe PMA - intuicja
●
równoległe lokalne wyszukiwanie
–
–
●
równoległe iteracje pętli
–
–
●
równoległa analiza w wielu kierunkach?
wybór najlepszego?
z różnymi czy tymi samymi wektorami wag?
jak łączyć dane wyjściowe?
równoległa rekombinacja
–
–
różne metody?
ta sama z różnymi parametrami?
Analiza uruchomieniowa PMA
MOKP
generowanie początkowego zbioru rozw. 52%
główna pętla
48%
inicjalizacja wag
<1%
turniej
17%
rekombinacja + local search
67%
aktualizacja zbioru rozw.
15%
ilość iteracji (tyś.)
śr. czas iteracji
MOTSP
4%
96%
<1%
2%
95%
2%
7,5-17,5 2,5-22,5
18ms
895μs
Problemy z PMA...
●
●
●
●
Zbyt krótkotrwałe powtórzenia pętli i local
search aby zrównoleglać pojedyńcze iteracje
Zrównoleglenie stwarza problem ze względu
na słabą separowalność danych i problemy z
łączeniem rezultatów z różnych uruchomień
Duża ilość czynników losowych (wektor wag,
turniej, rekombinacja)
Implementacja MOKP wykorzystuje
uproszczony local search - iteracja jeszcze
krótsza
...zatem podejście trywialne
MOKP
● 9 instancji
● TempPopulationSize
●
●
●
20
InitPopulationSize
●
●
●
150,200,250,300,350
Iterations
●
MOTSP
● 49 instancji
● TempPopulationSize
50
= 45 wątków
InitPopulationSize
●
●
20, 40, 60
100, 200, 300
Iterations
●
25, 50, 75
= 1323 wątków
MOKP (45 wątków)
●
Implementacja
●
●
●
uproszczone lokalne przeszukiwanie
(przywrócenie dopuszczalności po rekombinacji)
Czas eksperymentu:
Całkowity czas obliczeń:
~7min.
~1Ghz*h
MOTSP (1323 wątki)
●
Implementacja
●
●
●
pełne lokalne przeszukiwanie
(DPXRecombine + Steepest LS)
Czas eksperymentu:
Całkowity czas obliczeń:
~5h
~200Ghz*h
Podsumowanie
●
●
●
Infrastruktura Alchemi dostępna w lab. 45
(serwer na minos)
Prosta integracja (bezpośrednio z .NET lub
batch job przez XML)
Perspektywy
●
●
bardziej dogłębna analiza PMA i zastosowanych
heurystyk pod kątem zrównoleglania
analiza metod łączenia rezultatów z różnych
uruchomień

Podobne dokumenty