2013-07-27 9 views
5

Ich habe versucht, Rmpi und snowfall auf den Clustern meiner Universität zu laufen, aber aus irgendeinem Grund, egal wie viele Rechenknoten ich zugeteilt bekomme, meine snowfall Initialisierung läuft nur auf einem Knoten.Initialisierung von MPI-Cluster mit Schneefall R

Hier ist, wie ich es bin Initialisierung:

sfInit(parallel=TRUE, cpus=10, type="MPI") 

Irgendwelche Ideen? Ich werde bei Bedarf Klarheit schaffen.

+0

Alle Fehlermeldungen? – sgibb

+0

Welche Art von MPI wird von Ihrem Cluster ausgeführt? –

+0

openMPI, keine Fehlermeldung, soweit ich weiß (Dinge laufen reibungslos, aber der Sysadmin sagt mir, es läuft alles auf einem Cluster, obwohl ich 5 zugewiesen habe). Auch habe ich gerade realisiert, dass ich einen Knoten und keinen Cluster meinte. – user1480248

Antwort

6

Um ein Rmpi-basiertes Programm auf einem Cluster auszuführen, müssen Sie mehrere Knoten mit Ihrem Batch-Queuing-System anfordern und dann Ihr R-Skript über ein Dienstprogramm wie mpirun/mpiexec aus dem Auftragsskript ausführen. Idealerweise wurde das Dienstprogramm mpirun so erstellt, dass es automatisch erkennt, welche Knoten vom Batch-Queuing-System zugewiesen wurden. Andernfalls müssen Sie ein mpirun-Argument wie --hostfile verwenden, um zu bestimmen, welche Knoten verwendet werden sollen.

In Ihrem Fall klingt es so, als ob Sie mehrere Knoten angefordert haben. Das Problem liegt wahrscheinlich in der Art und Weise, wie das R-Skript ausgeführt wird. Einige Leute wissen nicht, dass sie mpirun/mpiexec verwenden müssen, und das Ergebnis ist, dass Ihr Skript auf einem einzigen Knoten läuft. Wenn Sie mpirun verwenden, wurde Ihre Installation von Open MPI möglicherweise nicht mit Unterstützung für Ihr Batch-Queuing-System erstellt. In diesem Fall müssten Sie aus den Informationen Ihres Batch-Queuing-Systems eine geeignete Host-Datei erstellen, die normalerweise über eine Umgebungsvariable und/oder eine Datei bereitgestellt wird.

Hier ist ein typischer mpirun Befehl, dass ich meinen parallel R-Skripte aus der Job-Skript ausführen verwenden:

mpirun -np 1 R --slave -f par.R 

Da wir öffnen MPI mit Unterstützung für Torque bauen, ich weiß nicht verwenden, um die --hostfile Option: mpirun ermittelt automatisch, welche Knoten von der Umgebungsvariablen PBS_NODEFILE automatisch verwendet werden. Die Verwendung von -np 1 mag seltsam erscheinen, wird aber benötigt, wenn Ihr Programm Arbeiter hervorbringt, was normalerweise bei Verwendung des snow Pakets geschieht. Ich habe nie snowfall verwendet, aber nach dem Blick auf den Quellcode, scheint es mir, dass sfInit ruft immer makeMPIcluster mit einem "count" -Argument, das snow zu spawn Arbeiter verursachen, so denke ich, dass -np 1 für MPI-Cluster mit snowfall erforderlich ist . Andernfalls startet mpirun Ihr R-Skript auf mehreren Knoten, und jeder spawnt 10 Worker auf seinem eigenen Knoten, was nicht Ihren Vorstellungen entspricht. Der Trick besteht darin, das sfInit "cpus" -Argument auf einen Wert zu setzen, der mit der Anzahl der Knoten übereinstimmt, die Ihrem Job vom Batch-Queuing-System zugewiesen wurden. Sie können die Rmpimpi.universe.size Funktion dafür nützlich finden.

Wenn Sie denken, dass all dies korrekt durchgeführt wird, liegt das Problem möglicherweise an der Art und Weise, wie das MPI-Clusterobjekt in Ihrem R-Skript erstellt wird, aber ich vermute, dass es mit der Verwendung (oder dem Fehlen von Verwendung) von mpirun.

+0

Danke, ich denke das Problem ist höchstwahrscheinlich, dass ich mpirun nicht benutzt habe (war mir dessen nicht bewusst). Die Dokumentation zur Verwendung von mpirun lautet also wie folgt aus den Anweisungen für den Cluster: # Rufen Sie mpirun auf. # Hinweis: $ NSLOTS wird von OGS auf N gesetzt, die Anzahl der Prozessoren # wird von der Option "-pe mpi_M_tasks_per_node N" angefordert. # Wenn M = 4, sind mögliche N: 4, 8, 12, 16,. . . # (siehe Tabelle 2 auf der Seite Runningjobs) mpirun -np $ NSLOTS mpi_program arg1 arg2 .. Wenn ich Schneefall haben will, mache ich die ganze Arbeit für mich, ich sollte nur -np 1 tun? – user1480248

+1

@ user1480248 Wie in meiner aktualisierten Antwort erwähnt, denke ich, dass Sie "-np 1" mit Schneefall verwenden müssen. Rmpi-basierte Pakete sind bei der Verwendung von MPI-Laichen eher ungewöhnlich, daher ist der übliche Hinweis, wie '-np' eingestellt wird, falsch. –

+0

Wenn also 16 Rechenknoten zugewiesen werden und ich alle 16 Kerne auf jedem dieser Knoten nutzen möchte (auf die das System Zugriff hat), lasse ich cpus <- mpi.universe.size() laufen auf all diesen Rechenknoten und nutzen sie auch voll aus? – user1480248

Verwandte Themen