常见的作业管理系统有 PBS、LSF、Slurm 等,它们的命令不完全相同,但基本上是可以相互替代的,具体需要根据超算提供的默认作业管理系统来做选择。
其中,PBS 起初是闭源的,后续演变成了多个开源版本,版本主要包括 OpenPBS、TORQUE 和 PBS Pro;LSF 是闭源且商业化的,需要付费;Slurm 从一开始就是开源项目。
本篇给出超算中作业管理系统中的一些常用命令。Linux系统的命令参考这篇:Linux的常用命令。
一、PBS命令(qsub)和提交脚本
pbsnodes (查看所有节点)
pbsnodes -l free (查看空闲节点)
pbsnodes 某节点 (查看某节点状态)
ssh 某节点 (转到某节点)
exit (离开节点)
qsub 文件名.pbs/sh (提交任务)
qstat (列出队列)
qstat -a (列出队列的详细信息)
qstat -q (列出节点信息)
qstat -n (列出队列中使用的节点)
qstat -f jobid (查看jobid任务的详细信息)
qdel jobid (取消任务)
qdel $(seq 100 130) (连续任务号的批量取消任务)
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”是队列名称,需要根据超算中提供的文档来进行修改。脚本文件为:
#!/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)和提交脚本
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”,需要根据超算中提供的文档来进行修改;-n 表示规定 CPU 的核心数。
提交作业的命令为:bsub < a.lsf 或 bsub < a.sh
说明:这里提交作业的命令中间好像是需要额外的一个小于号“<”,作用是把文件内容作为标准输入提供给 busb 命令。
三、Slurm命令(sbatch)和提交脚本
Slurm 调度系统的默认提交作业命令为:sbatch,等效于 qsub。
由于当前自己没有使用到,这里暂不给出详细内容和脚本示例。如果需要使用,可以查看后面的命令对比,然后做命令替代,以及脚本文件里的代码替代。
四、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】