R-如何用slurm在几个节点上发送循环



我有一个我想在几个节点上执行的R脚本。我显示了我的slurm代码的循环:

编辑

#!/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的不同值。此代码仅在一个节点上执行。您是否有问题可以在几个节点上运行此代码?

谢谢

在您当前的状态中,您正在向slurm索要一个节点,一个任务和32个核心。如果要使用多个节点,则应告诉Slurm:

#SBATCH --nodes=10

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

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

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

最新更新