【发布时间】:2019-07-26 14:50:48
【问题描述】:
我试图使用 future.batchtools 包在 SLURM HPC 上并行化 R 文件。虽然脚本在多个节点上执行,但它只使用 1 个 CPU 而不是可用的 12 个。
到目前为止,我尝试了不同的配置(附上 c.f. 代码),但都没有达到预期的结果。我的 bash 文件配置如下:
#!/bin/bash
#SBATCH --nodes=2
#SBATCH --cpus-per-task=12
R CMD BATCH test.R output
在 R 中,我使用了一个 foreach 循环:
# First level = cluster
# Second level = multiprocess
# https://cran.r-project.org/web/packages/future.batchtools/vignettes/future.batchtools.html
plan(list(batchtools_slurm, multiprocess))
# Parallel for loop
result <- foreach(i in 100) %dopar% {
Sys.sleep(100)
return(i)
}
如果有人能指导我如何为多节点和多核配置代码,我将不胜感激。
【问题讨论】:
-
您的 R 脚本使用单层 foreach 并行化,它将使用
batchtools_slurm进行并行化。如果您使用两层 foreach 并行化,则第二层将使用多进程(鉴于plan())。仅供参考,foreach(i in 100)只会迭代一个值。 -
感谢您的回复!我实际上在这个计划中使用了一个嵌套的forachach(为了一个简洁的例子,我没有在这里粘贴它。
R result <- foreach(i= 1:100) %dopar% { foreach(jRun = 1:100) %dopar% { # calulation }}这个代码更接近我正在使用的那个。不过,我没有在 HPC 上利用多个结. 还有什么我忽略的吗? -
啊...您需要在设置计划时指定每个任务的核心数 - 类似于
plan(list(tweak(batchtools_slurm, resources = list("ntasks-per-node"=4)), multiprocess)),参见。 github.com/HenrikBengtsson/future.batchtools。要验证这是否有效:使用该新计划,请致电f <- future( availableCores() ); ncores <- value(f)。这将显示第二层将有多少核心可用。你应该得到四 (4) 个。 -
感谢您的帮助。对于面临同样挑战的其他人:有必要使用 srun 启动 .R 文件以允许并行进程。
-
Michael,你最后找到合适的设置了吗?如果是这样,如何在此处发布您找到的解决方案?
标签: r parallel-processing future hpc slurm