在slurm 中, 当PreemptType=preempt/qos 时, 如何才能实现一个JOB抢占另一个正在运行的JOB.
时间: 2024-03-03 18:53:06 浏览: 23
在 Slurm 中,当 `PreemptType=preempt/qos` 时,可以通过设置 QoS(Quality of Service)参数来实现一个作业抢占另一个正在运行的作业。具体实现步骤如下:
1. 创建一个新的 QoS,例如 `high_priority`。
2. 将正在运行的作业的 QoS 改为 `low_priority`,使其优先级降低。
3. 提交一个优先级更高的作业,并将其 QoS 设置为 `high_priority`。
4. Slurm 将会抢占正在运行的低优先级作业,以便运行高优先级作业。
这种方式可以通过以下命令实现:
```
# 创建一个新的 QoS
sacctmgr add qos high_priority
# 将正在运行的作业的 QoS 改为 low_priority
scontrol update jobid=<job_id> qos=low_priority
# 提交一个优先级更高的作业,并将其 QoS 设置为 high_priority
sbatch --qos=high_priority <script>
```
需要注意的是,这种作业抢占方式可能会影响正在运行的作业,因此需要谨慎使用,并在必要时与其他用户或管理员进行协调。
相关问题
在slurm 中, 当PreemptType=preempt/qos 时, 如何查看一个将要运行job的优先级 ?
当PreemptType=preempt/qos时,在Slurm中查看一个将要运行job的优先级可以使用`squeue`命令并指定`-o`选项来指定输出格式。例如,以下命令可以列出正在运行的job以及它们的优先级:
```
squeue -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R" -t RUNNING
```
在输出中,`%.9P`字段表示job的QOS级别,这也是job优先级的一个指标。如果想查看所有状态的job的优先级,可以去掉`-t`选项。如果想只查看某一个job的优先级,可以使用`scontrol`命令并指定job的ID。例如,以下命令可以查看job ID为12345的job的优先级:
```
scontrol show job 12345 -d | grep Priority
```
输出中的`Priority`字段表示job的优先级,该值越高,job的优先级越高。
在slurm 中, 当PreemptType=preempt/qos 时, 一个高优先级JOB 没有抢占低优先级JOB, 为什么 ?
在Slurm中,PreemptType=preempt/qos时,一个高优先级JOB没有抢占低优先级JOB的原因可能是因为低优先级JOB已经被分配了足够的资源,而高优先级JOB所需要的资源已经不足以满足其需求,因此无法抢占低优先级JOB。此外,也有可能是由于Slurm中的调度算法在考虑抢占时,同时考虑了任务的优先级以及当前任务所占用的资源情况,因此在某些情况下,高优先级JOB也可能无法抢占低优先级JOB。