微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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 举报,一经查实,本站将立刻删除。