Wie erstelle ich einen Cluster?


63

In den letzten Jahren gab es ein paar Artikel, die sich mit dem Aufbau eines Computerclusters zu Hause befassten - hier zum Beispiel.

Der Pi ist für mich aufgrund seiner geringen Kosten eine gute Plattform, um solche Dinge zu bauen / zu testen. sollten sich "generische" Anleitungen wie diese recht einfach auf den Pi übertragen lassen, oder gibt es etwas, das ich bei einem solchen Projekt beachten sollte?



Ich habe den Tag "bramble" hinzugefügt, da dies der Name ist. Ich kann keine richtige Antwort geben, die über "Ein Bündel zusammenstellen und Hadoop oder so etwas ausführen" hinausgeht - in der Tat habe ich mir die Frage gestellt, nach Antworten zu suchen.
Winwaed

Andere Pi-Benutzer kennen das Zauberwort "Brombeerstrauch" ebenfalls nicht. Das Durchsuchen des Stiftungsforums hätte vielleicht geholfen, aber es ist oft langsam zu antworten, damit ich Sie nicht herabstimmen kann.
mlp

4
Die Universität von Southampton hat Schritte zur Herstellung eines 64-pi-Clusters (oder "Supercomputers") erstellt: southampton.ac.uk/~sjc/raspberrypi/…
Alex L

Antworten:


35

Ich schlage vor, sich Dispy anzuschauen - das Python-Modul für verteilte Berechnungen.

So führen Sie ein Programm auf einer Reihe von Himbeer-Pi (Knoten) von einem PC aus (Server - IP-Adresse vorausgesetzt 192.168.0.100):

  • Installieren Sie auf jedem RasPi ein Betriebssystem

  • Verbinden Sie jeden RasPi mit Ihrem Netzwerk. Suchen Sie die IP (falls dynamisch) oder richten Sie statische IPs ein.
    (Nehmen wir an, Sie haben drei Knoten und ihre IPs sind 192.168.0.50-52)

  • Richten Sie Python ein (falls noch nicht geschehen ), installieren Sie es dispyund führen Sie es dispynode.py -i 192.168.0.100auf jedem RasPi aus. Dadurch wird dispynode angewiesen, Auftragsinformationen vom Server zu erhalten.

  • Installieren Sie auf dem PC (dem Server) dispyden folgenden Python-Code und führen Sie ihn aus:

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

Sie können auch durch /some/programeine Python-Funktion ersetzen - z compute.

Sie können auch Abhängigkeiten wie Python-Objekte, Module und Dateien (die dispyauf jeden Knoten übertragen werden) hinzufügendepends=[ClassA, moduleB, 'file1']


8
Ich würde gerne hören, ob jemand dies getan hat - bitte hinterlasse einen Kommentar und lass mich wissen, ob es funktioniert!
Alex L

In meinem Fall (openelec + python 2.7) erhalte ich den Fehler "File" ./Lib/multiprocessing/__init__.py ", Zeile 84, in <module>, ImportError: /usr/lib/python2.7/lib-dynload/ _multiprocessing.so: undefiniertes Symbol: SemLockType ".
Guido

Aber dispy3-3.6 läuft mit wheezy + python3! 2013-03-13 23: 01: 30,664 - Dispynode - Serving 1 CPU bei 192.168.1.34:51348. Wenn Sie eine Aufgabe starten (dh / bin / ls), empfängt der Knoten die Aufgabe, verschiebt die ausführbare Datei nach / tmp, aber etwas geht schief '>, OSError (8,' Exec Format Error '), <Traceback-Objekt um 0x16f2580>) "
Guido

10

Sie sollten sich der bereits geleisteten Arbeit bewusst sein - es gibt sogar einen Namen für eine Gruppe von RasPi-Boxen. Das Embedded Linux Wiki besagt, dass ein Bramble als " Beowulf-Cluster von Raspberry Pi-Geräten" definiert ist. Raspberry Pi Homebrew hat eine Reihe von Posts über Brambles , und siehe auch das eigene Forum der Stiftung .


14
Ich denke nicht, dass es für diese Site gut ist, jemandem zu sagen, er solle die Antwort googeln. Es ist nützlich, den Namen zu kennen, aber erwägen Sie, Ihrer Antwort einige Inhalte und Verweise hinzuzufügen.
Joe

Inhalt und Links hinzugefügt, @Joe. Es wäre schön, wenn die Downvoter jetzt ihre Meinung
überdenken würden

1
Ich würde es tun, wenn ich Sie tatsächlich herabstimmen würde ...
Joe

Ich habe es sehr sorgfältig formuliert, um nicht anzusprechen, dass Sie es getan haben, Joe. Vielleicht merken sie nicht, dass Stimmen hier durch erneutes Klicken auf denselben Button rückgängig gemacht werden können, nicht nur durch Klicken auf den gegenüberliegenden Button.
MLP

10

Einige Jungs von der Southampton Uni haben einen Cluster zusammengestellt und einen detaillierten Überblick über ihre Arbeit unter http://www.southampton.ac.uk/~sjc/raspberrypi/ geschrieben .



Tatsächlich gibt es bei diesem Projekt mit MPI viel zu lernen. Ich baue meine Experimente auf der Grundlage der Arbeit dieses Typen auf. Ich würde empfehlen, diese Antwort als die richtige Antwort für die Frage zu markieren.
benqus

6

Es ist durchaus möglich, aber das größte Problem ist die Erreichbarkeit. Dies ist eine Idee, die ich nicht nur für praktikabel, sondern auch für nützlich halte, wenn man die Idee des portablen Parallel-Computing aufgreift. Codierungssprachen wie FORTRAN und C ++ sind in Bezug auf Besonderheiten am besten geeignet.

Unter beowulf.org finden Sie weitere Informationen zum Thema Cluster Computing


1

Dies ist die Antwort auf Guido Garcias obigen Beitrag zu 'dispy'. Ich kann nicht herausfinden, wie ich auf seinen Beitrag antworten soll.

Wenn ein Programm ('/ bin / ls') mit 'dispy' zur parallelen Ausführung verteilt wird, wird dieses Programm auf dem Client-Computer an jeden der Knoten (nach '/ tmp') übertragen. Dies ist so, dass das vom Benutzer entwickelte Programm auf dem Client-Computer ohne NFS oder ein gemeinsames Verzeichnis übertragen wird. Dies funktioniert mit Binärprogrammen nur, wenn Knoten und Client-Architekturen kompatibel sind. In Ihrem Fall schätze ich, dass sich die Client-Architektur von der der Remote-Knoten unterscheidet und ein Knoten die vom Client übertragene Binärdatei '/ bin / ls' nicht ausführen kann. Wenn Sie / bin / ls auf jedem Knoten ausführen möchten, ist es möglicherweise einfacher, eine Python-Funktion oder ein Python-Programm zum Drucken des Verzeichnisses zu schreiben (z. B. mit os.listdir) und dieses anstelle der ausführbaren Binärdatei zu verteilen.


Sie benötigen 50 Ruf, um Kommentare zu den Antworten / Fragen anderer Leute zu hinterlassen. Herzlich willkommen!
Impulss

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.