如何使用Slurm在多个节点上发送循环?

时间:2019-05-20 19:54:56

标签: r loops nodes slurm

我有一个R脚本,希望在多个节点上执行。我展示了我的流氓代码的循环:

编辑

#!/bin/bash
#SBATCH -o job-%A_task.out
#SBATCH --job-name=paral_cor
#SBATCH --partition=normal
#SBATCH --time=1-00:00:00
#SBATCH --mem=124G                #I want to use 124Go / node
#SBATCH --cpus-per-task=32        #and 32CPUs / node 
#SBATCH --exclude=hpcsmp01


module load gcc/8.1.0 openblas/0.3.3 R

OUTPUT="$HOME"/PROJET_M2/data/$(date +"%Y%m%d")_parallel_nodes_test
mkdir -p "$OUTPUT"

export FILENAME=~/PROJET_M2/bin/RHO_COR.R

echo "Start job :"`date`

for i in $(seq 100)
do
   srun Rscript my_scrit.R --subset $i  
done

echo "Stop job :"`date`

我基本上执行此操作

sbatch my_script.sh 

这是我的R代码中出现--subset $i的循环:

res <- foreach(i = opt$subset) %dopar% {      #without argument, that gives
 G1 <- split[[combs[i,1]]]                    i=seq_len(nrow(combs))
 G2 <- split[[combs[i,2]]]                    combs is a vector with several
 dat.i <- cbind(data[,G1], data[,G2])         rows, according to my input 
 rho.i <- cor_rho(dat.i)                      file
}

我想在几个节点上执行i的不同值。此代码仅在一个节点上执行。您在多个节点上运行此代码是否有问题?

谢谢

1 个答案:

答案 0 :(得分:0)

在当前状态下,您正在向SLURM请求单个节点,单个任务以及该任务的32个核心。如果要使用多个节点,则应告知SLURM:

#SBATCH --nodes=10

稍后,在实际的脚本启动中,您应该告诉srun在单个节点中启动该脚本:

srun --nodes 1 --exclusive Rscript my_scrit.R --subset $i &

如果要在第一个迭代仍在运行时开始下一个迭代,则需要将脚本置于后台。您还需要--exclusive标志,以避免在已经分配的资源上启动额外的脚本。

相关问题