Skip to main content

海量作业

作业组

为了便于管理海量的作业,可以对作业定义作业组。

作业组的名字是类似于Linux的路径名的树状结构,如作业组 /test ,而 /test/1 和 /test/2 都属于 /test

需要注意的是作业组是全局的,创建者是这个作业组的拥有者,作业组拥有者可以对这个作业组及其子组内的所有作业进行控制(哪怕这个作业是其他人提交的,拥有者也能进行控制)。如果您不想作业被别人控制,请确保提交到的作业组从/开始拥有者都是自己。

创建作业组

  • 显式创建作业组:bgadd /test
  • 使用bsub提交作业时指定一个不存在的作业组,则作业组会被隐式创建:bsub -g /test

查看作业组

  • bjgroup /test 最后一列就是作业组的拥有者,请注意拥有者也是层次继承的。

删除作业组

  • bgdel /test
  • 集群已经配置自动清理空的隐式创建的作业组

控制作业组作业

  • 有了作业组以后就可以对一组作业进行控制了
  • 查看指定作业组的作业:bjobs -g /test
  • 终止指定作业组的所有作业:bkill -g /test 0

作业序列

作业序列是一系列作业,这些作业执行相同的操作和资源要求,但是输入输出文件不同。这些作业共享同一个作业ID,并可以通过索引来区分每个子作业。

bsub 使用 -J "arrayName[indexList, ...]" 参数命名并创建一个作业序列,也可以理解为一个作业数组,中括号里面就是数组的下标,可以是一维数组也可以是多维数组。indexList = start[-end[:step]] 下标的起始、结束和步长均可指定。

作业调度系统提供了两个运行时变量 %I 和 %J,%I 为子作业的索引值,%J 为作业ID,一般用于输入输出文件名中;以及运行时环境变量 LSB_JOBINDEX

例如

  • 提交一个有10个子作业的作业:bsub -J "myArray[1-10]" myJob
  • 每个子作业定义不同的输入输出文件:bsub -J "myArray[1-10]" -i "input.%I" -o "output.%I" myJob
  • 假设jobid是123,针对单个子作业操作:bkill 123[1];对整个作业序列操作:bkill 123