常见的作业管理系统有 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> |
查询作业状态 | qstat | bjobs | squeue |
删除作业 | 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数量的选取。
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】