SLURM每个节点提交多个任务?
问题描述:
我发现这让我在这似乎不过工作我仍然不确定,如果我完全理解为什么,所以这个问题的脚本到一些非常类似的问题..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”它似乎只运行两个完全相同的程序两次不同的任务,而无法使用不同的输入文件..我想不出为什么这会有用?
答
除了必须使用srun的--exclusive
选项(在此例中具有不同于sbatch
的含义)之外,您的设置是正确的。
至于您对srun
的用处的评论,程序的行为可以根据环境变量$SLURM_TASK_ID
或MPI程序情况下的排名进行更改。您的困惑源于您的程序不是写成并行(来自2个OMP线程),而srun
是为了启动并行程序,大部分时间基于MPI。
答
另一种方法是一次运行所有任务。 由于输入和输出文件取决于等级,包装需要
您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