2

R 関数を並列化するクラスターを構築しようとしています。私は Ubuntu と R パッケージ (Rmpi と Snow) で Open MPI を使用しています。私が実行しているテストコードは次のとおりです。

cl <- makeMPIcluster(8)
fun <- function(){
    Sys.info()[c("nodename")]
}
clusterCall(cl,fun)
stopCluster(cl)
mpi.quit()

コマンドは次のとおりです。

mpirun -H localhost,node2 -n 1 R --slave -f testSnowMPI.R

問題は、すべての戻り値がローカル ホスト名であることです。localhost と node2 のプロセスも観察しましたが、プロセスが開始されたように見えますが (localhost で 4 つ、node2 で 4 つ)、すぐに node2 のスレーブ プロセスが停止し、すべてが localhost で実行されます。

ノードごとに異なるスクリプト (testSnowMPI.R) を使用して別のテストを行い、パラメーター-n 1 を -n 2に変更すると、期待どおりに異なる結果が返されましたが、両方のスクリプトがローカルホストによって実行されました。

もう 1 つの興味深いテストは、localhost でmpirunコマンドを作成したときに、実行用に node2 ホストを設定しただけです ( -H node2 )。私が持っている答えは、このジョブに割り当てられているすべてのノードが既にいっぱいです。

node2 から localhost に、localhost から node2 に ping を実行できます。そして、パスフレーズなしで ssh 接続を既に設定しています。

node2 のプロセスは正常に開始されるように見えますが、リターンをマスターに書き込むことができず、localhost がすべての作業を行います。

node2 をローカルホストとして使用して同じテストを実行しましたが、動作はまったく同じでした。

これらのテストの奇妙な動作について何か考えはありますか?

編集

Rmpi 関数のみ (Snow 関数なし) を使用していくつかのテストを行いました。私はこのスクリプトを書きました:

mpi.spawn.Rslaves()
mpi.close.Rslaves()

コマンドは次のとおりです。

mpirun -H localhost,node2,node2 -n 1 R --slave -f testSnowMPI.R

そして、私はこの出力を得ました:

master (rank 0, comm 1) of size 3 is running on: node1
slave1 (rank 1, comm 1) of size 3 is running on: node1
slave2 (rank 2, comm 1) of size 3 is running on: node1

(node1 はローカルホストです)

4

0 に答える 0