Slurm:为什么我们需要在 Sbatch 脚本文件中运行 Srun?

Slurm: Why do we need Srun in Sbatch script file?

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

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

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

#!/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

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

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

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

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

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

最后,srun 可以使用分配的一个子集,并在单个作业中组织 micro-scheduling 多个小任务(参见 srun 联机帮助页中的示例)。