如何在 Slurm 上取消作业 ID(作业编号)大于某个数字的作业?

Mon*_*and 8 command-line slurm

我已经在 Slurm 上提交了 800 个工作。我想取消那些作业 ID/编号大于数字的作业(因为它们有错误)。我不想取消我所有的作业,因为有些正在运行,有些在队列中是正确的。

小智 11

它不是严格回答如何取消大于给定数字的作业,但它可以解决@mona-jalilvand 试图解决的问题:取消此处描述的范围内的作业

scancel  {1000..1050}
Run Code Online (Sandbox Code Playgroud)

比进入 bash 脚本要简单得多……对我来说效果很好。


cas*_*cas 3

您需要使用squeue获取属于您的所有作业的列表,然后循环该列表并取消与您的条件匹配的每个作业(作业 ID 大于 X)scancel

squeue有非常灵活的输出选项,通过它的-o又名--format选项,您可以告诉它准确打印您想要的内容。在本例中,我们只需要工作编号。根据,格式字符串man squeue为:%i

%i作业或作业步骤 ID。

对于作业数组,作业 ID 格式将采用“_”形式。默认情况下,作业数组索引字段大小将限制为 64 字节。使用环境变量 SLURM_BITSTR_LEN 指定更大的字段大小。(对作业和作业步骤有效)在异构作业分配的情况下,作业 ID 格式将采用“#+#”形式,其中第一个数字是“异构作业领导者”,第二个数字是“异构作业领导者”,第二个数字是零源偏移量。工作的每个组成部分。

以下 sh 脚本使用它:

#!/bin/sh

if [ -z "$1" ] ; then
    echo "Minimum Job Number argument is required.  Run as '$0 jobnum'"
    exit 1
fi

minjobnum="$1"

myself="$(id -u -n)"

for j in $(squeue --user="$myself" --noheader --format='%i') ; do
  if [ "$j" -gt "$minjobnum" ] ; then
    scancel "$j"
  fi
done
Run Code Online (Sandbox Code Playgroud)

将其另存为,例如,cancel-jobs.sh使用 使其可执行chmod +x cancel-jobs.sh,然后运行它以./cancel-jobs.sh 50000取消作业 ID 大于 50,000 的所有作业。

如果您希望取消大于或等于最小作业编号的作业编号,请将 更改-gt-ge


一个小的优化是不单独取消每个作业,而是建立一个匹配作业编号的列表,然后通过一次调用将它们全部取消scancel

例如,使用 bash 数组来保存作业编号:

#!/bin/bash

declare -a jobs=()

if [ -z "$1" ] ; then
    echo "Minimum Job Number argument is required.  Run as '$0 jobnum'"
    exit 1
fi

minjobnum="$1"

myself="$(id -u -n)"

for j in $(squeue --user="$myself" --noheader --format='%i') ; do
  if [ "$j" -gt "$minjobnum" ] ; then
    jobs+=($j)
  fi
done

scancel "${jobs[@]}"
Run Code Online (Sandbox Code Playgroud)

这与第一个脚本执行相同的操作,但效率稍高一些。