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 Rmpi
mpi.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.
Alle Fehlermeldungen? – sgibb
Welche Art von MPI wird von Ihrem Cluster ausgeführt? –
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