我有一个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
的不同值。此代码仅在一个节点上执行。您在多个节点上运行此代码是否有问题?
谢谢
答案 0 :(得分:0)
在当前状态下,您正在向SLURM请求单个节点,单个任务以及该任务的32个核心。如果要使用多个节点,则应告知SLURM:
#SBATCH --nodes=10
稍后,在实际的脚本启动中,您应该告诉srun
在单个节点中启动该脚本:
srun --nodes 1 --exclusive Rscript my_scrit.R --subset $i &
如果要在第一个迭代仍在运行时开始下一个迭代,则需要将脚本置于后台。您还需要--exclusive
标志,以避免在已经分配的资源上启动额外的脚本。