使R代码(dada2包)在HPC计算机上多线程运行(通过slurm提交)

问题描述 投票:0回答:1

我的 R 代码无法在 HPC 集群上并行运行,我不明白为什么。根据dada2文档,如果为

multithreaded = #
标志指定了一个整数,它将传递给
setThreadOptions()
并且将使用这个数量的核心,但
sujeff [username]
告诉我它仍然只使用1个核心。

CPU_Efficiency    Number_of_CPUs_In_Use
16.30%    (0.98 of 6)

Number_of_CPUs_In_Use 有时会增加到 1.05,但永远不会更高。

根据文档加载dada2库应该足以让它工作(它也会自动加载Rcpp包),但正如我所看到的,

setThreadOptions()
是RcppParallel的一部分,我尝试另外加载这个包,这然而没有帮助。

这是提交 R 脚本的 bash slurm 脚本

#! /bin/bash -l
#SBATCH [email protected]
#SBATCH --partition=x
#SBATCH --nodes=1
#SBATCH --ntasks=6
#SBATCH --mem=20GB
#SBATCH --time=00-12:00:00
#SBATCH --qos=standard

module add R-bundle-Bioconductor/3.16-foss-2022b-R-4.2.2
LC_ALL=en_US.UTF-8 R --no-save

mpirun -n 1 Rscript script.R ${SLURM_NTASKS} 

这是脚本。R

setwd("/wd")
library("dada2")
library("RcppParallel")
load("data.RData")

ddF <- dada(derepF, err = errF, multithread = 6)
ddR <- dada(derepR, err = errR, multithread = 6)

一切都运行良好并提供了预期的结果,只是它不是并行运行的。有人可以帮我找出原因吗?

到目前为止我尝试过:在 bash 脚本中指定 ${SLURM_CPUS_PER_TASK} 而不是 ${SLURM_NTASKS},在加载库(“RcppParallel”)和不加载库(“RcppParallel”)的情况下运行它并设置

multithread = TRUE

r multithreading parallel-processing slurm hpc
1个回答
0
投票

您的 SLURM bash 脚本中的作业参数应包括

--cpus-per-task
--mem-per-cpu
选项,如下所示:

#! /bin/bash -l
#SBATCH --job-name=DADA
#SBATCH --time=00-12:00:00
#SBATCH --ntasks=1
#SBATCH --qos=standard
#SBATCH --cpus-per-task=6
#SBATCH --mem-per-cpu=20GB
#SBATCH --partition=x
#SBATCH --nodes=1
#SBATCH --output=out/DADA_%A.out
#SBATCH --error=err/DADA_%A.err
#SBATCH [email protected]
#SBATCH --mail-type=END,FAIL

cpus-per-task=
应与
multithread=
中的
dada()
设置一致。

您可能必须创建

out
err
目录。

© www.soinside.com 2019 - 2024. All rights reserved.