我们有一个执行不同任务的集群。它使用 Torque 调度程序计算模拟。我们还有一个交互式模拟,它也需要全部计算能力。交互式模拟是一个 OpenMPI 程序,在每个节点上启动进程。
因此,我们希望实现以下目标:如果启动了交互式模拟,则所有 pbs 作业都应转移到后台,从而释放交互式模拟的工作负载。
使用这两种不同的并行化方案是否可能实现这一点?
我尝试了以下操作:我在 /etc/security/limits.conf 中附加了一行,为扭矩队列的用户分配了较低的优先级
user hard priority 10
对于每个节点上的每个用户。但是调度程序会忽略这一点,因此 pbs 作业仍然会获得 0 的 niceness 值。
该集群使用 CentOS 运行。
优先级选项 qsub -p 是否影响相应作业的优先级,还是仅适用于调度程序?
我希望这里有人有正确配置排队系统的经验。
答案1
-p
中的选项仅qsub
影响队列中作业的优先级。如果您想以较低的优先级启动进程,或者在 Unix/Linux 中以较高的 nice 值启动进程,则可以使用 来qsub -l nice=19
启动进程。根据所使用的 MPI 实现和应用程序,这仍然可能不起作用,但一般情况下应该可以工作。
好吧,这种方法只会告诉操作系统为该应用程序分配较少的 CPU 时间/调度程序槽,但这很可能会占用以 nice 值为 0 运行的交互式作业。不要忘记内存量可能无法满足并发作业的需求。
通常,您希望暂停作业以释放集群中的资源,但这也会带来问题。一种方法可能是使用 停止进程,SIGSTOP
然后使用 重新启动它们SIGCONT
。我已经有几年没有使用 Torque 了,但我想应该有一种方法可以在暂停作业时指定您自己的脚本。在进一步的研究中,还要寻找抢占。
不幸的是,这种方法可能也无法与 MPI 一起正确工作,并且取决于 MPI 实现。因此,您还必须阅读有关您正在使用的 MPI 版本的可能性。此外,这也不会释放您的内存资源,节点可能会开始交换,或者 OOM 会终止您的作业。
通常,您希望检查作业,这样就可以真正结束进程并释放资源。这种检查点可能在应用程序中得到最好的支持,即写出您可以重新启动的临时结果。还有一些不依赖于应用程序的检查点方法,但据我所知,这些方法也不太可靠。只需使用您选择的搜索引擎并查找mpi 检查点。
还可以考虑取消 MPI 作业并重新排队以便稍后重新开始。取决于作业和用户接受度。
如果您负担得起或者交互式工作对免费资源的需求很高,您还可以在工作时间内留下一两个节点用于交互式工作。
需要考虑的另一点可能是将调度程序更改为 maui,因为默认扭矩调度程序在配置高级调度方面非常有限。