私はsnow
とR
というクラスタコンピュータでモンテカルロシミュレーションを実行していました。すべてR
がの凍結し、最終的に壁の時間を超えたstopCluster
のラインを打つまでうまくいった。私はstopCluster
の問題は表示されません。`R snow 'フリーズの` stopCluster`
以下は、私のR
スクリプトの簡略化されたバージョンです。
simu <- function(rep_worker, n_used) {
theta_simu <- c()
for (i in 1 : rep_worker) {
theta_simu[i] <- mean(rnorm(n_used))
}
theta_simu
}
library(Rmpi)
library(snow)
np <- mpi.universe.size() - 1
cl <- makeCluster(np, type = "MPI")
## go go go
n_used <- 1e4
rep_worker_list <- rep(1, np) # each worker do one `simu`
theta_cluster <- clusterApply(cl, rep_worker_list, simu, n_used)
theta_cluster
stopCluster(cl)
mpi.exit()
上記のスクリプトは、ディレクトリmonte-carlo/R
下test_stack.R
として保存されました。サーバーに送信したpbs
スクリプトは次のとおりです。
#!/bin/bash
#PBS -N test
#PBS -l walltime=00:30:00
#PBS -l nodes=3:ppn=8
#PBS -l pvmem=8gb
module load R/3.3.1
module load openmpi/gcc/2.0.0
cd monte-carlo/R
# For snow jobs, use 'mpiexec -n 1'
mpiexec -n 1 R CMD BATCH test_stack.R
Rout
の一部を以下に示します。それはstopCluster()
に止まります。
> simu <- function(rep_worker, n_used) {
+ theta_simu <- c()
+ for (i in 1 : rep_worker) {
+ theta_simu[i] <- mean(rnorm(n_used))
+ }
+ theta_simu
+ }
> library(Rmpi)
> library(snow)
> np <- mpi.universe.size() - 1
> cl <- makeCluster(np, type = "MPI")
23 slaves are spawned successfully. 0 failed.
> ## go go go
> n_used <- 1e4
> rep_worker_list <- rep(1, np) # each worker do one `simu`
> theta_cluster <- clusterApply(cl, rep_worker_list, simu, n_used)
> theta_cluster
[[1]]
[1] 5.54539e-05
[[2]]
[1] 0.0009270881
... (I deleted the rest to save space)
> stopCluster(cl)
gcc/2.0.0が意味する正しいコンパイラを使用していることをご存知ですか?また、Rhpcパッケージをチェックすることをお勧めします。それは、大規模なMPIユニバースでの通信が著しく高速です。 –
@OttToomet私はコンパイラが正しいと思います。私たちのHPCの男は私にそう言った。私はRhpcを見ていきます。ちなみに、コンパイラが誤って指定されていると、奴隷/労働者が最初に産卵されることはありませんでした。 – semibruin
誰が知っていますか?私はそれが実質的にオフであると思う、それはすぐに不平を言う。しかし、いくつかのマイナーバージョンの違いの場合...私は確信していません。 –