slurm-并行运行多个R脚本

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

假设我有10个.R脚本(或任务),希望使用HPC群集同时运行所有这些脚本。

HPC群集使用slurm作为批处理/排队系统,并且我知道要运行多个任务,应使用命令srun

但是,我没有与HPC并行运行多个任务的任何经验,所以希望您能帮助我设置一个简单的job.sh脚本,以通过slurm提交给HPC。

这是我用来运行single .R脚本的job.sh脚本的示例:

#!/bin/bash
#SBATCH --job-name=test
#SBATCH --partition=part_x
#SBATCH --nodelist=node888
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --time=01:00:00
#SBATCH --mem-per-cpu=45000
#SBATCH --output=node888.out
#SBATCH --error=node888.err
#SBATCH --mail-type=ALL
#SBATCH [email protected]

Rscript /my/dir/script_1.R

[我如何设置一个job.sh脚本,使其并行运行我的10个.R脚本,它们分别为:script_1.R,script_2.R,script_3.R,script_4.R,....,script_10.R?

感谢您的帮助

r parallel-processing batch-processing slurm
2个回答
0
投票

要在后台运行:

#!/bin/bash

name="script_"

for iter in {1..10}
do

  mkdir $name$iter
  cd $name$iter
  cp ../$name$iter.R .
  nohup sbatch ./$name$iter.R &
  cd ../

done

0
投票

假设您的脚本数量(script_1script_2script_3)。

您可以做的是:

#!/bin/bash
#SBATCH --job-name=test
#SBATCH --partition=part_x
#SBATCH --nodelist=node888
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --time=01:00:00
#SBATCH --mem-per-cpu=45000
#SBATCH --output=node888.out
#SBATCH --error=node888.err
#SBATCH --mail-type=ALL
#SBATCH [email protected]

mpirun -np NUMBER_OF_PROCESSES wrapper.sh

然后,在wrapper.sh中,您可以执行以下操作:

#!/bin/bash

# depending on your installation, you have to get env var that tells you what
# process number it is

PROC_ID=${HERE_GOES_YOUR_SYSTEM_SPECIFIC_VARIABLE_WITH_RANK}

Rscript /my_scripts/script_${PROC_ID}.R

当然,只要您通过指定--ntasks,保留的节点数等正确分配资源,这是有道理的。但是,这可能会因目标安装而异。

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