1

我是 Slurm 的新手,我还发现了有关此主题的相关问题。但是,我仍然对如何使用 srun 的几点感到困惑。根据官方文档,srun 通常会先分配资源,然后运行并行作业。例如,我想运行 20 个任务,如果我根据以下脚本提交作业,我不确定创建了多少个任务。因为 sbatch 只负责分配资源而不是执行程序。

#!/bin/sh
#SBATCH -n 20
#SBATCH --mpi=pmi2
#SBATCH -o myoutputfile.txt
module load mpi/mpich-x86_64
mpirun mpiprogram < inputfile.txt

如果我试图运行如下的顺序程序,我不知道是否会有差异。例如,我可以简单地删除此脚本中的 srun 命令。会发生什么?

#!/bin/sh
#SBATCH -n 1
#SBATCH -N 1
srun tar zxf julia-0.3.11.tar.gz
echo "prefix=/software/julia-0.3.11" > julia/Make.user
cd julia
srun make
4

1 回答 1

1

第一个示例将产生 20 个任务;sbatch将请求 20 个 CPU并设置环境,以便知道mpirun该作业请求了多少 CPU。mpirun然后将产生与分配一样多的进程(前提是 OpenMPI 是在 Slurm 支持下编译的)。

#SBATCH --mpi=pmi2部分的目的是,如果未在提交脚本中调用,srun它将无效。srun

在第二个示例中,生成的进程数没有区别,因为只需要一个。但是,使用srun,输出sstat会更可靠,信号管理会更精确,输出的缓冲会更可控(通过srun命令行选项)。

如果您请求多个任务,srun将实例化那么多进程。它可以是 MPI 程序,也可以是根据SLURM_PROC_ID环境变量调整其行为的顺序程序。

您也可以srun在同一个提交脚本中运行多个。然后(称为“步骤”)的每个实例srun在会计(sacct)中单独计算。

最后,srun可以使用分配的子集并在单个作业中组织许多小任务的微调度(参见srun手册页中的示例)。

于 2020-10-13T09:10:00.280 回答