如何解决在SLURM集群中使用R进行并行计算
我需要在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 举报,一经查实,本站将立刻删除。