Der Nutzer erzeugt beliebig viele Instanzen aus einer Menge angebotener Betriebssysteme. Des weiteren kann beliebig viel Speicher aus dem Amazon Simple Storage Service S3 genutzt werden. Da MPI zur Verfügung steht, ist massiv paralleles Rechnen möglich. Jede Instanz hat 2 IP-Adressen, mit denen sich 2 (DNS-) Namen verbinden:
Da es sich bei den Instanzen um "normale" Betriebssysteme handelt, können auf diesen Instanzen auch die üblichen Netzdienste, wie WWW, FTP ... angeboten werden.
Die weiteren Ausführungen stellen den MPI-Betrieb unter Linux dar. Der Betrieb von Windows-Instanzen ist auch möglich, wegen des Zugriffs per RemoteDesktop aber umständlich und der MPI-Betrieb nur "unter Schmerzen" möglich.
Der Betrieb der Cloud ist vom ersten Moment an kostenpflichtig!
Da nun verschiedene Aktivitäten auf verschiedenen Rechnern unter verschiedenen Nutzer-Identitäten stattfinden, soll Folgendes vereinbart werden:
Aktivitäten des Nutzer auf dem RemoteHost werden grau unterlegt dargestellt. |
Aktivitäten des Root-Nutzers auf jeder der Instanzen werden gelb unterlegt dargestellt. |
Aktivitäten des mpiusers auf jeder der Instanzen werden blau unterlegt dargestellt. |
Aktivitäten des mpiusers genau einer Instanz werden grün unterlegt dargestellt. |
Am Anfang sind eine Reihe von Vorkehrungen zu treffen, die je nach Anzahl der Instanzen sehr lange dauern können. Leider werden diese Vorkehrungen wieder zerstört, wenn man die Instanz stoppt. Man kann die konfigurierte Instanz (kostenpflichtig) speichern. Als Alternative bietet sich das Schreiben von Shell-Skripten an, die die Instanz immer wieder automatisch konfigurieren.
Das Starten der Instanzen erfolgt über die EC2-Konsole:
https://console.aws.amazon.com/ec2/home (Zugriff nur nach Einrichten eines Accounts möglich)
Vergessen Sie nicht, die Region auf EU-West
stellen.
Sie müssen zunächst so genannte Security-Groups anlegen. Es gibt zwar eine Standard-Gruppe. Deren Benutzung ist aber nicht empfehlenswert, da sie sehr restriktiv ist. Zu Testzwecken kann man eine Security-Gruppe erzeugen, deren TCP-Ports alle geöffnet sind. Spätere Einschränkungen sind natürlich möglich.
Das Kontaktieren der Instanzen erfolgt per SSH. Allerdings nicht per Nutzerkennzeichen/Passwort, sondern
per RSA-Authentifizierung. Dazu muss eine Schlüsselpaar erzeugt werden. Die Konsole
bietet das in einem Menüpunkt an. Speichern Sie das dabei gesendete *.pem
- File
auf dem remote Host ab. Es enthält den privaten Schlüssel. Der öffentliche Schlüssel
wird jeder Instanz beim Starten mitgeteilt. Um zum Beispiel eine Debian-Lenny-Instanz
zu starten, wechseln Sie zu:
Instances --> Launch Instances--> Community AMIs --> AllPlatforms --> Debian -->debian-5.0-lenny-base
Die Instanzen werden angezeigt. Wählen Sie die neueste Debian-Lenny-Instanz aus. (Im Prinzip können Sie auch ein beliebiges anderes Linux, z.B. Fedora starten. Es hat sich jedoch gezeigt, dass Sie in diesem Fall viele Pakete ("make" oder "gcc") nachinstallieren müssen.)
Nun können Sie die Instanz kontaktieren:
|
Zur Kommunikation zwischen den Instanzen, wird ebenfalls ein Schlüsselpaar erzeugt:
|
Um nicht als root-Nutzer (Administrator) arbeiten zu müssen, wird ein Nutzer (ohne Passwort), zum Beispiel mpiuser
auf allen Instanzen erzeugt:
|
Das soeben erzeugte Schlüsselpaar wird auf jede der Instanzen kopiert:
|
Das Schlüsselpaar wird in das HOME-Verzeichnis des mpiuser
s kopiert:
|
Der letzte Befehl ist wichtig, da die SSH die Rechte der privaten Schlüsselfiles prüft
und allzu offen im Filesystem abgelegte Schlüssel ablehnt. Nun muss die SSH für die
RSA-Methode konfiguriert werden, indem in /etc/ssh/sshd.config
folgende Zeile
aktiviert wird:
|
Nun muss die SSH neu gestartet werden:
|
Da die SSH den public key unter $HOME/.ssh/authorized_keys
erwartet, muss ein entsprechender
symbolischer Link erzeugt werden.
|
Damit der mpiuser
mit diesen Dateien arbeiten kann, muss er der
Eigentümer der Dateien sein:
|
Um MPI nutzen zu können, muss die SSH zwischen den Instanzen so eingestellt sein, dass sie keine Rückfragen, stellt.
Das trifft sowohl auf die Passwortabfrage, sowie auf die Frage zu, ob der Schlüssel des
Kommunikationspartners in die known_hosts
-Datei aufgenommen werden soll.
Um die Passwortabfrage zu verhindern, müssen der öffentliche und private Schlüssel unter
dem Namen .ssh/id_rsa
und .ssh/id_rsa.pub
abgelegt werden:
|
Nun sollte man prüfen, ob man sich ohne Passwortabfrage zu jeder Instanz verbinden kann:
|
Das MPI kann man entweder von http://www.mcs.anl.gov/research/projects/mpich2/index.php laden (Tests mit anderen MPI-Implementierungen schlugen aus unbekannten Gründen fehl) und wie in der INSTALL - Datei beschrieben übersetzen. Debian-lenny-5-Nutzer können aber auch die vorübersetzte Datei mpich2.tgz auf die Instanzen transportieren und dort entpacken:
|
|
Der Nachteil dieser Variante ist, dass die Übersetzung unter einer anderen Umgebung stattgefunden hat, weswegen
man bei der Übersetzung der MPI-Programme die Optionen -I
und -L
angeben muss.
Jetzt kann der mpiuser
das Archiv entpacken:
|
... und ein so genanntes secretword
vorgeben, welches aber aus Gründen der Bequemlichkeit leer bleibt:
|
Wieder müssen die Rechte eingeschränkt werden. Um festzulegen, welche Instanzen am MPI beteiligt
sind, müssen deren interne(!) Namen (jede auf eine Zeile) in die Datei $HOME/mpdhosts
eingetragen werden. Außerdem sollte der Pfad erweitert werde, damit die MPI-Administrations-Befehle
verfügbar sind:
|
Jetzt kann MPI gestartet werden;
|
Zum Testen kann man das Programm mpdtrace
starten. Es listet die am MPI beteiligten
Instanzen auf.
Als Testprogramm kann zum Beispiel kette.c dienen (ist in mpich2.tgz bereits enthalten):
Das Programm schickt eine Zahl (hier: 2) zum jeweiligen nächsten Nachbarn welcher den Zahlenwert ausgibt und seinerseits an den nächsten Nachbarn weiter schickt. Nach einer Runde vermindert die Ausgangsstation den Zahlenwert um 1. Fällt der Wert auf 0, so ist das Programm beendet.
Da die Ausgaben unabhängig von der ausgebenden Instanz stets auf der Konsole erfolgen, über welche die
Anwendung gestartet wurde, schreibt jede Instanz ihre Ausgabe zusätzlich noch in eine Datei
/tmp/x.log
. Dadurch kann nach dem Programmlauf nachgewiesen werden, dass tatsächlich
jede Instanz an der Berechnung beteiligt war.
Um das Programm zu übersetzen, muss man folgenden Befehl geben:
|
Wie bereits erwähnt, können die Optionen -I
und -L
entfallen, wenn man das
MPI tatsächlich aus dem Quelltext übersetzt hat. Das Starten erfolgt durch:
|
Um im Notfall MPI wieder beenden zu können (Gegenbefehl zu mpdboot
) kann man folgenden
Befehl geben:
|