[英]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_1
、 script_2
、 script_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.