sbatch 将不同的作业绑定到单个核心
sbatch binds different jobs to a single core
我们使用 Slurm 资源管理器将作业发送到集群。最近,我们将 Slurm 版本从 15 升级到 18。
升级后遇到以下问题:
因此,我发送了需要单核并且应该利用 ~100% cpu 的作业。
然而,当这些作业到达同一个计算节点时,它们似乎大致共享一个核心。即,当第一个作业到达时,它获得 100% cpu,当第二个作业到达时,它们都获得 50% 等等。有时在同一个节点上有 20 个作业(它有 24 个物理核心)并且每个都得到 ~ 5% cpu.
重现问题的设置非常简单:
可执行文件是一个简单的 C 繁忙循环,已验证在本地 运行 时消耗 ~100% cpu。
我发送的脚本文件是:
> cat my.sh
#/bin/bash
/path/to/busy_loop
sbatch 命令为:
sbatch -n1 -c1 my.sh
一些观察:
- 无论我直接启动作业步骤(如上),使用 mpi运行 或 s运行,问题仍然存在。
- 看来问题只与作业之间的冲突有关,而不是在同一个作业中:如果我使用
sbatch -n2 -c1 my.sh
发送作业并在脚本文件中使用 mpirun /path/to/busy_loop
,似乎每个进程都得到 100% cpu。但是,如果另一个这样的作业将被发送到同一个节点,它们将共享相同的 2 个内核,并且 4 个进程中的每一个都获得 50% cpu.
- 我在旧集群上仍然可以使用之前的安装。据我评估,这两个安装的 slurm.conf 似乎是等效的(而且非常简单)。
我没有在网上找到任何关于类似问题的参考资料,我们将不胜感激每一个参考资料或帮助。
在 slurm.conf
中尝试不同的更改后,解决问题的更改是添加行:
TaskPlugin=task/affinity
我们使用 Slurm 资源管理器将作业发送到集群。最近,我们将 Slurm 版本从 15 升级到 18。
升级后遇到以下问题:
因此,我发送了需要单核并且应该利用 ~100% cpu 的作业。
然而,当这些作业到达同一个计算节点时,它们似乎大致共享一个核心。即,当第一个作业到达时,它获得 100% cpu,当第二个作业到达时,它们都获得 50% 等等。有时在同一个节点上有 20 个作业(它有 24 个物理核心)并且每个都得到 ~ 5% cpu.
重现问题的设置非常简单:
可执行文件是一个简单的 C 繁忙循环,已验证在本地 运行 时消耗 ~100% cpu。
我发送的脚本文件是:
> cat my.sh
#/bin/bash
/path/to/busy_loop
sbatch 命令为:
sbatch -n1 -c1 my.sh
一些观察:
- 无论我直接启动作业步骤(如上),使用 mpi运行 或 s运行,问题仍然存在。
- 看来问题只与作业之间的冲突有关,而不是在同一个作业中:如果我使用
sbatch -n2 -c1 my.sh
发送作业并在脚本文件中使用mpirun /path/to/busy_loop
,似乎每个进程都得到 100% cpu。但是,如果另一个这样的作业将被发送到同一个节点,它们将共享相同的 2 个内核,并且 4 个进程中的每一个都获得 50% cpu. - 我在旧集群上仍然可以使用之前的安装。据我评估,这两个安装的 slurm.conf 似乎是等效的(而且非常简单)。
我没有在网上找到任何关于类似问题的参考资料,我们将不胜感激每一个参考资料或帮助。
在 slurm.conf
中尝试不同的更改后,解决问题的更改是添加行:
TaskPlugin=task/affinity