MPD einrichten
1. Process Management System
Die MPICH2-Benutzerhandbuch ist sehr hilfreich. A
Wir gehen davon aus, dass MpiInstallation MPICH2 installiert ist.
MPD
Um die speziellen Mpi MPI-Programme mit mpiexec auf Parallelrechnern starten zu können, muss ein Prozess Management System eingerichtet werden. MPICH2 bietet mehrere Prozess Management Systeme. Der Standard ist MPD. Bei einem Rechner mit mehreren CPUs wird einfach ein Prozess Management System gestartet.
Dazu reicht schon ein Befehl.
mpd &
Soll der MPD auf mehreren Prozessoren die auf einem Rechner mit gemeinsamen Speicher untergebracht sind (Dual Core, Quad Core etc.), dann ist die Sache hier am Ende angelangt. Herzlichen Glückwunsch beim starten der Programme mit mpiexec. Allerdings sollte dann bei der Entwicklung eher OpenMP in Erwägung gezogen werden, da der Code wesentlich übersichtlicher und das Erweitern von bestehenden Algorithmen einfacher ausfällt.
MPD auf einem Cluster starten
Bei Clustern aus mehreren Rechnern wird es schon wesentlich komplizierter.
Um MpiMpdRing MPD auf mehreren Rechnern einzurichten, sind die folgenden Punkte zu erledigen. Das hat mich einige Tage gekostet.
- Die Datei /etc/hosts auf allen Rechner anpassen oder mit DnsServer DNS-Server arbeiten. Aufpassen mit localhost! Siehe dazu unten Fehlerbehandlung oder alternativ Nameserver einrichten. Wenn ein Nameserver vorhanden ist, dann ist schon viel gewonnen.
- Einen extra Benutzer auf allen Maschinen für die Arbeit mit MPI einrichten. Bei der Arbeit mit MPI muss man davon ausgehen, dass sich ei Eindringling ohne weitere Vorkehrungen von jedem beliebigen System auf alle anderen Systeme Zugang verschaffen kann.
- Am besten mittels LinuxNfs NFS einen User-Account auf allen Rechnern einrichten, so sind alle benutzerspezifischen Einstellungen und die Parallelprogramme auf allen Rechner gleich vorhanden.
- Der Start der MPD auf allen Rechnern ist per Hand sehr mühsam. Wesentlich bequemer geht es mit mpdboot. Aber dann müssen Passwörter im Akkord eingegeben werden. Etwas bequemer geht alles, wenn die Passworteingaben beim Start von mpdboot wegfallen. Das kann mittels LinuxSshPublicKeyAuth Public-Key-Authentifizierung erreicht werden.
- MpiMpdRing MPD-Ring mit bootmpd starten und mit mpdringtest und mpdtrace testen.
Auf diese Weise kann man MPI-Programme mit mpiexec auf einem beliebigen Rechner ausführen und sehr zufrieden mit dem Cluster arbeiten. In den Mpi Beispielen mehr dazu.
SMPD
Hier am Rande: Der SMPD ist ein alternativer Prozess Manager für Unix und Windows. Solange die Binärformate (int, long, double etc.) auf den Plattformen gleich sind, so sollen Windows und Linux Rechner in einem Cluster genutzt werden können. Das habe es nicht probiert.
2. Cluster
Ein ist Cluster ist ein Haufen Rechner, die zusammen als Einheit fungieren, um bestimmte Aufgaben zu erfüllen.
Die bloße Vernetzung von Rechnern ist allerdings noch kein Cluster. Erst wenn die Rechner ein Einheit zur Lösung von Aufgaben bilden, dann handelt es sich um ein Cluster. In unserem Fall soll Parallelrechner werden, auf dem Programme basierend auf der Bibliothek MPICH2 ausgeführt werden können.
Meine Beispiele werden alle in diesem Rechnerverbund ausgeführt:
Dabei wird IBM wegen seiner schwachen Leistung und schlechten Anbindung mit 10Base-T und Thalamus wegen seiner schlechten Verbindung über VPN und Internet meist weggelassen. Diese Rechner dienten nur zum Experimentieren, um ein Gefühl für MPI zu bekommen.
3. Cluster im LAN
Im Internet ist oft die Rede von einem MPD-Ring. Das MPICH2-Benutzerhandbuch erwähnt "MPD ring" nur einmal in dem Kontext. Die Rechner können jedoch beliebig (Vollvernetzung) miteinander kommunizieren.
Nächster Schritt: Unbedingt die /etc/hosts auf allen Rechnern anpassen oder mit einem Nameserver arbeiten. Viel Spass!
Die Rechner
IBM | 486 mit 66 MHz |
Orion | Pentium I, 133 MHz |
Amygdala | Pentium III (Coppermine) 667 MHz |
Thunderbird | Athlon Thunderbird mit 1.4 GHz und später mit 1.5 GHz |
MpdDC | Intel Dual Core 2 GHz |
mpdhosts2 ist eine Liste mit vier Rechnern (insgesamt fünf CPUs), die ich häufig für die Übungen genutzt habe.
Der 486er namens IBM ist nicht dabei, weil dieser Rechner wehen seiner langsamen 10Base-T-Verbindung und Leistungsfähigkeit eher gebremst hat.
mpdhosts2
MpiDC:2
Thunderbird:1
amygdala:1
Orion:1
Thunderbird:1
amygdala:1
Orion:1
Skript runmpd verwende ich gerne zum Start des MPD-Rings. Dabei muss die Host-Liste von oben als Parameter angegeben werden. War der Start erfolgreich, dann macht das Skript noch einen Test mit mpdringtest.
runmpd mpdhosts2
runmpd
#!/bin/bash
# Andreas Tobola
# Usage: mpdrun hostlist3
cd `dirname $0`
NUM_OF_HOSTS=`wc -l $1 | awk '{print $1}'`
mpdboot -v -n $NUM_OF_HOSTS -f $1 && mpdringtest 10
# Andreas Tobola
# Usage: mpdrun hostlist3
cd `dirname $0`
NUM_OF_HOSTS=`wc -l $1 | awk '{print $1}'`
mpdboot -v -n $NUM_OF_HOSTS -f $1 && mpdringtest 10
Wenn mpd nicht sauber beendet wurde und deshalb nicht starten will, dann diese zwei Befehle, notfalls auf allen Rechnern ausführen.
mpdallexit mpdcleanup
Genteleman, please start your engines!
$ ./runmpd mpdhosts2
running mpdallexit on amygdala LAUNCHED mpd on amygdala via RUNNING: mpd on amygdala LAUNCHED mpd on MpiDC via amygdala LAUNCHED mpd on Thunderbird via amygdala LAUNCHED mpd on Orion via amygdala RUNNING: mpd on MpiDC RUNNING: mpd on Thunderbird RUNNING: mpd on Orion time for 10 loops = 0.0871088504791 seconds
4. Mit drei Rechnern im Internet
Hier versuche ich einen Server in 80 km Entfernung zusätzlich über das Internet über VPN (LinuxOpenVpn OpenVPN) in den MPD-Ring einzubinden.
mpdboot
running mpdallexit on amygdala LAUNCHED mpd on amygdala via RUNNING: mpd on amygdala LAUNCHED mpd on thalamus via amygdala LAUNCHED mpd on IBM via amygdala RUNNING: mpd on thalamus RUNNING: mpd on IBM time for 50 loops = 9.1834859848 seconds
mpiexec -n 1 -host amygdala ~/code/mpi/04_ring/ring : -n 1 -host thalamus ~/mpi/ring : -n 1 -host IBM thalamus ~/mpi/ring
Fehlermeldung auf allen Rechnern
(mpiexec 392): no msg recvd from mpd when expecting ack of request
no msg recvd from mpd when expecting ack of request
Geht nicht! Das muss ich noch genauer untersuchen!
5. MPD auf einem bestimmten Rechner testen
5.1Einen einzelnen mpd zum Testen starten
normal zum Testen
mpd
oder als Dämon
mpd -d
5.2mpd auf einem Rechner mit 4 CPUs einrichten
mpd --daemon --ncpus=4