私は別のデータセットのモデルを推定するために、Linuxクラスタで異なるRスクリプトを一度にバッチモードで実行しています。スクリプトは、使用しているデータセットを除いてまったく同じです。私はそれをすると次のメッセージを受け取ります。並列処理でエラーが発生しました:ポートを開くことができません
Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, :
cannot open the connection
Calls: makePSOCKcluster -> newPSOCKnode -> socketConnection
In addition: Warning message:
In socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, :
port 11426 cannot be opened
これは再現可能な例です。二つのファイル、tmp1.Rとtmp2.Rを作成し、コンテンツをtmp.sh:tmp.shファイルの
library(dclone)
l <- list(1:100,1:100,1:100,1:100)
cl <- makePSOCKcluster(4)
parLapply(cl, X=l, fun=function(x) {Sys.sleep(2); sum(x); })
stopCluster(cl)
内容:ファイルtmp1.Rとtmp2.Rの
コンテンツ:
#!/bin/sh
R CMD BATCH tmp1.R &
R CMD BATCH tmp2.R &
リストの最初のファイルが実行されます。 2番目は上記のエラーを表示します。誰かがそれを解決する方法を知っていて、手動介入なしですべてのスクリプトを一度に自動的に実行しますか?
PS:他のすべての同様の質問を読みましたが、上記の質問に対する再現可能な例や答えはありません。
なぜ2つのクラスタを同時に起動しますか? –
答えが正確ではありません...しかし、なぜローカルホスト上でコードを実行している場合、SOCKクラスタを使用していますか? linux/macでは、fork-clusters(または単にmclapply)を使うことができます。 –
@HongOoiの場合、これは単なるおもちゃの例です。理由はより複雑で、実際のアプリケーションと関係があります。まったく同じこと(つまり、多くのスクリプトを自動的に実行し、それぞれの並列化を使用する)の代替手段は何ですか? – Diogo