繁体   English   中英

slurm - 并行运行多个 R 脚本

[英]slurm - run multiple R scripts in parallel

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

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

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

这是我用于运行单个.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 --mail-user=email@domain.hpc

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?

谢谢你的帮助

在后台运行:

#!/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

假设您有多个脚本( 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 --mail-user=email@domain.hpc

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 、保留节点的数量等来正确分配资源,这是有意义的。但是,这可能会因目标安装而异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM