在slurm中,运行2个以上的跨节点job,会出现不能同时运行,而是按照顺序一个完成再执行下一个job,问题出现在哪. 请提供一个sbatch 脚本
时间: 2023-06-20 11:09:50 浏览: 52
这个问题可能出现在Slurm配置中。需要检查Slurm配置文件中关于节点间通信和任务调度的配置是否正确。
以下是一个简单的sbatch脚本,用于在两个节点上并行运行两个任务:
```
#!/bin/bash
#SBATCH --job-name=myjob
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=1
srun hostname
srun sleep 10
srun -N 2 -n 2 hostname
srun -N 2 -n 2 sleep 10
```
这个脚本指定了两个节点,并在每个节点上运行一个任务。第一个任务是在每个节点上打印主机名,第二个任务是在两个节点上同时运行,每个节点上执行sleep 10秒。如果Slurm配置正确,则这两个任务应该同时运行,而不是一个接一个地运行。
相关问题
在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` 时,可以通过设置 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>
```
需要注意的是,这种作业抢占方式可能会影响正在运行的作业,因此需要谨慎使用,并在必要时与其他用户或管理员进行协调。