Linux Cluster
-
Hi,
ich möchte/soll ein paar etwas ältere Desktoprechner zu einem Cluster zusammenbauen um Berechnungen durchführen zu lassen.
Allerdings finde ich diverse unterschiedliche Ansätze, die irgendwie veraltet sind oder nicht so ganz schlüssig sind.
Muss ich z.B. alle Programmen und das OS auf allen Rechnern haben und jedes mal neu die Festplatte kopieren, wenn ein neues Programm hinzukommt? Ich habe diverse Sachen zu "single system image" gefunden (z.B. Kerrighed) aber das scheint alles nicht mehr genutzt zu werden.
Hat jemand ein sinnvolles und aktuelles Tutorial oder Ideen, wie ich 5 Rechner mit einem mittelmäßig großen Aufwand zu einem Cluster zusammenbauen kann?
-
Ich kenn mich da im Cluster Bereich nicht so aus, aber die üblichen Systemmittel für Diskless Systeme (PXE/Netboot + NFS) würden zumindest schon mal dafür reichen, dass alle Systeme das gleiche System + aktuelle Anwendungen haben.
-
1. Installiere SLURM: https://computing.llnl.gov/linux/slurm/. Die Debian-Derivate haben dafür Pakete, slurm-llnl* . Oder (Oracle) grid engine. Auf keinen Fall TORQUE.
2. Shared File System: Ist extrem praktisch. Dateien kopieren: nicht gut, viel zu viel Aufwand. Also nimm NFS für die User- und Systemverzeichnisse, und Netboot, wie oben vorgeschlagen. Jeden Knoten einzeln administrieren möchtest du eigentlich auch nicht.
Beim Shared File System beim sync aufpassen: Wenn du Jobs abschickst, und das Dateisystem auf den Rechenknoten die letzten Änderungen noch nicht, oder noch nicht überall, mitbekommen hat, hast du Spaß. Also sync in der Job-Präambel, z.B. (<- schlecht bei hohem Durchsatz, schlecht für Skalierbarkeit).3. Homogenes ... alles. Wenn du 2. befolgt hast, hast du schonmal _exakt_ dasselbe Betriebssystem. Die Hardware sollte sich aber auch nicht stark unterscheiden. Binaries die auf einem System optimiert gebaut wurden sollen schließlich auf allen laufen, womöglich noch mit MPI vernetzt... wenn du dann ein 32-bit, ein 64-bit und drei unterschiedliche ARMs stehen hast, gibt es nur Ärger. (Und vom selben Image booten die vmtl. auch nicht.)
4. Überleg' dir, was simuliert. Wenn es ältere Maschinen sind: Bringt es überhaupt was, die noch zu betreiben? Kann man Zeit auf einem einzelnen, _guten_ Rechner, oder einem Cluster, mieten, der die rechentechnisch in die Tonne haut? Haben die zusammen viel RAM? Möchtest du verteilte Programme laufen lassen, oder nur viele Jobs parallel, aber unabhängig?
Oder möchtest du nur die Job-Verteilung testen/demonstrieren?
Ich sehe gerade, du hast nur 5 Rechner -- was sollen die tun?
^ caveat: Das ist alles die old-school, mini-HPC Lösung. Die coolen und hippen Jungs von heute, die echte, geldverdienende Systeme bauen, benutzen sicher was anderes. Vermutlich irgendwas mit docker orchestration oder Hadoop, oder anderen modernen Buzzwords, aber davon habe ich noch weniger Ahnung als von "^".
-
Das hilft mir schon weiter, vielen Dank!
Die Berechnungen laufen bisher auch auf einem guten Rechner aber sind nicht so wichtig, dass ich die Rechenleistung auf diesem verschwenden möchte.
Es handelt sich um ab initio Rechnungen von kleineren Molekülen. Auf einem mittelklasse Heimrechner sind die in 10 Minuten bis 8 Stunden fertig. Hauptsächlich möchte ich, dass er nebenher sehr viele Jobs (verteilt oder auch parallel) durchführt. Ich möchte damit den Verwaltungsaufwand gering halten und die noch verfügbare Leistung ausnutzen. Daher muss es keine super perfekte Lösung sein. Bin auch offen für weitere Ideen.