我有相当多的 LSF 实践经验,这实际上干扰了我对 SLURM 的学习。
我对
srun
和 salloc
特别困惑,因为我无法将它们映射到我熟悉的任何 LSF 命令。
最重要的是,我对以下事实感到困惑:我遇到了几个启动交互式会话的“秘诀”,其中一些使用
srun
,而其他则使用 salloc
。
例如,在我有权访问的系统中,配置了 SLURM,以便以下两个命令中的任意一个将为我启动交互式 shell 会话:
$ srun --mem=$MEMORY --pty -- $SHELL
$ salloc --mem=$MEMORY
srun
和
salloc
到底是什么关系?
salloc
是
srun
的特例吗?
手册页来看,
srun
用于在由SLURM(简单Linux资源管理实用程序)管理的集群上运行并行作业。 如果需要运行作业,它可以创建资源分配。
srun --mem=$MEMORY --pty -- $SHELL
将交互式 shell 会话作为作业启动。
--pty
标志分配一个伪终端,这对于交互式会话很重要,并且
$SHELL
调用用户的默认 shell。从
手册页来看,
salloc
用于为作业分配资源,并且它可以立即在这些分配的资源中执行命令。如果向
salloc
提供命令,它将在分配必要的资源后运行该命令。 如果未指定命令,
salloc
会分配资源并将控制权返回给用户的命令行,从而有效地为用户希望在分配的资源内运行的任何后续命令创建一个环境。所以
salloc
可以有两种用途:
salloc
不是
srun
的特例;相反,它们一起用于管理 SLURM 环境中作业处理和资源分配的不同方面。
salloc
分配资源,然后在该分配中使用
srun
执行特定命令或作业。
srun
可以独立使用来一次性分配资源和执行命令。
IBM Spectrum LSF(负载共享设施)”作业调度程序的
bsub
命令进行比较。
srun
用于直接在分配的资源上执行作业或命令。如果不存在,它可以启动新的作业分配,或者在现有分配中运行。LSF中的
bsub
首先用于向批处理系统提交作业。它根据资源可用性和系统策略来安排和管理作业。比较:
srun
和
bsub
都用于作业执行,但
srun
提供更即时的执行,通常用于交互式会话或一次性任务。
salloc
用于为作业分配资源,供立即或将来使用。分配后,您可以在此分配内运行
srun
来执行特定任务。
bsub
,与
salloc
类似,用于带有资源请求的作业提交。然而,
bsub
更专注于批处理的调度和排队作业。对比:
salloc
和
bsub
都涉及资源分配,但
salloc
更多的是为后续命令创建环境,而
bsub
是关于提交和调度作业。