r - 如何配置批处理脚本以使用 future.batchtools (SLURM) 并行化 R 脚本
问题描述
我试图使用 future.batchtools 包在 SLURM HPC 上并行化 R 文件。虽然脚本在多个节点上执行,但它只使用 1 个 CPU 而不是可用的 12 个。
到目前为止,我尝试了不同的配置(附上cf代码),但都没有达到预期的结果。我的 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)
}
如果有人可以指导我如何为多个节点和多个核心配置代码,我将不胜感激。
解决方案
有多种方法可以使用 Slurm 并行化 R 作业。需要注意的几点:
您可以使用具有多个内核的单个节点,在这种情况下,这
mclapply
是一个不错的替代方案,因为原则上与parLapply
.您可以将JOB 数组与 Slurm 一起使用,这意味着您可以编写一个 R 脚本,Slurm 将在指定选项时多次运行该脚本
--array=1-[# of replicates]
。您可以使用SLURM_ARRAY_TASK_ID
环境变量指定在每个作业中执行的操作(您可以使用 R 在 R 中捕获它Sys.getenv("SLURM_ARRAY_TASK_ID")
)。并在此基础上使用条件if/else
语句。@george-ostrouchov 提到,您可以使用 MPI,您需要为其安装Rmpi 包,但这有时可能会有点痛苦。
您可以尝试的另一件事是使用并行包创建 SOCKET 集群对象。这将是一个多节点集群,它允许您
parLapply
跨多个节点使用和其他计算。
我确实有一个教程,其中我解释了这些选项以及如何使用slurmR
包(我正在研究,很快在 CRAN 上)或rslurm
(已经在 CRAN 上)。您可以在此处查看教程。
推荐阅读
- python - 2列上的Array_agg,输出未被识别为列表
- json - JSON SWIFT,如何访问值
- c# - 在以不同方法创建的对象上使用
- python - 无法使用搜索关键字解析网页中的某些信息
- node.js - Mongoose 警告:DeprecationWarning:当前的服务器发现和监控引擎已弃用?
- java - 使用 Maven 程序集插件作为 project.basedir 或 project.build.directory 创建 zip 原型更好吗?
- django - 在 Django 中为 Meta Tag 使用 model.save 数据
- java - 如何在 ubuntu 16.04 的 hadoop 中设置 JAVA_HOME 变量
- css - @include 出口处的 CSS 编译错误('class-name')
- java - 使用来自数组的连接整数创建字符串时出现问题