8

次の (簡略化された) スクリプトは、UNIX クラスター (4 つの仮想コア) のマスター ノードで正常に動作します。

library(foreach)
library(doParallel)

nc = detectCores()
cl = makeCluster(nc)
registerDoParallel(cl)

foreach(i = 1:nrow(data_frame_1), .packages = c("package_1","package_2"), .export = c("variable_1","variable_2"))  %dopar% {     

    row_temp = data_frame_1[i,]
    function(argument_1 = row_temp, argument_2 = variable_1, argument_3 = variable_2)

}

stopCluster(cl)

16 * 4クラスター内の 16 個のノード (合計で仮想コア)を活用したいと考えています。

で指定された並列バックエンドを変更するだけでよいと思いますmakeCluster。しかし、どうすればいいですか?ドキュメントはあまり明確ではありません。

このかなり古い (2013) 投稿http://www.r-bloggers.com/the-wonders-of-foreach/に基づいて、デフォルトのタイプを変更する必要があるようです (sockまたはMPI- どちらが unix で動作しますか? )

編集

foreach の作成者によるこのビネットから:

デフォルトでは、doParallel は Unix ライクなシステムではマルチコア機能を使用し、Windows では Snow 機能を使用します。マルチコア機能は、コンピューターのクラスターではなく、単一のコンピューターでのみタスクを実行することに注意してください。ただし、スノー機能を使用して、Unix のようなオペレーティング システム、Windows、またはその組み合わせを使用して、クラスターで実行することができます。

とはyou can use the snow functionalityどういう意味ですか? どうすればいいですか?

4

2 に答える 2

1

これは、あなたを正しい方向に導くかもしれない部分的な答えです

このかなり古い (2013) 投稿 http://www.r-bloggers.com/the-wonders-of-foreach/に基づいて、デフォルトのタイプを変更する必要があるようです (fork を MPI に変更しますが、なぜですか? unix で動作するでしょうか? ?)

forkPOSIX システムでバックグラウンド プロセスを生成する方法です。nコアを備えた単一のノードでは、nプロセスを並行して生成して作業を行うことができます。複数のマシンはメモリを共有しないため、これは複数のマシンでは機能しません。それらの間でデータを取得する方法が必要です。

MPIは、ノードのクラスター間で通信するための移植可能な方法です。MPI クラスターはノード間で機能します。

雪の機能を使用できます とはどういう意味ですか? どうすればいいですか?

snow別パッケージです。MPI雪で16 ノードのクラスターを作成するには、Steve Weston の回答と同様の質問へcl <- makeCluster(16, type = "MPI")の回答で説明されているように、適切な環境で R を実行する必要があります。(実行したら、各ノードで 4 つのコアを使用するようにループを変更する必要がある場合もあります。)

于 2016-04-22T21:29:56.037 に答える