Jak zbudować klaster?

63

W ciągu ostatnich kilku lat pojawiło się w Internecie kilka artykułów na temat budowy klastra komputerów w domu - tutaj na przykład.

Pi wydaje mi się dobrą platformą do budowania / testowania tego rodzaju rzeczy ze względu na ich niski koszt; czy „ogólne” przewodniki, takie jak ten, powinny dość łatwo przenieść się na Pi, czy też jest coś, o czym powinienem wiedzieć, podejmując próbę takiego projektu?

berry120
źródło
3
Pokrewny wątek na forum: raspberrypi.org/phpBB3/viewtopic.php?p=18356#p18356
finnw
Dodałem tag „bramble”, ponieważ tak się nazywają. Nie mogę udzielić poprawnej odpowiedzi poza „ułóż garść razem i uruchom hadoop lub coś w tym rodzaju” - rzeczywiście, wybrałem to pytanie, aby samemu szukać odpowiedzi!
wygrał
Inni użytkownicy Pi również nie wiedzą o magicznym słowie „bramble”; przeszukanie forum Fundacji mogło pomóc, ale często nie odpowiada, więc nie będę cię głosować niżej.
mlp
4
University of SouthHampton opracował kroki, aby stworzyć klaster 64 pi (lub „superkomputer”): southampton.ac.uk/~sjc/raspberrypi/…
Alex L

Odpowiedzi:

35

Sugeruję, aby spojrzeć na Dispy - moduł Pythona do rozproszonych obliczeń.

Aby uruchomić program na wielu Raspberry Pi (węzłach) z komputera (serwer - załóż, że IP 192.168.0.100):

  • Zainstaluj system operacyjny na każdym RasPi

  • Podłącz każdy RasPi do swojej sieci. Znajdź adres IP (jeśli jest dynamiczny) lub skonfiguruj statyczne adresy IP.
    (Załóżmy, że masz trzy węzły, a ich adresy IP to 192.168.0.50-52)

  • Skonfiguruj Python (jeśli jeszcze nie), zainstaluj dispy, a następnie uruchom dispynode.py -i 192.168.0.100na każdym RasPi. Dzięki temu dispynode będzie otrzymywać informacje o zadaniach z serwera.

  • Na komputerze (serwerze) zainstaluj dispy, a następnie uruchom następujący kod python:

#!/usr/bin/env python
import dispy
cluster = dispy.JobCluster('/some/program', nodes=['192.168.0.50', '192.168.0.51', '192.168.0.52'])

Możesz również zastąpić /some/programfunkcją python - np compute.

Możesz także dodać zależności, takie jak obiekty Pythona, moduły i pliki (które dispybędą przesyłane do każdego węzła) poprzez dodaniedepends=[ClassA, moduleB, 'file1']

Alex L.
źródło
8
Chciałbym usłyszeć, czy ktoś to zrobił - zostaw komentarz informujący, czy to działa!
Alex L
W moim przypadku (openelec + python 2.7) pojawia się błąd „Plik” ./Lib/multiprocessing/__init__.py ”, wiersz 84, w <module>, ImportError: /usr/lib/python2.7/lib-dynload/ _multiprocessing.so: niezdefiniowany symbol: SemLockType ".
Guido
Ale dispy3-3.6 działa z wheezy + python3! 2013-03-13 23: 01: 30,664 - dispynode - służąc 1 cpus o 192.168.1.34:51348. Po uruchomieniu zadania (np. / Bin / ls) węzeł odbiera zadanie, przenosi plik wykonywalny do / tmp, ale coś idzie nie tak "Wykonanie ['/ tmp / dispy / b7e04cb4a1e144e1 / ls'] nie powiodło się z (<błąd OSE klasy '>, OSError (8, „Błąd formatu Exec”), <obiekt śledzenia w 0x16f2580>) ”
Guido
10

Powinieneś zdawać sobie sprawę z pracy, która już została wykonana - istnieje nawet nazwa klastra RasPi boxen. Embedded Linux Wiki mówi Bramble jest definiowany jako „ klaster Beowulf urządzeń Raspberry Pi”. Raspberry Pi Homebrew posiada szereg stanowisk o Brambles i zobaczyć również Foundation własne forum „s.

mlp
źródło
14
Nie wydaje mi się, że powiedzenie komuś google, że odpowiedź jest dobra dla tej witryny. Przydatne jest poznanie nazwy, ale warto rozważyć dodanie treści i odnośników do swojej odpowiedzi.
Joe
Dodano treść i linki, @Joe. Byłoby miło, gdyby downvoters ocenili teraz swoje opinie ...
mlp
1
Zrobiłbym, gdybym przegłosował ...
Joe
Wyraziłem to bardzo ostrożnie, aby uniknąć insynuacji, którą miałeś, Joe. Być może nie zdają sobie sprawy, że głosów tutaj można cofnąć, klikając ponownie ten sam przycisk, a nie tylko cofając je, klikając przycisk przeciwny.
mlp
10

Niektórzy faceci z Southampton Uni stworzyli klaster i napisali szczegółowy przegląd swojej pracy na stronie http://www.southampton.ac.uk/~sjc/raspberrypi/ .

Alex Chamberlain
źródło
2
Rep kurwa : P
Alex L
W rzeczywistości z MPI można się wiele nauczyć. Buduję swoje eksperymenty na podstawie pracy tych facetów. Poleciłbym zaznaczyć tę odpowiedź poprawną odpowiedzią na pytanie.
benqus
6

Jest to całkowicie możliwe, ale największym problemem jest osiągalność. Jest to pomysł, który moim zdaniem byłby nie tylko wykonalny, ale przydatny, ponieważ można by go zastosować w koncepcji przenośnego przetwarzania równoległego. Jeśli chodzi o specyfikę, najlepiej sprawdzą się języki kodowania, takie jak FORTRAN i C ++.

Zajrzyj na beowulf.org, aby uzyskać więcej informacji o przetwarzaniu klastrowym

Kaminara
źródło
1

To jest odpowiedź na powyższy post Guido Garcii dotyczący „dysputy” - nie mogę wymyślić, jak odpowiedzieć na jego post.

Gdy program („/ bin / ls”) jest dystrybuowany z funkcją „dispy” do równoległego wykonywania, wówczas ten program na komputerze klienckim jest przesyłany do każdego z węzłów (do „/ tmp”). Dzieje się tak, aby program opracowany przez użytkownika na komputerze klienckim był przesyłany bez posiadania NFS lub wspólnego katalogu. Działa to z programami binarnymi tylko wtedy, gdy węzły i architektury klienta są kompatybilne. W twoim przypadku zgaduję, że architektura klienta różni się od architektury zdalnych węzłów i węzeł nie może wykonać binarnego pliku „/ bin / ls” przesłanego z klienta. Jeśli chcesz uruchomić / bin / ls na każdym węźle, łatwiej jest napisać funkcję lub program w języku Python, aby wydrukować katalog (np. Używając os.listdir) i rozpowszechnić go zamiast binarnego pliku wykonywalnego.

Giridhar Pemmasani
źródło
Potrzebujesz 50 reputacji, aby móc komentować odpowiedzi / pytania innych ludzi. Witamy jednak!
Impulss