2017-08-25 732 views
1

我发现这让我在这似乎不过工作我仍然不确定,如果我完全理解为什么,所以这个问题的脚本到一些非常类似的问题..SLURM每个节点提交多个任务?

我的问题(例如):在3个节点,我想在每个节点上运行12个任务(总共36个任务)。另外每个任务都使用OpenMP并应使用2个CPU。在我的情况下,一个节点有24个CPU和64GB内存。我的脚本是:

#SBATCH --nodes=3 
#SBATCH --ntasks=36 
#SBATCH --cpus-per-task=2 
#SBATCH --mem-per-cpu=2000 

export OMP_NUM_THREADS=2 

for i in {1..36}; do 
    srun -N 1 -n 1 ./program input${i} >& out${i} & 
done 

wait 

这似乎是工作,因为我需要,一个节点上连续运行的任务,直到该节点上的所有CPU都在使用,然后继续运行下一个节点上的进一步任务,直至所有的CPU再次使用等。

我的问题..我不确定这是否实际上是它做的(?),因为我没有完全理解srun关于-n的手册页,而且我还没有之前使用过srun。 主要是我的困惑来自于“-n”:在-n的手册页中,“默认是每个节点有一个任务,..”,所以我期望如果我使用“srun -n 1”,只有一个任务会可以在每个节点上运行,但似乎并非如此。 此外,当我尝试如“srun -n 2 ./program”它似乎只运行两个完全相同的程序两次不同的任务,而无法使用不同的输入文件..我想不出为什么这会有用?

回答

1

除了必须使用srun的--exclusive选项(在此例中具有不同于sbatch的含义)之外,您的设置是正确的。

至于您对srun的用处的评论,程序的行为可以根据环境变量$SLURM_TASK_ID或MPI程序情况下的排名进行更改。您的困惑源于您的程序不是写成并行(来自2个OMP线程),而srun是为了启动并行程序,大部分时间基于MPI

1

另一种方法是一次运行所有任务。 由于输入和输出文件取决于等级,包装需要

您SLURM脚本将

#SBATCH --nodes=3 
#SBATCH --ntasks=36 
#SBATCH --cpus-per-task=2 
#SBATCH --mem-per-cpu=2000 

export OMP_NUM_THREADS=2 

srun -n 36 ./program.sh 

和您的包装program.sh

#!/bin/sh 

exec ./program input${SLURM_PROCID} > out${SLURM_PROCID} 2>&1 
相关问题