Featured image of post Slurm: 无需管理员权限更改计算任务的优先级

Slurm: 无需管理员权限更改计算任务的优先级

用Slurm在计算集群上提交计算任务时的优先级管理

简介

Slurm是一个广泛使用的Linux和Unix系统的工作负载管理器和作业调度程序。它允许用户在集群环境中提交和管理作业。

在集群上管理作业的一个重要方面是作业优先级控制。在本文中,我们将讨论如何使用Slurm中的"–nice"选项来设置作业的优先级。

缘起

考虑这样一个场景:

  1. 用户A和用户B共用一个计算集群(Cluster)。
  2. 用户A提交了大量的计算任务占用了所有可用的计算节点(node),而且还有一些计算任务正在等待,但单个计算任务所花的时间并不是特别长。
  3. 这时用户B需要提交一个计算任务,这个计算任务所需的计算资源(核心数、内存等)很少。但由于B提交这个计算任务晚于A提交的大量任务,所以B的这个任务必须等A的所有计算任务全部完成后才能启动。

在这种场景下,用户B需要的计算资源虽然很少,但由于提交计算任务较晚,所以必须等待很长时间才能开始计算,这就浪费了用户B大量的时间。

而如果能让用户B的这个计算任务排在用户A正在等待的计算任务前面, 那么一旦用户A正在运行的某个任务结束,用户B的任务立刻就能开始计算;用户B的计算完成后,用户A可以继续使用B空下来的计算资源。这样B可以节省大量的等待时间,而A增加的等待时间微乎其微。

所以在这种情况下,使B后提交的计算任务的优先级高于A先提交的计算任务就非常重要。

管理作业优先级

Slurm中的作业优先级

通常,通过Slurm提交的作业按照"先进先出(First In, First Out, FIFO)“的原则确定优先级。

但有时集群管理员也会通过配置“多因子优先级插件”来计算作业的优先级,这时作业的优先级取决于作业规模、排队时间、关联性、分区等多种因素。

调整作业优先级的方法

  1. 对管理员而言,可以通过指定或更改作业的"priority"选项的值直接管理作业的优先级。
  2. 对普通用户而言,通常不允许直接指定或更改作业的"priority"选项。但上面提到的决定作业优先级的多个因子中有一个"nice"因子,是普通用户可以指定的。“nice"因子可以理解为"好人值”, 其值越大,作业的优先级越低,即表示你对其他用户更友好。

“nice"选项的用法

指定和更改

  • 用户可以在提交作业时指定"nice"的值:

    1
    
    sbatch --nice=100 your_slurm_script
    
  • 用户也可以更新已经提交完正在等待启动的作业的"nice"值:

    1
    
    scontrol update JobId=<job_id> Nice=<new_nice_value>
    

查看作业优先级

  • 用户可以查看某个已提交作业的优先级:
    1
    
    scontrol show job=<job_id> | grep Priority
    

注意事项

  1. 默认的"nice"值是0。
  2. 普通用户只能指定一个正的"nice"值,管理员才可以指定负的"nice"值。即普通用户只能做“好人”,管理员才能做“坏人”。
comments powered by Disqus