2011-07-13 11 views
6

Potrzebuję wykonać kilka ciężkich obliczeń uczenia maszynowego. Mam niewielką liczbę urządzeń bezczynnych w sieci LAN. Ile maszyn potrzebowałbym, aby rozproszenie moich obliczeń za pomocą hadoop/mapreduce/mahout było znacznie szybsze niż działanie na pojedynczym komputerze bez tych rozproszonych frameworków? Jest to praktyczna kwestia obciążenia obliczeniowego w stosunku do zysków, ponieważ zakładam, że dystrybucja między tylko 2 maszynami byłaby gorsza niż nie dystrybucja i po prostu działanie na pojedynczej maszynie (tylko ze względu na cały narzut związany z dystrybucją obliczeń).W praktyce, ile maszyn potrzeba, aby Hadoop/MapReduce/Mahout przyspieszyło obliczenia, które można zrównoleglić?

Uwaga techniczna: Niektóre z ciężkich obliczeń są bardzo możliwe do zrównoleglenia. Wszystkie są tak długo, jak każda maszyna ma własną kopię surowych danych.

+0

Jak długi jest kawałek sznurka? –

+0

@ Shaggy Frog, Jeff Foster. Przepraszam, początkowo nie byłam bardziej przejrzysta. Pytanie nie brzmiało: "O ile szybciej to może pójść", to "ile maszyn potrzebuję, aby było o wiele szybsze, a nie wolniejsze lub po prostu równe". Oznacza to, że chodziło o koszt obliczeniowy uruchamiania hadoop, map reduction, mahout. Moja wina, że ​​nie jest bardziej zrozumiała. –

Odpowiedz

8

"Prosty" program w języku Java i oparte na Hadoop, oparte na MapReduce wdrożenie to bardzo różne bestie i trudno je porównać. To nie tak, że Hadoop jest równoległością do twojego programu; jest napisany w zupełnie innej formie od góry do dołu.

Hadoop ma koszty ogólne: tylko koszty rozpoczęcia pracy i uruchamiania pracowników takich jak twórcy map i reduktorów. Wprowadza znacznie więcej czasu na szeregowanie/deserializację danych, zapisywanie ich lokalnie i przesyłanie do HDFS.

Oparta na Hadoop implementacja zawsze pochłonie więcej zasobów. Dlatego należy tego unikać, chyba że nie można tego uniknąć. Jeśli możesz uruchomić obliczenia niepodzielone na jednym komputerze, najprostszą praktyczną radą jest nie rozpowszechniać. Oszczędź sobie kłopotu.

W przypadku rekomendacji Mahout mogę powiedzieć bardzo bezproblemowo, że praca Hadoop przynosi dwa razy więcej obliczeń niż nierozproszona implementacja na tych samych danych. Oczywiście zależy to w ogromnym stopniu od algorytmu i wyborów związanych z dostrajaniem. Ale żeby dać ci numer: nie zawracałbym sobie głowy gromadą Hadoop zawierającą mniej niż 4 maszyny.

Oczywiście, jeśli twoje obliczenia nie mieszczą się na jednej z twoich maszyn, nie masz wyboru, ale musisz je rozprowadzić. Wtedy kompromis jest tym, jakiego rodzaju zegara ściennego można się spodziewać w porównaniu do mocy obliczeniowej, jaką można poświęcić. Odniesienie do prawa Amdahla jest słuszne, chociaż nie uwzględnia znacznego obciążenia Hadoop. Na przykład, aby zrównoleglić N sposobów, potrzebujesz co najmniej N maperów/reduktorów i ponosisz N razy koszt narzuconego mappera/reduktora. Jest też ustalony czas uruchamiania/zamykania.

6

Zobacz Amdahl's Law

Prawo Amdahla to model relacji pomiędzy oczekiwaną SpeedUp z parallelized implementacji algorytmu w stosunku do algorytmu seryjnego, przy założeniu, że wielkość problemem pozostaje taka sama, gdy parallelized. Na przykład, jeśli dla danego rozmiaru problemu, równoległa implementacja algorytmu może uruchomić dowolnie szybko 12% operacji algorytmu (podczas gdy pozostałe 88% operacji nie jest możliwe do zrównoleglenia), prawo Amdahla stwierdza, że ​​maksymalne przyspieszenie wersji zrównoleglonej wynosi 1/(1 - 0,12) = 1,116 razy szybciej niż implementacja nierównoległa.

Picture of Equation

Bez konkretów trudno jest podać bardziej szczegółowe odpowiedzi.

1

Wiem, że już udzielono odpowiedzi, ale wrzucę kapelusz na ring. Nie mogę podać ogólnej zasady.Wzrost wydajności zależy od wielu czynników:

  1. W jaki sposób równoległe/wzajemnie wykluczają się wszystkie komponenty/algorytmy są/są.
  2. Wielkość zbiorze
  3. pre i post przetwarzania zbioru danych [w tym łupania/mapowanie oraz zmniejszenie/concatinating] ruch
  4. Network

Jeśli masz bardzo podłączonego algorytmu podobnego sieć Bayesa, sieci neuronowe, markkov, PCA i EM, a następnie wiele czasu programu hadoop będzie przetwarzać, dzielić i rekombinować instancje. [Zakładając, że masz dużą liczbę węzłów na instancję (więcej niż 1 maszyna może obsłużyć). Jeśli masz taką sytuację, ruch w sieci stanie się większym problemem.

Jeśli masz agorytet taki jak wykrywanie ścieżki lub symulowane wyżarzanie, możesz łatwo oddzielić instancje na własną mapę/zmniejszyć pracę. Tego typu algorytmy mogą być bardzo szybkie.

0

Innym aspektem jest wąskie gardło, które zmusza do używania mapreduce. Jeśli dysponujesz rozsądnym rozmiarem danych na jednym komputerze i po prostu próbujesz zwiększyć prędkość, możesz skorzystać z implementacji GPU. Są łatwiejsze w konfiguracji i użyciu, nawet na jednej maszynie, z obiecującymi rezultatami.