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
,它将无效。
在第二个示例中,生成的进程数没有差异,因为只需要一个。但是,使用 srun
,sstat
的输出会更可靠,信号的管理会更精确,输出的缓冲会更受控制(通过 srun
命令行选项)。
如果您请求多个任务,srun
将实例化那么多进程。它可以是 MPI 程序,也可以是根据 SLURM_PROC_ID
环境变量调整其行为的顺序程序。
您还可以在同一提交脚本中 运行 多个 srun
。 srun
的每个实例(称为“步骤”)然后在会计中单独计算 (sacct
)。
最后,srun
可以使用分配的一个子集,并在单个作业中组织 micro-scheduling 多个小任务(参见 srun
联机帮助页中的示例)。
我是 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
,它将无效。
在第二个示例中,生成的进程数没有差异,因为只需要一个。但是,使用 srun
,sstat
的输出会更可靠,信号的管理会更精确,输出的缓冲会更受控制(通过 srun
命令行选项)。
如果您请求多个任务,srun
将实例化那么多进程。它可以是 MPI 程序,也可以是根据 SLURM_PROC_ID
环境变量调整其行为的顺序程序。
您还可以在同一提交脚本中 运行 多个 srun
。 srun
的每个实例(称为“步骤”)然后在会计中单独计算 (sacct
)。
最后,srun
可以使用分配的一个子集,并在单个作业中组织 micro-scheduling 多个小任务(参见 srun
联机帮助页中的示例)。