2 Raspberries miteinander koppeln

  • Hallo zusammen,

    Ich würde gerne wissen ob mir jemand sagen bzw. helfen kann wie genau ich 2 Raspberry Pi 4 8Gb miteinander verbinden kann um die Rechenleistung zu verdoppeln?

    Ich habe im Netz einige Tutorials zum Clusterbau gefunden, leider beziehen sich diese meistens auf den Bau eines Webservers oder ähnlichem.

    Mein Ziel ist es lediglich die Rechenleistung sprich die Prozessoren und RAM-Leistung meines bereits vorhandenem Betriebssystems auf dem einen Raspberry mittels einer zweiten Platine zu erweitern und diese im günstigsten Falle zu verdoppeln.

    Vielleicht hat ja jemand den ein oder anderen Tip oder interessanten Link dazu den er mit mir teilen möchte?

  • > Mein Ziel ist es lediglich die Rechenleistung sprich die Prozessoren und RAM-Leistung meines bereits

    > vorhandenem Betriebssystems auf dem einen Raspberry mittels einer zweiten Platine zu erweitern und

    > diese im günstigsten Falle zu verdoppeln.

    Und wozu?

  • Wenn 2 Raspberries miteinander kooperieren sollen, würde ich ihnen nichtöffentliche statische IP-Adressen außerhalb des von DHCP verwalteten Adresspools geben und sie an den gleichen Router hängen. Das genügt grundsätzlich, um sie miteinander kommunizieren zu lassen. Um von einem Raspberry auf den anderen zuzugreifen, genügt telnet - ein zugegebenermaßen sehr altes Programm. Die vorgeschlagene Konfiguration erlaubt es auch, die für die Parallelprogrammierung vorgesehenen Hilfmittel von Mathematica zu verwenden, was natürlich eine gewisse Affinität zu Mathematica voraussetzt. Vor Jahren habe ich mit der angesprochenen Konfigration mal MPI (Message Passing Interface) ausprobiert, das hat funktioniert, aber ich habe dann keine Zeit gefunden, viel damit zu machen. Eigentlich wollte ich damit verteilte numerische Mathematik machen, aber das steht immer noch auf meiner Wunschliste.


    Für MPI muss auf allen beteiligten Rechnern mpi-default-bin installiert sein; dazu auf dem Rechner, auf dem Programme compiliert werden sollen, die MPI verwenden, zusätzlich mpi-default-dev.


    Nebenbemerkung: Der Raspberry PI 4 hat ja ebenso wie einige Vorgängermodelle 4 Kerne. Wenn es um numerische Mathematik geht, könnte es auch attraktiv sein, diese vier Kerne eines Raspberries tatsächlich zu verwenden (auch da kann man, wenn ich mich recht erinnere, MPI für nutzen), das erspart die Kommunikation über TPC/IP.

  • Ungeachtet der Antworten anderer gehe ich mal davon aus, dass deine Frage darauf abzielt, den Pi einfach schneller machen zu können, indem du einen zweiten dran baust. Das wird so allerdings kaum machbar sein. Das wäre so ähnlich wie die Vorstellung, doppelt so schnell fahren zu können, wenn man ein zweites Auto kauft. Man kann mit einem Cluster bestimmte Aufgaben auf mehrere Schultern verteilen (eben z. B. Webservices - deshalb findest du so viel dazu), aber wenn du dir vorstellst, dass dann dein Desktop-System und deine Anwendungen schneller werden und der Bildschirm einfach flüssiger läuft, dann wird das nichts werden.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ja, mein Ziel ist es einfach meinen Pi schneller zu machen. Ist das nicht möglich? Ich hatte gedacht dass man zumindest den Ram-Speicher zusammenlegen könnte um das Gerät leistungsfähiger zu machen?

  • zumindest den Ram-Speicher zusammenlegen könnte um das Gerät leistungsfähiger zu machen

    Wie kommst Du eigentlich auf dieses flache Brett einer Aussage? Wie definierst Du "leistungsfähig" und kann mehr RAM einen Rechner im Telefonformat für Deine Anforderungen wirklich schneller/höher/weiter machen? Evt. wäre es sinnvoller, dann auf eine andere Plattform zu wechseln (Intel NUC oder ähnlich).

  • Ja, mein Ziel ist es einfach meinen Pi schneller zu machen. Ist das nicht möglich? Ich hatte gedacht dass man zumindest den Ram-Speicher zusammenlegen könnte um das Gerät leistungsfähiger zu machen?

    Auf 0 °K kühlen + Heizung zum Starten einbauen + Übertakten ...


    Nein, das Zusammenschalten von irgendwelchen PCs/RaspberryPI oder sonstigem bringt nichts, sofern sich die Aufgabe nicht parallel abarbeiten lässt und falls das geht, steht das Problem Kommunikation/Bandbreite im Weg.


    Mit dem Problem haben ganz andere Leute mit viel treuerer Hardware zu kämpfen.

  • Beziehungsweise einfach ein Betriebssystem gleichzeitig mit 2 Pi ansteuern zu können?

    Das geht nicht. Auch wenn man mehrere Raspberries in einem Netzwerk miteinander verbindet, braucht jeder Raspberry sein Betriebssystem. Das Betriebssystem managt die Benutzung genau eines Raspberry vom Start bis zum Herunterfahren und ermöglicht die Nutzung der Resourcen dieses einen Raspberry. Zwei Raspberries können nur über das Netzwerk miteinander verbunden werden und das auch nur, weil auf beiden Raspberries die Netzwerkdienste durch die jeweiligen Betriebssysteme bereitgestellt werden. In den Nachrichtenaustausch zwischen zwei Raspberries sind immer auch zwei Betriebssysteme involviert.

    Ich hatte gedacht dass man zumindest den Ram-Speicher zusammenlegen könnte um das Gerät leistungsfähiger zu machen?

    Wenn "Ram-Speicher zusammenlegen" bedeuten soll, dass jeder der beiden Raspberries dann unmittelbaren Zugriff auf 16 GB Speicher hat und diese 16 GB Speicher die gemeinsame Resource beider Rechner sind, dann muss klar gesagt werden, dass das nicht möglich ist. Jeder Raspberry hat seinen Speicher, an den er keinen anderen Raspberry ranlassen kann. Zwei miteinander verbundene Raspberries nennt man ein Mehrrechnersystem ohne gemeinsamen Arbeitsspeicher.


    Wenn man zwei Raspberries über einen Router (oder über einen Switch) miteinander verbindet, können sie über diese Verbindung miteinander kooperieren. Kooperieren heißt, dass sie Daten und, falls gewünscht, auch Programme miteinander austauschen können. Es muss aber wirklich jedes einzelne Byte, das von einem Rechner an den anderen gehen soll, über den Router übertragen werden, weil es keinen anderen Übertragungsweg gibt. Diese Kommunikation ist beim Austausch größerer Datenmengen ein Flaschenhals, weil ein Netzwerk deutlich langsamer ist als ein Prozessor. Außerdem muss die Kommunikation zwischen zwei Rechnern entweder individuell programmiert oder durch geeignete Hilfsprogramme organisiert werden. Ein mögliches Hilfsprogramm ist NFS (Network File System), das im Repository von RaspberryOS zur Verfügung steht (allerdings auf allen teilnehmenden Rechnern installiert werden muss). NFS ermöglicht einem Rechner den Zugriff auf Dateien eines anderen im Netzwerk erreichbaren Rechners. Außerdem kann man mit NFS auch Dateien an miteinander verbundene Rechner verteilen.


    Zwei Rechner miteinander zu verbinden, finde ich durchaus reizvoll; sie dann auch sinnvoll zu beschäftigen ist aber ziemlich herausfordernd. Ich halte es für utopisch, durch die Verbindung von zwei Rechnern eine Leistungsverdoppelung zu erzielen. Ein Performancezugewinn von 65 % bei der Bearbeitung von Aufgaben, die sich gut auf zwei Rechner verteilen lassen, würde ich einen sehr beeindruckenden Erfolg nennen. Das Problem ist, dass man geeignete Aufgaben erst einmal finden muss. Da sind Physiker und Berechnungsingenieure sehr erfolgreich - alle anderen kommen mit so wenig Mathematik durchs (Berufs-)Leben, dass sie nur ausnahmsweise fündig werden. Ich finde es reizvoll, Fraktale zu berechnen, aber ich weiß selbstverständlich, dass das nicht allen als sinnvolle Aufgabe gilt.


    Die große Nummer der Informatiker sind natürlich die Suchmaschinen, denen eine eigentlich sehr einfache Idee zugrunde liegt: Wenn man so viele Daten hat, dass man sie auf mehrere Rechner verteilen muss, dann kann man auch alle Rechner in die Suche mit einbeziehen. Das Prinzip ist, dass jeder seinen Datenbestand durchsucht und zum Schluss alle ihre Ergebnisse zusammenwerfen.


    In der praktischen Mathematik kann man nach Rechenaufgaben suchen, die sich in Teilaufgaben zerlegen lassen, die voneinander weitgehend unabhängig sind. Weitgehend unabhängig soll heißen, dass die beteiligten Rechner wesentliche Rechenleistung jeder für sich erbringen, gelegentlich Zwischenergebnisse austauschen und dann wieder jeder für sich weiterrechnen. Dieses Schema ist vielversprechend, wenn der Kommunikationsaufwand deutlich unter dem Rechenaufwand liegt. Wenn man mit großen Matrizen rechnen muss, könnte das klappen.

  • Die Ausführungen aus dem Beitrag #12 sind sehr vorbildlich, das sei eingangs erwähnt.

    Mein Ratschlag wäre, sich von der Plattform Raspberry mit ARM-HF-Architektur zu entfernen und in Richtung x86 zu schwenken. Bei 2 Raspberries mit je 8 GByte RAM komme ich auf etwa 160 € an Anschaffungskosten. Für das Geld (oder ein klein wenig mehr) sind gebrauchte PCs erhältlich mit leistungsfähigeren CPUs (= mit mehr echten Kernen und durch Hyperthreading Vervielfachung der Kern-Zahl wobei jeder Kern noch dazu leistungsfähiger ist) und mehr RAM als 16 GByte.

    Mein Github-Repository ist hier zu finden.

  • Hallo Dominik,


    in der MagPi gab es seit 2013 mindestens 3 Artikel mit Links auf Durchführungen von Clusterprojekten. Es wäre einen Versuch wert, dort mal systematisch zu suchen.

    Er aktuellste Beitrag ist der hier.


    Mache Dir aber keine Hoffnung, dass Du einen Effekt feststellen wirst. Das Problem ist die Parallelisierung von Aufgaben, um ein Problem zu lösen.

    Wenn Du einen Algorithmus hast, der in einem Programm umgesetzt, auf einem CPU-Kern läuft, dann mag es möglich sein, durch Parallelisierung andere CPU-Kerne auszulasten und einen signifikanten Effekt zu beobachten. Eine höhere Auslastung ist aber nicht unbedingt ein Maß dafür, dass jetzt schneller gerechnet wird.

    Sobald Du aber mehrere Systeme verwendest, wird die Beschleunigung an der geringen Datenübertragungsgeschwindigkeit zwischen zwei getrennten Systemen scheitern (wie die Kollegen bereits geschrieben haben). Dein Vorhaben wird so also nicht funktionieren können.


    Deswegen brauchst Du ein entsprechendes Betriebssystem, das Dir einen Cluster unterstützt. Es gibt etliche Links, die Dir zeigen, wie das unter Linux funktioniert. Wie oben geschrieben, in der MagPi gab es auch (mindestens) 3 Beiträge zu diesem Thema.


    Sinnvoll wird es erst dann, wenn das Verhältnis zwischen Kommunikation und Rechenzeit gegen 0 geht - die Rechenzeit also sehr hoch ist, um ein Ergebnis von geringer Datenbreite zu erzeugen. Das sind aber Spezialanwendungen, die mit Deiner Idee nichts gemeinsam haben.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas ().