首页 > 解决方案 > R future_lapply 与 SLURM 仅按顺序运行

问题描述

我正在使用这个 SLURM 脚本来初始化作业:

#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=11
#SBATCH --time=08:00:00

和一个沿着这些线的Rscript:

library

data

model_function <- lots of code

plan(multisession, workers=11)

sim_function <- function(sim_run) {
  
  future_lapply(future.seed = TRUE, vals, function(vv){

res <- model_function()

names(res) <- c(...long list of names...)

    dat <- reshape2::melt(res) %>% filter(L1 != "time") %>% mutate(
      time = Var1,
      Var1 = L1,
      L1 = NULL) %>%
      mutate(age_group = cut(Var2, custom_age_groups)) %>%
      group_by(Var1, age_group, time) %>%
      summarise(value = sum(value)) %>%
      mutate(year = ceiling(time / 365),
             vv=vv)

    filename <- paste0(...,vv,".RDS")
    filename_Rt <- paste0(...,vv,".RDS")
    
    saveRDS(dat,filename)
    saveRDS(just_Rt,filename_Rt)

})

filename <- paste0(...,"_sim_run_",sim_run,".RDS")

consolidate_files(filename)

}

lapply(1:20, function(sim_run) sim_function(sim_run))

我似乎无法让这件事并行运行。

我尝试了很多不同的计划:

plan(list(tweak(cluster, workers=1),tweak(multisession, workers=11)))
plan(list(tweak(sequential),tweak(multisession)))
plan(list(tweak(sequential),tweak(multicore)))

我尝试使用 future_lapply 代替:

future_lapply(1:20, function(sim_run) sim_function(sim_run))

尽管启动了并行会话,所有这些似乎仍然按顺序运行,是否有一些我没有看到的拓扑?

该代码在我的 Windows 桌面上运行良好,所以也许我没有正确使用 SLURM?

标签: rparallel-processinglapplyfutureslurm

解决方案


推荐阅读