设置 SGE 以完全填充每个节点,而不是分配作业

设置 SGE 以完全填充每个节点,而不是分配作业

最初错误地发布在 Stack Overflow 上...请参阅底部的 PS 以获取该帖子的回复。

我搜索了一段时间,但找不到答案。我遇到的问题是:假设我有一个 SGE,上面设置了两台 12 CPU 的机器。我有两个 1 CPU 的作业要提交给网格,但其他用户经常想要提交 12 CPU 的作业。这些是共享内存作业,不能拆分到多台机器上。有时我会提交我的两个作业,它们会分别转到不同的机器,每台机器都有 11/12 个空闲的 CPU。这样就可以防止其他人在我工作时运行 12 CPU 的作业。

有办法解决这个问题吗?我知道您可以使用 fillup 规则来控制单个 qsub(因此 fillup 可以让 12-CPU qsub 停留在一台机器上,也可以分散在多台机器上,等等),但是否有类似的设置可以强制将单独的 qsub 转到同一台机器?我还知道我可以明确请求特定的机器(我认为是 -h machinename 或类似的东西),但我更希望有一个比这更强大的设置。

任何帮助都非常感谢。谢谢!

PS:在 Stack Overflow 帖子中,在线程关闭之前,有一个回复建议使用并行环境分配规则 = $fill_up。除非我在尝试时做错了什么,否则我认为这并不能解决问题。从我看到的测试来看,如果我设置为 fill_up,这意味着在单个 qsub 中请求的 CPU 会尽可能放在同一台网格机器上,但来自不同 qsub 的 CPU 仍将转到低负载机器(或网格选择的任何机器),并且可能会转到空机器。对此的测试涉及 qsubbing 几个单 CPU 作业,等待约 5 分钟,然后再提交几个。虽然有时第一组最终会在同一台机器上(我猜是因为机器负载不是实时的,所以它们都被发送到同一台低负载机器?),但第二组不会始终与第一组转到同一台机器。

答案1

调度程序的默认设置加载论坛设置是np_load_avg它将新作业分配给平均负载最低的节点。要让它填充节点,您可以设置加载公式插槽. 要查看当前调度程序设置:

qconf -ssconf

要修改设置:

qconf -msconf

相关内容