在使用HPC跑模型时常常需要批量取消提交的job,本文将三种常见的作业调度系统的批量取消作业方法进行介绍,方便平时使用。
一、Slurm
Slurm取消/删除作业的命令为scancel
,其基本的使用方法有:
命令 | 说明 |
---|---|
scancel < jobid > | 删除指定作业 |
scancel -t ST | 删除指定状态的作业 |
scancel --account=< name > | 删除指定账号的作业 |
scancel --name=< name > | 删除指定名称的作业 |
scancel --partition=< names > | 删除指定分区的作业 |
scancel --reservation=< name > | 删除指定预约名称的作业 |
scancel --state=< names > | 删除指定状态的作业 |
scancel --user=< name > | 删除指定用户的作业 |
scancel --nodelist=< names > | 删除指定节点的作业 |
而在实际shell脚本和命令行中,需要批量取消作业,这时有以下几种方式:
- 方法1(常用)
# 1.取消所有作业
scancel -u <user_name>#2.不过滤取消
squeue --me -h -o "%i" | xargs scancel# 3. 过滤取消,如取消所有jobid中以xxxxx开头的作业
squeue --format="%.18i" --me -h | grep -w xxxxx.* | xargs scancel
- 方法2
# 方法2,scancel接受多个作业ID时,可以省略该-n 1部分
squeue -u $USER | grep <作业号全部或部分数字> | awk '{print $1}' | xargs -n 1 scancel
有时候,对于squeue命令输出的部分,需要修剪包含列标题的第一行:
squeue -u $USER | awk '{print $1}' | tail -n+2 | xargs scancel
二、PBS
2.1 根据jobid取消
qdel {14371..35428}
2.2 直接根据用户名取消
qselect -u <username> | xargs qdel
或者
qdel -u <username>
三、LSF
LSF(Load Sharing Facility),接触相对较少,其主要使用bkill来删除作业.
3.1 直接删除
直接使用bkill命令删除:
bkill <jobid>
bkill –r <jobid>
3.2 批量删除
批量删除任务的方法(以使用bkill删除所有PSUSP状态的任务为例):
# 删除单个用户提交的任务
bjobs -u username | grep PSUSP|awk '{print $1}' |xargs bkill# 删除所有用户提交的任务(-p参数,可有可无,不影响命令执行结果)
bjobs -u all -p -q normal | grep PSUSP|awk '{print $1}' |xargs bkill
3.3 LSF其他常用命令:
- bjobs检查提交作业状态:
命令 | 说明 |
---|---|
bjobs –r | 显示正在运行的作业 |
bjobs –a | 显示正在运行的和最近完成的作业 |
bjobs -p | 显示等待运行的作业和等待原因 |
bjobs –s | 显示正在挂起的作业和挂起的原因 |
bjobs -l | 显示该作业的所有信息 |
- bhist显示最近完成作业或正在运行作业的历史情况
bhist <jobid>
- bpeek 当作业正在运行时显示它的标准输出,监视作业运行
bpeek <jobid>
- bqueues 显示队列信息
bqueues
bqueues –l <queue name>
- bhosts 显示各节点作业相关情况
bhosts
bhosts <hostname>
欢迎关注学习及分享的微信公众号:微思研