我的 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
。
您的 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
目录。