语言, 其他语言

超算中作业管理系统PBS/LSF/Slurm的常用命令

常见的作业管理系统有 PBS、LSF、Slurm 等,它们的命令不完全相同,但基本上是可以相互替代的,具体需要根据超算提供的默认作业管理系统来做选择。其中,PBS 起初是闭源的,后续演变成了多个开源版本,版本主要包括 OpenPBS、TORQUE 和 PBS Pro;LSF 是闭源且商业化的,需要付费;Slurm 从一开始就是开源项目。

本篇给出超算中作业管理系统中的常用命令。Linux系统的命令参考:Linux的常用命令

一、PBS命令(qsub)和提交脚本

qstat (显示作业)
qstat -a (显示所有作业的状态)
qstat -q (显示队列的状态)
qstat -n (显示作业所在的节点信息)
qstat -f jobid (查看jobid任务的详细信息)
qsub 文件名.pbs/sh (提交任务)
qdel jobid (取消任务)
qdel $(seq 100 130) (连续任务号的批量取消任务)
pbsnodes (查看所有节点)
pbsnodes -l free (查看空闲节点)
pbsnodes 某节点 (查看某节点状态)
ssh 某节点 (转到某节点)
exit (离开节点)
lfs quota -uh $USER ~ (查看当前用户的存储配额,有的系统中支持 lfs 命令)

以下是用于PBS提交任务的文件信息,供参考。

提交任务,执行a.py。脚本文件(a.pbs 或 a.sh)为:

#!/bin/sh
#PBS -N task
#PBS -l nodes=1:ppn=1
python a.py

说明:如果只需要基本的 shell 功能,那么文件头部可以使用 #!/bin/sh;如果需要更复杂的功能,那么文件头部使用 #!/bin/bash 更合适。这里两种都可以,使用 #!/bin/sh 已经足够了。

如果是执行 a.exe 文件,脚本文件修改为:

#!/bin/sh
#PBS -N task
#PBS -l nodes=1:ppn=1
./a.exe

有的服务器上可能需要加上“cd $PBS_O_WORKDIR”,定位到工作目录中才可以找到 a.py 文件。脚本文件为:

#!/bin/sh
#PBS -N task
#PBS -l nodes=1:ppn=1
cd $PBS_O_WORKDIR
python a.py

如果集群或者超算存在多个队列/分区,那么有的可能还需要加上队列/分区名称,如“#PBS -q debug”,其中“debug”是队列/分区名称,需要根据超算中提供的文档来进行修改,或者通过命令 qstat -q 查看。脚本文件为:

#!/bin/sh
#PBS -N task
#PBS -l nodes=1:ppn=1
#PBS -q debug
cd $PBS_O_WORKDIR
python a.py

另外,也可以指定OMP并行的线程数。一般来说,这里可以不用设置。如果指定OMP并行的线程数,脚本文件为:

#!/bin/sh
#PBS -N task
#PBS -l nodes=1:ppn=1
#PBS -q debug
cd $PBS_O_WORKDIR
export OMP_NUM_THREADS=1
python a.py

提交作业的命令为:qsub a.pbs 或 qsub a.sh

二、LSF命令(bsub)和提交脚本

LSF 调度系统的默认提交作业命令为:bsub。

bjobs 等效于 PBS 中的 qstat
bsub 等效于 PBS 中的 qsub
bkill 等效于 PBS 中的 qdel

提交任务的脚本(a.lsf 或 a.sh)为:

#!/bin/sh
#BSUB -J task
#BSUB -q score
#BSUB -n 1
python a.py

其中,-J 表示作业名称,-q 表示队列/分区名称,有的系统中会强制要求提供这个队列/分区名称,这里名称为“score”,需要根据超算中提供的文档来进行修改,或者通过命令 bqueues 查看所有队列/分区名称;-n 表示规定 CPU 的核心数。

提交作业的命令为:bsub < a.lsf 或 bsub < a.sh

说明:这里提交作业的命令中间好像是需要额外的一个小于号“<”,作用是把文件内容作为标准输入提供给 busb 命令。

三、Slurm命令(sbatch)和提交脚本

Slurm 调度系统的默认提交作业命令为:sbatch。

sbatch 等效于 PBS 中的 qsub
scancel 等效于 PBS 中的 qdel
squeue 等效于 PBS 中的 qstat

提交任务的脚本(a.slurm 或 a.sh)为:

#!/bin/sh
#SBATCH --job-name=task
#SBATCH --partition=debug
#SBATCH --cpus-per-task=1
python a.py

其中,通过 sinfo 命令可以查看 Slurm 集群的队列/分区(PARTITION),如果只有单一队列/分区,这个设置可以忽略。

提交作业的命令为:sbatch a.slurm 或 sbatch a.sh

四、PBS、LSF、Slurm的命令对比

功能PBS (qsub)LSF (bsub)Slurm (sbatch)
提交作业qsub <script>bsub <script>sbatch <script>
查询作业状态qstatbjobssqueue
删除作业qdel <job_id>bkill <job_id>scancel <job_id>
查看作业详情qstat -f <job_id>bjobs -l <job_id>scontrol show job <job_id>
设置作业名称-N <job_name>-J <job_name>--job-name=<job_name>
指定队列/分区-q <queue>-q <queue>--partition=<partition>
指定资源(CPU)-l nodes=1:ppn=<num_cores>-n <num_cores>--cpus-per-task=<num_cores>

通过以上这种对比,可以帮助在不同调度系统间工作的用户快速找到等效命令。

更多阅读:超算提交任务时CPU数量的选取

1,589 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code