Cluster (Auswirkungen)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Bedingt durch meine Jagt im Internet nach infos stolpere ich immerwieder über Cluster die aus den Pis zusammengebaut werden. Da ich ,, normaler Windows Anwender bin" aber irgendwie fasziniert von Linux bin, möchte ich mir etwas Clusterähnliches zusammenbauen. Die Idee dahinter: Das Cluster mit 5stk Raspis Pi 3 sollen mir eine bessere performance bieten ,, Quasi ein Linux PC ersetzen". Ob das jedoch sinn macht kann ich nicht beurteilen. Desshalb möchte ich gerne wissen wie eure erfahrungen mit Cluster sind?,

    Interessieren würde mich auch wie sich so ein Cluster verhällt und wie der Cluster sich entwikelt.? 5 Raspis bedeuten ja nicht gleichzeitig 5× Schneller.
    Für welche Anwendungen eignet sich ein Cluster überhaupt? Vielleicht ist meine Idee damit ein PC zu ersetzten falsch?:-)

    Was meint ihr dazu?

  • Eine bessere Performance für.... ? Es gibt verschiedene Anwendungsmöglichkeiten.
    Hinzu kommt das leider viele Blogger ihr Konstrukt gleich Cluster nennen obwohl es das gar nicht im eigentlichen Sinne ist.

    Erneut: Details.

    PC ... was ist ein PC? Verbindet man mit PC automatisch Windows? Wenn ja, welches Windows? XP? Oder kann man auf einem PC auch Linux nutzen? Oder vielleicht auch MacOSX? Was soll der PC machen/können? Spielen? .... Diese bösen Details ....

    Wohin soll die Reise gehen.
    Was möchtest du machen.
    Was hast du vor.

  • Quasi möchte ich einen Linux PC ersetzen um das Arbeiten (Für mich erstmal Linux besser kennenzulernen) etwas zu verbessern. Da ein Notebook natürlich völlig snders ausgestattet ist als ein Raspi möchte ich dem mit einem Cluster entgegenkommen. Natürlich möchte ich mehr geschwindigkeit erhoffen. Ob dem so sei weis ich nicht.

    Als Ziel: Ein 5 Platinen Pi Cluster der den Pi etwas verschnellert. Möglichst nahe an ein Notebook ( was wohl nur bedingt machbar ist)

    Benutzt soll der PC der normalerweise mit Linux läuft ausschliesslich für das erlernen von Programmiersprachen werden. Natürlich aber auch zu testzweken um mir die Linuxwelt etwas aneignen zu können. Derzeit bin ich ein Windowsanwender. Möchte für Linux aber nicht gleich ein Notebook kaufen. (Weil Teuer;)

  • Hallo poker-facemammut222,

    um mal den bekannten englischen Computer-Pionier Alan Turing zu zitieren: "Hierfür brauchen Sie keinen Computer! Die Kommission teilt Ihnen keinen Computer zu! Der nächste bitte!"

    Also, zum Programmiersprachen lernen (eine zugegebenermaßer sehr gute Idee :thumbs1: ) brauchst Du keinen Pi-Cluster, da reicht Dir ein beliebiger Raspberry Pi mit einer 8 GB-SD-Karte, Tastatur, Monitor...


    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

    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.

    Einmal editiert, zuletzt von Andreas (12. August 2016 um 23:30)

  • Ich kann deine Gedankengängen etwas folgen...
    Da ein einzelner RP (selbst die Neusten) ja selbst im Vergleich zu lahmen Netbooks sich ja immer "etwas zäh" anfühlen, wenn man mit der GUI arbeitet, möchtest du die Power mehrer RPs bündeln, um damit mehr Performance zu haben. :)

    Für die Ungeduldigen, die mein Zeuchs nicht lesen wollen:
    http://makezine.com/projects/build…rry-pi-cluster/
    http://www.nigelpond.com/uploads/How-to…oop-Cluster.pdf
    http://www.southampton.ac.uk/~sjc/raspberrypi/
    https://github.com/ajdecon/ansible-simple-slurm-cluster
    http://coen.boisestate.edu/ece/files/2013….Cluster_v2.pdf

    ... und so weiter... es gibt viele, die da schon etwas gemacht haben... ein Blick darauf ist bestimmt recht hilfreich... :)

    Grundsätzlich ist das nahe liegender Gedanke und auch nicht falsch, ABER: :fies:
    Die Betriebssysteme (Windows, normales Linux in seinen unterschiedlichen Geschmacksrichtungen wie z.B. Debian, Ubuntu, Centos, RedHat, Suse usw.) sind primär nicht dafür ausgelegt, über mehrere Netzwerkknoten verteilt zu rechnen. Die verschiedenen GUIs schon gar nicht.

    Es gibt (mindestens) eine Cluster-SW-Erweiterung für Linux ((ansible), die ich aber eigentlich gar nicht wirklich kenne), die es erlaubt, Rechenthreads in so einer Art Master-Slave Art zu verteilen:
    Ein Master teilt den Job auf die Clients auf, diese machen was und schicken das Ergebnis zurück (oder woanders hin) - jetzt mal ganz simple erklärt.

    Das setzt aber voraus, dass der Job sich ausreichend granular verteilen lässt (also entsprechen kleinteilig aufgeteilt werden kann), sonst bringt das nix.
    Weiterhin muss das Netzwerk eine ausreichende Bandbreite haben, da die Knoten-zu-Knoten-Kommunikation je nach Auslegung der Aufteilung der Jobs sehr intensiv sein kann ==> große Bandbreite erforderlich. Noch besser: gesonderte(s) Netzwerk (core2core-Netzwerk(e!)) um den normalen Traffic davon zu trennen.

    Das ganze Thema ist a) hochaktuell, b) sehr anspruchsvoll (ein "normaler" Programmierer hat schon mit dem gestalten von multi-threaded Applikationen so seine Probleme... - ist auch nicht einfach, wenn es darum geht, alle Cores unter Dampf zu halten, keine "death-looks" zu bauen und letztlich die einzelnen Ergebnisse sauber zusammen zu setzen.

    Fazit:
    Interessante Idee, kann man machen, aber da musst du quasi sehr viel noch selber programmieren.
    Aber hey(!), das ist es doch, was (auch) Spass macht! :thumbs1: :thumbs1:

    Grüße, das Zen

  • Hi Zentris,

    (hat Dir schon mal einer gesagt, dass Deine Beiträge vor dem User-Ersatz-Treffen schon gut waren - und Du danach noch eine Schippe drauf gesetzt hast?)


    Fazit:
    Interessante Idee, kann man machen, aber da musst du quasi sehr viel noch selber programmieren.
    Aber hey(!), das ist es doch, was (auch) Spass macht! :thumbs1: :thumbs1:

    Tja, aber was macht jetzt poker-facemammut222, wenn er doch erst einmal überhaupt Programmieren lernen will? Was Du ansprichst, ist jetzt nicht gerade leichte Kost, die in Anfänger-Tutorials breit beschrieben wird oder der klassische Lernstoff für Einsteiger darstellt.
    Ich denke weiterhin, dass er gut beraten ist, erstmal mit EINEM EINZIGEN einfachen RPi anzufangen, dort die Hohe Kunst des Programmierens zu lernen, eigene Ideen umzusetzen, um zu erkennen, wo die Reise hingeht. Und das alles als Vorbereitung für die Wanderung auf dem Weg zum Ziel.

    poker-facemammut222: Programmieren bedeutet in der Regel, stumm vor dem Rechner zu sitzen und darauf zu warten, dass Du Inspirationen empfängst, die eine oder auch andere Taste zu drücken. Auch der langsamste Rechenknecht der Welt, ist gelangweilt, wenn Du hin und wieder mal eine Taste triffst. Der spannendere Teil, den eingegebenen Code (als Skript) zu testen, ein ausführbares Programm zu erzeugen (compilieren) und zu testen, nimmt dagegen einen vergleichsweise geringen Zeitanteil ein. Zugegeben, hier macht das auf einem schnellen Rechner mehr Spaß. Aber die Programme, die Du auf einem Raspberry Pi entwickelst, werden am Anfang wenige Hundert Zeilen nicht übersteigen. Die Programmiersprachen, die ich nutze, brauchen dafür deutlich weniger als eine Sekunde. Auch auf dem Raspberry Pi. Von daher sind Gedanken, durch einen Cluster eine Beschleunigung zu erzielen, (zunächst) abwegig - aber weiterhin interessant.

    Und was die Arbeit mit / auf einem Raspberry Pi meiner Meinung nach sehr interessant machst. Du lernst RICHTIG zu programmieren!

    :s Warum das?

    Ganz einfach. Der Raspberry Pi hat vergleichsweise reduzierte Ressourcen (Speicher, Geschwindigkeit). Wenn Du hier ganz normal (klassisch) programmierst, dann sind die Programme durchaus behäbig. Je mehr Du über den Code nachzusinnen beginnst, umso mehr Tuning-Potential wirst Du finden. Auf einem 2GHz-Multicore-System kannst Du total bescheuerte Algorithmen ausdenken und umsetzen - das Ergebnis ist (bei nicht zu großer Datenmenge) immer sehr schnell, aber Lerneffekt = Null. Wenn Du in diesem Sinne auf dem RPi RICHTIG zu programmieren gelernt hast, dann sind Deine Werke auf einem PC deutlich besser als die Werke anderer, die sich mit den speziellen Bedürfnissen eines RPi nie zu beschäftigen brauchten.

    Warum schreibe ich das... Ich habe letztes Jahr ein Projekt gehabt, in dem die Bearbeitungszeit auf diese Weise um den Faktor 5 beschleunigt wurde und in der Zwischenzeit um den Faktor 12 - 14. Und heute Morgen bin ich unmittelbar nach einem Traum eines weiteren Beschleunigungspotentials aufgewacht - und bin jetzt schon gespannt, ob es so wie geträumt auch funktionieren wird. Aber sicher bin ich mir da jetzt schon - sonst hätte ich den Traum schließlich nicht gehabt!
    EDIT: Hat funktioniert! Nach Durchlaufen eines Profilings wurde bei einem der Algorithmen mit auffallender Verweildauer eine Beschleunigung um den Faktor 4.5 erzielt... Und das auf dem PC... Was mag das auf dem RPi bringen?


    Und schließlich gibt es Programmierumgebungen (IDE = Integrated Development Environment), die auf dem RPi annähernd so schnell laufen wie auf einem PC-Boliden. Und ehrlich gesagt, wenn ein Programm mit 4000 Zeilen auf dem RPi 2 Sekunden Compilierzeit benötigt, auf einem PC 0,5 Sekunden. Was soll's? In beiden Fällen habe ich z.B. 15 Minuten Code eingeklimpert, bis ich's Eingegebene testen kann.


    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

    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.

    2 Mal editiert, zuletzt von Andreas (15. Oktober 2017 um 21:35)

  • also wenn es um programmieren lernen geht, dann kann man auch den schnelleren PC nutzen, der langweilt sich doch wenn er auf Tastendrücke vom User wartet.

    Ich hatte damals Prüfsoftware für meine Hardware geschrieben, @work auf dem PC (DOS) @home ging es am Atari weiter und ausgetauscht wurde per Disk und Quellcode.
    Wenn du keinen extra PC kaufen möchtest nimm einfach eine Linux Live Distribution die per CD/DVD/USB Stick gestartet wird.

    Der PI kann ja später Programme (neu kompiliert) übernehmen, aber einen PI oder PI Cluster brauchst du nicht, kannst du wie das Zen sagt später, viel später zusammenbauen wenn du noch magst.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Um das von Zentris geschriebene noch ein wenig zu vervollständigen: Ja, Cluster machen nur Sinn, wenn man ne gescheite Netzwerkverbindung hat. Ansonsten bremst du durch Parallelität mit mehreren Knoten das System deutlich aus im Vergleich zu nur einem Knoten. Mit gescheiter Netzwerkverbindung meine ich aber nicht nur hohe Bandbreite. Viel wichtiger ist eine niedrige Latenz! Das Problem bei den üblichen Ethernetkarten ist die unglaublich hohe Latenz dieser. Damit gewinnst du wirklich gar nichts. Die einzige Technik, mit der man wirklich effizient auf mehreren Knoten arbeiten kann - und auch nur, wenn man wirklich guten Code hat - ist Infiniband.

  • Wenn sich die GUI auf dem Pi zäh anfühlt, ist es entweder die falsche GUI, der falsche Pi, eine zu langsame SD, oder es liegt an RDP :fies: Letzteres ist mit schnellen PC's auch zäh.

    Zum programmieren benötigt man keine GUI - ich empfehle die oldschool Mittel: Konsole und Texteditor. Dabei lernt man dann auch direkt mit der Konsole umzugehen und gewöhnt sich das faule benutzen einer Maus ab ;)

  • Hallo Meigrafd,


    Zum programmieren benötigt man keine GUI - ich empfehle die oldschool Mittel: Konsole und Texteditor. Dabei lernt man dann auch direkt mit der Konsole umzugehen und gewöhnt sich das faule benutzen einer Maus ab ;)


    Eine GUI macht's aber angenehmer:
    - Syntax-Highlighting (inkl. der Funktionen eingebundener Dateien / Bibliotheken)
    - Code-Vervollständigung (bei Funktionen inkl. Parameter)
    - Code-Snippets (getestete und fehlerfreie Konstrukte)
    - Compilieren (so es sich um eine Compilersprache handelt) nach Drücken einer Taste und das immer wieder auf's Neue!)
    - Compilieren und Starten des in Entwicklung befindlichen Programms / Pakets
    - ... und was auch immer noch ...

    Ich gebe Dir insofern Recht:
    - Man sollte am Anfang mal per Konsole ein Programm geladen haben
    - Man sollte am Anfang mal ein Programm compiliert und dabei verschiedene Parametersätze ausprobiert haben
    - Man sollte am Anfang mal ein Programm per Konsole gestartet haben
    Aber wenn man darüber hinaus ist und sich eine IDE nach seinen Vorstellungen eingerichtet hat, dann sollte es mit der Konsole auch mal reichen. Per GUI geht's bequemer und einfacher und schneller und fehlerärmer und ... und ...


    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

    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.

  • Das Programmieren steht mit dem Lerneffekt erstmal im Vordergrund. Da ich via VNC Server von Notebook auf den Raspberry Pi zugreife, ist dies fast ein Widerspruch in sich selbst. Ich könne natürlich auch das Programmieren direkt auf dem Notebook erlernen. Da mich der kleine aber unglaublich fassziniert mitsammt dem ganzen Linux Betriebssystem, werde ich natürlich auf dem Pi arbeiten.

    Wozu werden denn die Clusters hauptsächlich gebraucht? Und wird ein Cluster wirklich schneller? Oder auf was wirkt sich ein Cluster aus? Geschwindigkeit, Stabilität? Sicherheit?

  • Andreas: Die meisten von dir erwähnten Dinge gibt es auch über die TUI ;)

    Es spricht nichts dagegen seine Sachen unter Windows zu programmieren - mache ich teilweise auch so. Das eigentliche Programm/Script überträgt man dann entweder selbst oder hat direkt eine Netzwerkfreigabe vom Pi eingebunden worauf direkt der Code liegt. Anschließend via SSH auf den Pi gehen und compilieren/ausführen und gucken obs das macht was man möchte.
    Vorzugsweise öffne ich aber auch direkt eine SSH Verbindung und programmiere dann via SSH, also Text-User-Interface.

    Cluster gibt es wie gesagt für verschiedene Aufgabenbereiche. Die meisten dienen dazu Rechenaufgaben aufzuteilen, die allerdings für gewisse Programme sind welche wiederum für Clustering ausgelegt sind. Manche denken oder sprechen auch von Cluster wenn sie einfach nur Datenträger mehrerer Pi's zusammen schalten, oder die GPIO's über den GPIO-Server erweitern (zB 5 Pi's a 26 GPIO's = 130 GPIO's ohne zusätzliche Port-Expander...), aber das ist dann leider der falsche Begriff.

    Sofern es um Berechnungen geht könnte man im entfernten Sinne zum Beispiel SETI@Home als Beispiel nennen: Ein Datenpaket wird in mehrere Bruchstücke aufgeteilt, an unterschiedliche Clients geschickt die wiederum daran herum rechnen und sofern fertig wieder zurück gesendet und zusammengesetzt... Also eine Lastverteilung. Das geht natürlich schneller weil viele Clients zusammen einen billigen Super-Computer bilden.

    => https://de.wikipedia.org/wiki/Cluster

    Wie aber auch schon erwähnt wurde, muss die Software das explizit unterstützen oder eine andere die dafür sorgt. In deinem Fall macht das aber kein Sinn damit die GUI zu beschleunigen, da setzt du an der falschen Kante an. Das kann übrigens auch an zu wenig RAM für die GPU liegen, das ist beim Pi nämlich Shared


  • (hat Dir schon mal einer gesagt, dass Deine Beiträge vor dem User-Ersatz-Treffen schon gut waren - und Du danach noch eine Schippe drauf gesetzt hast?)

    Danke! Ich versuche, mit etwas mehr Mühe zu geben als vorher... hab ja auch etwas mehr Zeit... :)


    ...Programmieren bedeutet in der Regel, stumm vor dem Rechner zu sitzen und darauf zu warten, dass Du Inspirationen empfängst, die eine oder auch andere Taste zu drücken.

    Genialer Satz, dem eigentlich nichts mehr hinzu zu fügen ist! :thumbs1: :thumbs1:

    LG, das Zen
    Automatisch zusammengefügt:


    Wozu werden denn die Clusters hauptsächlich gebraucht? Und wird ein Cluster wirklich schneller? Oder auf was wirkt sich ein Cluster aus? Geschwindigkeit, Stabilität? Sicherheit?


    Ich habe 16 Jahre an einer Telekomunikations-Backend SW (mit-)gearbeitet: Das ist die SW, die letztlich den Anrufaufbau, die Verknüpfung der richtigen Mobilgeräte miteinander und die monetäre Abrechnung (Post-Paid/PrePaid) realisiert. Inclusive der Features wie Frei-SMS, "Friends and Familie", Telefonkonferenzschaltungen usw...

    So eine SW hat (bei uns) eine Verfügbarkeit von 99,999%, das sind max. ca. 5 min/Jahr, wo die gesamte Anlage offline sein darf.
    Der dazu notwendige Aufwand ist enorm: ALLES wird mindestens doppelt ausgelegt (Stromversorgung, Switche, Loadbalancer, Netzwerke, Datenbanken, Rechnerknoten... - und dazu noch möglichst auch räumlich getrennt).

    So eine Anlage ist als massive Cluster-Anlage ausgeführt: Allein von den eigentlichen "Prozessing-Nodes" gibt es mindestens 8 bis (aktuell) 64 Nodes. Und dass sind üblicherweise Racks mit Doppel-CPU mit je ca. 12-24 (virt.) Kernen ("Threads").

    Die SW dafür muss also massiv multi-threaded arbeiten, der Loadbalancer schiebt die ankommenden Requests je nach Load auf unterschiedliche Knoten, die Knoten sind mit je 4 LANs miteinander verbunden (und diese doppelt ausgeführt, also pro Rack-Einschub 8 LAN-Kabel) - derzeit noch 10Gbit, optisch wird derzeit eingeführt.

    Und diese hohe Anzahl von Processing Nodes (das sind die, die die eigentliche Arbeit machen) ist auch nötig: Um die geforderten Antwortzeiten bei einem Vermittlungsaufbau im Mobilfunknetz zu erreichen, darf die Antwortzeit auf einen Request (die Latenz) im Mittel ca. 60ms nicht übersteigen.

    Bei einer üblichen Request-Last von 10 - 20 MBHCA (BHCA=Busy hour call attemps) laufen also 10-20 Millionen Requests pro Stunde ein, das sind 2778 - 5555 pro Sekunde. Da muss jetzt klassifiziert werden, wer anruft, welche Services er nutz(t|en darf), ob Geld da ist, Geld reserviert werden, Zielteilnehmer ermittel werden, Verbindung durchschalten. Oder (bei laufender Verbindung: Wer hat angerufen, hat der noch Geld, Geld reservieren + Beitrag vom letzten attemp verbuchen).
    (Ist jetzt alles etwas grob erläutert und nicht 100% präzise, soll es auch nicht sein, es geht um das Prinzip).

    Wenn dass jetzt nur ein Rechner machen würde, hätte dieser so ca. 0.36 - 0.18ms Zeit pro Request. Das schließt alles ein, also auch DB-Anfragen (Select's und locked Inserts (transcations) bei einer DB mit z.B. 20-30 Millionen Usern. Jeder (ändernde) Zugriff muss geloggt werden (hier geht es um viel Geld, also muss das Revisionssicher sein)... ist nicht zu schaffen... (mit nur einem Node) - schon die I/O Load schafft der nicht...
    - Wenn dann noch Silvester 00:00 - 00:15Uhr ist und plötzlich ALLE Anrufen/SMS verschicken wollen, muss auch noch Reserve da sein...

    Deshalb wird das massiv parallelisiert... aufgeteilt, DB wird im RAM gehalten usw... geclustert... dann sind die 60ms zu halten... im Median...

    Grüße, das Zen

  • Danke Zen für die ausführliche Antwort. Die ist dermassen gut Aufgesetzt das ich in etwa verstehen kann was ein cluster bewirken soll.

    Dies sagt mir in etwa aus:
    - Für meine anwendungen werde ich wohl keinen Cluster benötigen.
    - Ein Linux-Notebook mit einem Raspberry Pi Cluster gleichzustellen bringt nicht die nötigen Ergebnisse.

    Ich dachte das ich mit einem Cluster den Raspberry Pi etwas verstärken kann. Grob gesagt wollte ich dadurch an das niveau eines Notebooks herankommen.


    Ich finde halt den zusammenbau sehr Interessant. Aber da ich solche Programme die einen Cluster benötigen nicht brauche, entfällt dieser wohl aus meinem Projektrepertoir:)

  • Ein weiteres klassisches Anwendungsfeld für Cluster sind große numerische Simulationen - bspw. Wetter- und Klimamodelle aber auch Crashtest-Simulationen im Automobilbereich. Da müssen meistens auf einem großen bis sehr großen Datensatz (globales oder lokales geographisches Gitternetz mit mehreren Höhenschichten, an die Karosserie angepasstes Gitter) Differentialgleichungen gelöst werden, und das auch noch zeitkritisch (wer braucht schon die Wettervorhersage von gestern?). Die einzelnen Berechnungen wiederholen sich, nur halt mit anderen Zahlenwerten, für jede Berechnung müssen noch die Werte der Nachbarzellen berücksichtigt werden. Sowas eignet sich gut, um das Problem in kleine Häppchen (Blöcke, Schichten, wie auch immer das geometrisch aussieht) aufzuteilen. Die Berechnung innerhalb eines solchen Blocks ist weitestgehend autonom, lediglich am Rand müssen Werte mit den Nachbarblöcken ausgetauscht werden. Hier kommen dann auch die schnellen Netzwerkverbindungen mit den niedrigen Latenzen ins Spiel, die KrawallKurt bereits erwähnt hat (wobei InfiniBand da nicht die einzige Lösung ist). Solche Systeme haben gerne mal Zehntausende bis Millionen von Rechenkernen (Cores).

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!