在StarCluster / SGE群集上qsub
作业时,是否有一种简单的方法可以确保每个节点一次最多只能接收一个作业?我遇到的问题是,多个作业最终会在同一节点上导致内存不足(OOM)问题。
我尝试使用-l cpu=8
,但我认为这不会检查USED内核的数量,只检查盒子本身的内核数量。
我也试过了-l slots=8
,但后来我得到了:
Unable to run job: "job" denied: use parallel environments instead of requesting slots explicitly.
答案 0 :(得分:4)
在您的配置文件(.starcluster / config)中添加此部分:
[plugin sge]
setup_class = starcluster.plugins.sge.SGEPlugin
slots_per_host = 1
答案 1 :(得分:1)
很大程度上取决于群集资源的配置方式,即内存限制等。但是,要尝试的一件事是为每个作业请求大量内存:
-l h_vmem=xxG
由于该节点上的大部分内存已被另一个以前正在运行的作业请求,因此会产生排除其他作业在节点上运行的副作用。
确保您请求的内存不超过节点的允许限制。您可以通过检查qstat -j <jobid>
的错误输出来查看是否绕过此限制。
答案 2 :(得分:-1)
我通过使用以下方法将每个节点上的插槽数设置为1来实现此目的:
qconf -aattr queue slots "[nodeXXX=1]" all.q