在同一节点上运行两个脚本

时间:2018-05-18 17:06:16

标签: slurm

我有一个包含20个内核的节点,我想知道如何在这个节点的每10个内核中创建两个作业。 (两个jobs.sh都是一样的,启动job.sh后我修改了main.R的参数然后再次运行job.sh。)

#!/bin/bash
#SBATCH --job-name=main
#SBATCH --mail-use=abc@gmail.com
#SBATCH --mail-type=ALL
#SBATCH --nodes=1                # number of nodes
#SBATCH --ntasks-per-node=10     # number of cores
#SBATCH --time=24:00:00          # walltime
#SBATCH --output=sortie/job.out
#SBATCH --error=sortie/error.err

module load python
module load R
# module load openmpi

R CMD BATCH '--args ../../' main.R sortie/main.Rout

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是请求所有20个核心:

#SBATCH --ntasks-per-node=20

然后调用两个R脚本并在后台运行它们。每个都不应该使用超过10个核心。所以不要使用detectCores()或类似函数来设置R中的核心数,而是将核心数设置为10:

R CMD BATCH '--args ../../' main1.R sortie/main1.Rout &
R CMD BATCH '--args ../../' main2.R sortie/main2.Rout &

wait

同时,不清楚为什么需要在一个批处理脚本中运行2个脚本。更优化的方法是提交2个作业,其中10个核心分别运行单个R脚本。您可以将参数传递给您提交的shell脚本,然后使用它们传递给R脚本。例如,

如果您正在运行R脚本main.R并希望传递2个值,则可以在提交脚本中执行:

module load R
Rscript main.R $1 $2

然后调用此脚本两次:

sbatch myscript.sh 3.14 outfile1.csv
sbatch myscript.sh 1.57 outfile2.csv

然后第一份工作将以:

运行
Rscript main.R 3.14 outfile1.csv

第二个:     Rscript main.R 1.57 outfile1.csv

如果您比Rscript更喜欢R CMD BATCH格式,您也可以使用它。只需使用$ 1,$ 2等作为R脚本的参数。

相关问题