在SLURM集群中使用R进行并行计算

问题描述

我需要在SLURM集群(系统为CentOS)上使用MCMC方法进行模型估计。估算需要很长时间才能完成。

在每次MCMC交互中,只有一个步骤耗时特别长。由于此步骤正在执行一个lapply循环(大约100000个循环,需要30秒才能完成所有循环),据我所知,我应该能够使用并行计算来加快速度。

我尝试了几个软件包(doMCdoParalleldoSNow)和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)。

使用doParalleldoSNow,此步骤的时间甚至增加到大约120秒,这听起来很荒谬。不可思议的是,当我在Mac和Windows计算机上测试代码时,doParalleldoSNow的速度实际上与doMC相似。

我被卡住了,不确定如何继续。任何建议将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)