我在集群计算机中运行蒙特卡罗模拟snow
和R
. 一切顺利,直到R
达到stopCluster
,R
冻结并最终超过了墙时间。我没有看到 的问题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()
上面的脚本保存test_stack.R
在目录下monte-carlo/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)