如何在 SLURM 中将作业发送到不同类型的节点

How to send a job to nodes of different types in SLURM

提问人:Willy 提问时间:11/2/2023 最后编辑:Willy 更新时间:11/2/2023 访问量:22

问:

我在一家 HPC 中心工作,我们使用 SLURM 来管理队列,我正在寻找一种方法来强制将按任务划分的作业发送到不同类型的节点。例如,假设我们有两种类型的节点,分别称为 lpn 和 hpn,我们希望将一个作业划分为两个任务(仅在一个作业 ID 下),并将其中一个任务发送到 lpn 节点,另一个发送到 hpn 节点。哪一个,没关系:它可以是 lpn-1 和 hpn-36、lpn-47 和 hpn-13......但它必须是每一个。这也可能更笼统。

我尝试使用 nodelist 和 contraint 选项,但它们都不适用于强制分配特定和不同类型的节点。每当作业成功发送时,两个任务都会转到同一节点。由于 SLURM 的优化系统,我开始觉得这是不可能的,但无论如何都值得一试。

任务 作业 调度 slurm HPC

评论

0赞 Prakhar Sharma 11/4/2023
我可以知道您的用例吗?
0赞 Willy 11/7/2023
不幸的是,我不能给你任何东西,因为我只是一个系统技术员实习生,在那里只有几个月的经验,我不认识他们中的任何一个。我们只是在测试这种可能性。但是,有人给了我另一个答案的提示,所以我们现在要解决这个问题。谢谢!

答:

1赞 damienfrancois 11/2/2023 #1

您也许可以通过提交脚本实现您想要的 het 作业

#!/bin/bash
#
#SBATCH --nodes=1
#SBATCH --constraint=hpn
#SBATCH hetjob
#SBATCH --nodes=1
#SBATCH --constraint=lpn

srun <the command on the `hpn` node> : <the command on the `lpn` node>

假设相应地设置了节点特征。如果不同的节点类型位于两个不同的分区中,这应该也有效,只需将两者替换为 。--constrain=--partition

请注意命令中的 列出要在每个节点上运行的命令。或者,如果您想要两个不同的步骤,则可以将单行替换为::srunsrun

srun --hetgroup 0 <the command on the `hpn` node> &
srun --hetgroup 1 <the command on the `lpn` node> &
wait

评论

0赞 Willy 11/7/2023
不幸的是,这不起作用,但它给了我们一个提示,为什么这在我们的集群中似乎是不可能的:因为我们有一条“作业违反会计/QoS 策略”错误消息。我的 HPC 中心多年来一直在使用 SLURM,正如我所看到的,hetjob 选项相对较新,因此我们的配置不允许我们正确地使用 hetjob 来实现我正在处理的目的也就不足为奇了,因为在集群中配置 SLURM 时无法将其考虑在内。我的上级将检查 QoS 配置。多谢!