5

大規模で強力なクラスターにアクセスできます。私は中途半端なRプログラマーですが、シェルコマンド(およびubuntuを使用するために必要な基本的なこと以外の一般的な端末コマンド)はまったく初めてです。

このクラスターを使用して、R で一連の並列プロセスを実行し、それらを結合したいと考えています。具体的には、次のような問題があります。

my.function <-function(data,otherdata,N){
    mod = lm(y~x, data=data)
    a = predict(mod,newdata = otherdata,se.fit=TRUE)
    b = rnorm(N,a$fit,a$se.fit)
    b
    }

r1 = my.function
r2 = my.function
r3 = my.function
r4 = my.function
...
r1000 = my.function

results = list(r1,r2,r3,r4, ... r1000)

上記は単なる例ですが、基本的には何かを 1000 回並行して実行し、1000 プロセスのすべての結果で何かを実行したいと考えています。

コードの最後の行のように、1000 個のジョブを同時にクラスターに送信し、すべての結果を結合するにはどうすればよいですか?

私が RTFM を使用するための適切に作成されたマニュアル/リファレンスの推奨事項も歓迎します。残念ながら、私が見つけたドキュメントは特に理解できるものではありません。

前もって感謝します!

4

3 に答える 3

5

次のように、パッケージ (パッケージに対する並列バックエンド)plyrと組み合わせることができます。doMCforeach

require(plyr)
require(doMC)
registerDoMC(20) # for 20 processors

llply(1:1000, function(idx) {
    out <- my.function(.)
}, .parallel = TRUE)

編集:同時ジョブの送信について話している場合、 LSF ライセンスを持っていませんか? その後、必要な数のジョブを送信するために使用できbsub、負荷分散なども処理します...!

編集 2:負荷分散に関する小さなメモ (LSF を使用した例bsub):

あなたが言及しているのは、私がここに書いたものに似たものです => LSFjobs一括で提出できます。例: inを使用すると、次のようにジョブをクラスターに送信 LSFできます。bsub

bsub -m <nodes> -q <queue> -n <processors> -o <output.log> 
     -e <error.log> Rscript myscript.R

これにより、キューに入れられ、ジョブの実行が開始されるプロセッサーの数 (利用可能な場合) が割り当てられます (リソースによって異なります)。あなたはできるpause、あなたの仕事..そしてもっとたくさん..はrestart、この概念に似たものです。学習曲線は少し険しいかもしれませんが、それだけの価値があります。suspendqsub

于 2013-01-27T23:05:06.460 に答える
5

Journal of Statistical Software (オープン ジャーナル) にR を使用した並列コンピューティングの最新技術に関する調査論文を書きました。これは導入として役立つ場合があります。

于 2013-01-27T23:19:35.197 に答える
2

Message Passing Interfaceは、やりたいことを実行でき、非常に簡単に実行できます。コンパイル後、次を実行する必要があります。

mpirun -np [no.of.process] [executable]

次のようなホスト IP フィールドを含む単純なテキスト ファイルを使用して、実行する場所を選択します。

node01   192.168.0.1
node02   192.168.0.2
node03   192.168.0.3

ここに MPI の他の例があります。

于 2013-01-27T23:11:32.323 に答える