问题描述
我需要在SLURM集群(系统为CentOS
)上使用MCMC方法进行模型估计。估算需要很长时间才能完成。
在每次MCMC交互中,只有一个步骤耗时特别长。由于此步骤正在执行一个lapply循环(大约100000个循环,需要30秒才能完成所有循环),据我所知,我应该能够使用并行计算来加快速度。
我尝试了几个软件包(doMC
,doParallel
,doSNow
)和foreach
框架。设置是
parallel_cores=8
#doParallel
library(doParallel)
cl<-makeCluster(parallel_cores)
registerDoParallel(cl)
#doMC
library(doMC)
registerDoMC(parallel_cores)
#doSNow,this is also fast
library(doSNow)
ml<-makeCluster( parallel_cores)
registerDoSNow(cl)
#foreach framework
#data is a list
data2=foreach(
data_i=
data,.packages=c("somePackage")
) %dopar% {
data_i=some_operation(data_i)
list(beta=data_i$beta,sigma=data_i$sigma)
}
使用doMC
,此步骤的时间可以减少到大约9s。但是,由于doMC
使用共享内存,并且我有一个很大的数组来存储估计结果,所以我很快用完了内存(即slurmstepd: error: Exceeded job memory limit
)。
使用doParallel
和doSNow
,此步骤的时间甚至增加到大约120秒,这听起来很荒谬。不可思议的是,当我在Mac和Windows计算机上测试代码时,doParallel
和doSNow
的速度实际上与doMC
相似。
我被卡住了,不确定如何继续。任何建议将不胜感激!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)