Aufbau eines improvisierten "Supercomputers" durch Anschließen mehrerer gebrauchter PCs in einem LAN

1265
Matt Munson

Ich arbeite ständig an der Entwicklung eines einfachen, aber prozessorintensiven Computerprogramms, das ich für die wissenschaftliche Forschung verwende. Es wäre wirklich hilfreich, mehr Verarbeitungsgeschwindigkeit zu haben. Im Moment verwende ich Mac OS X 10.5.7 auf einem 2 GHz Intel Core Duo und mein Programm läuft ziemlich langsam. Eine Zeit lang lief ich auf einem wesentlich älteren Laptop mit Ubuntu und es lief ~ 20 mal schneller.

Ich denke, ich könnte über LAN ein paar billige Second-Hand-PCs mit Linux anschließen und mithilfe von Threading-Programmen die Verarbeitungslast auf die Computer verteilen. Mein Programm ist peinlich parallel, dh eine lineare Erhöhung der Anzahl von Kernen sollte zu einer nahezu linearen Erhöhung der Rechengeschwindigkeit führen. Die Programmgröße, der Speicherbedarf und die HD-Anforderungen sind praktisch alle gleich Null, und die Menge an Informationen, die an die Hauptroutine (zwischen Computern) weitergeleitet werden sollen, ist grundsätzlich gleich Null.

Ich frage mich also, welche Art von Straßensperren dieser Umsetzung wahrscheinlich im Wege stehen werden. Sollte es ziemlich unkompliziert oder nein sein? Wird es überhaupt funktionieren? Welche Faktoren sollte ich beim Kauf der gebrauchten Computer berücksichtigen? Ist für mich ein Dualcore 2GHz ~ = zu einem Singlecore 4GHz? Ich rechne damit, dass ich als Faustregel mit den billigsten Multicore-Prozessormaschinen fahren sollte, die ich finden kann (beste Verarbeitung zum Kostenverhältnis).

4
Hast du einen Beowulf-Cluster in Betracht gezogen? http://en.wikipedia.org/wiki/Beowulf_cluster Piskvor vor 13 Jahren 2
Achten Sie auf Ihre Sicherungen! Jens Erat vor 13 Jahren 2

3 Antworten auf die Frage

3
Journeyman Geek

Warnung: Das meiste Wissen hier ist theoretisch und muss mit Fakten untermauert werden, die auf spezifischen Bedürfnissen basieren

Sie könnten / sollten wahrscheinlich einen Cluster einrichten. Wenn Sie sich für neue Systeme entscheiden, klingt das billigste Multicore-System wie eine gute Wette (wenn Sie sich für ältere Systeme entscheiden, vermeiden Sie Pentium-IVs, es sei denn, Sie möchten den Raum effizienter heizen als Sie verarbeiten.) Ich würde einen Dual-Core-2-GHz-Prozessor in Betracht ziehen System etwas besser als ein einzelner 4-GHz-Prozessor, es sei denn, Sie hatten einen einzelnen Thread, der viel Strom erfordert (was Sie nicht tun.) Ich würde beachten, dass neuere Versionen von Mainstream-Prozessoren im Allgemeinen besser sind als Diejenigen, die sie ersetzen, vor allem in jüngster Zeit, seitdem der Stromverbrauch ein Thema ist. Wenn ich auf das Wesentliche eingehen wollte, würde ich mir die verschiedenen Generationen von Prozessoren und Benchmarks ansehen, um eine klarere Vorstellung von Effizienz zu erhalten und Macht.

Möglicherweise möchten Sie die Worker-Systeme mit einem minimalen Betriebssystem und nicht standardmäßigen Images über das Netzwerk mit PXE starten, um Speicherplatz für jedes einzelne System zu sparen. Da Ihre RAM-Anforderungen minimal sind, könnten Sie wahrscheinlich das gesamte Betriebssystem in RAM haben Sie verwenden es nur für eine Sache

Sie müssten wahrscheinlich über Software verfügen, die in einem Cluster ausgeführt werden kann (IE, berücksichtigen Sie dies beim Entwurf - vielleicht mit MPI, haben Sie die Cluster-Software eingerichtet usw.) Davon abgesehen, habe ich MASSIVE-Arrays von gesehen Plausibel sind Commodity-PCs an einer Universität zu einem Cluster

Auf der anderen Seite ist die Berücksichtigung der massiven Parallelisierung Ihr Hauptziel, und Sie streben massiv parallele Workloads an. Vielleicht möchten Sie Alternativen zu einem x86-Cluster in Betracht ziehen - Ubuntu verfügt über einen 48-Core-Cluster, den sie aus Arm-Entwicklungsplatinen aufgebaut haben (I Ich denke, ein Bündel von Himbeer-Pi-Systemen wäre ... interessant und ziemlich effizient, wenn Sie sich nicht an einer riesigen Auswahl an kleinen, preiswerten Systemen beteiligen würden.

Ich liebe die Idee, dass ein paar Hundert Raspberry Pi-Maschinen Zahlen in einem Cluster zusammenfassen (vielleicht ein "Scheffel"?). Shinrai vor 13 Jahren 1
2
Scott Chamberlain

Der Geek von Geek hat sehr gute Punkte beim Einrichten eines eigenen Clusters, aber ich möchte auch hinzufügen, dass es abhängig von Ihrer Arbeitslast möglicherweise günstiger ist, etwas wie Elastic Map-Reduce zu verwenden. Wenn sich Ihre Arbeitslast in ein Map-Reduce- Problem verwandeln lässt, sollten Sie sich das genauer ansehen. Nach Berücksichtigung der Kosten für den Kauf der Computer, der Strom-, Kühlungs- und Wartungskosten kann es unter Umständen günstiger sein, das Gerät bei Amazon zu betreiben (0,10 USD / Stunde für die unterste Standardstufe von Amazon, 0,045 USD / Stunde, wenn Sie den aktuellen Spot verwenden Instanzpreis))

Wenn Sie bereit sind, ein wenig mehr Aufwand zu leisten, können Sie Ihre eigene parallele Verarbeitungs-Engine verwenden und die Mikroinstanz noch günstiger nutzen (0,02 USD / Stunde für eine vollständige Instanz, 0,007 USD / Stunde aktueller Spotpreis). Das eigene Map-Reduce-Paket von Amazon wird darauf nicht ausgeführt. Dies kann sehr nützlich sein, wenn Ihr Prozess stattdessen an die CPU gebunden ist, wenn der als Mikroinstanzen gebundene Speicher schneller als das kleine Standardimage ist, jedoch keinen Speicher und weniger RAM aufweist.

Bekomme ich im Allgemeinen, wenn ich den amazon-Dienst verwende, ein Shell-Konto, damit ich mein Programm auf ihrem Cloud-System kompilieren und debuggen kann, oder wie genau funktioniert das? Ich gehe davon aus, dass sie Spezifikationen für die Entwicklung von Software bereitstellen, um von ihrem verteilten System zu profitieren. Matt Munson vor 13 Jahren 0
Hängt davon ab, ob Sie eine vollständige Instanz oder das verwaltete MapReduce-System verwenden. Wenn Sie ihre Map Reduce verwenden, erhalten Sie eine Befehlszeilen-App, die Sie lokal zum Debuggen ausführen.] (Http://docs.amazonwebservices.com/ElasticMapReduce/latest/GettingStartedGuide/) Wenn Sie die Route "Other processing engine" aufrufen, erhalten Sie eine Route eine Adresse und einen privaten Schlüssel, zu dem Sie SSH benötigen, und haben die volle Kontrolle über die Box. Wie ich bereits sagte, ist die vollständige Kontrolle billiger, erfordert jedoch mehr Setup. Scott Chamberlain vor 13 Jahren 0
Sie haben eine [kostenlose Stufe] (http://aws.amazon.com/free/) ihrer normalen EC2-Instanzen, um damit herumzuspielen und es auszuprobieren, wenn Sie eine Nutzungsschwelle unterschreiten. Sie haben jedoch keine kostenlose Map-Reduce-Stufe, um es auszuprobieren. Scott Chamberlain vor 13 Jahren 0
Mein Programm ist in C ++ geschrieben. Bedeutet http://aws.amazon.com/elasticmapreduce/faqs/#dev-8, dass es eine Menge zusätzlicher Arbeit sein wird, damit MapReduce funktioniert? Wie viel Arbeit würde ich mir leisten, um meinen eigenen Motor einzurichten? Was den minimalen Arbeitsaufwand angeht, um ein minimal komplexes C ++ - Programm für die Thread-Programmierung unter einem Cloud-Computing-Dienst zu modifizieren, was wäre der beste Weg? Sollte ich andere Dienste als Amazon in Betracht ziehen? Ich werde die kostenlose Stufe ausprobieren und sehen, was mich erwartet. Matt Munson vor 13 Jahren 0
Sie können C ++ mit Map-Reduce verwenden. Allerdings müssen Sie wahrscheinlich die Art und Weise ändern, wie Sie mit der Ausgabe von Arbeitseinheiten in Ihrem Code umgehen. Die Kernlogik der Verarbeitung einer Arbeitseinheit sollte größtenteils gleich bleiben. Beachten Sie, dass dies anders ist als das Threading. Sie haben 2-3 Anwendungen, eine verteilende Arbeit, eine erledigende Arbeit und eine, die die erledigte Arbeit mit einem Ergebnis verbindet. Egal, was Sie sich entscheiden, es ist nicht unerheblich, Ihre App in eine verteilte App zu ändern. Ich würde empfehlen, einige Tutorials zu Distributed Computing oder zumindest zu Map-Reduce zu lesen Scott Chamberlain vor 13 Jahren 0
Das hört sich knifflig an. Ich habe noch nie versucht, ausführbare Dateien dazu zu bringen, Informationen vor und zurück zu geben. Wie würde das allgemein gelingen? Unterstützen Clouds keine parallele Verarbeitung? Matt Munson vor 13 Jahren 0
lasst uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/1645/discussion-between-scott-chamberlain-and-matt-munson) Scott Chamberlain vor 13 Jahren 1
0
TheLQ

Eine andere Option, die Sie in Betracht ziehen sollten, ist die Ausführung Ihres Programms in BOINC . Dies hat den Vorteil eines vorhandenen Systems, das bereits den schwierigen Teil der Verteilung und Sammlung von "Jobs" hat. Dadurch können Sie auch mehr Personen dazu bringen, Ihr Programm auszuführen. Sie können Freunde oder sogar zufällige Personen im Internet finden, um Ihr Programm auszuführen, wenn Sie es ausreichend bewerben. Auf diese Weise können Sie über einen (potenziell) massiven Cluster von Computern verfügen, auf dem Programme ausgeführt werden können, ohne die Startkosten vieler kleiner Computer und die laufenden Stromkosten.

Beachten Sie, dass ich noch nie auf BOINC programmiert habe. Daher ist es schwierig, dies herauszufinden. Für eine Startplattform würde ich jedoch denken, dass die Zeitersparnis, die es nicht erfordert, BOINC neu zu erfinden, die Komplexität der Verwendung ausgleichen würde