在 Sun Grid Engine(SGE)中异步作业排队-可能吗?

在 Sun Grid Engine(SGE)中异步作业排队-可能吗?

我们希望部署一个排队系统,而 SGE 看起来几乎可以满足我们所有的愿望。但是,我们的想法是同时支持同步和异步排队模型。换句话说:

  1. 我们会将所有工作节点绑定到一个同步队列,以便分配给它们的作业可以正常排队 - 即一个作业运行时,另一个作业被接受并运行。

  2. 我们希望能够将“异步”作业分配给节点。这些任务可以与其他作业(通常是机器本身的维护任务)并行完成。

我在 SGE 文档中看到,可以跨节点定义多个队列,但这与拥有一个队列来接收任何给定的作业并将其启动到后台,然后接受另一个作业并不完全相同。我并不完全了解 SGE 中的所有配置选项,但似乎这是可行的。有人能告诉我一些关于如何配置的信息吗?

答案1

您可以定义每个队列的插槽数。因此,对于“同步”作业队列,您可能希望将每个主机的插槽数设置为 1。这样,一次只能将一个作业接受到主机的队列,一旦该作业完成,另一个作业就可以运行。对于“异步”队列,只需将插槽数设置为某个较高的数字,这样无论您需要多少作业都可以在主机上同时运行。

现在您有两个队列,您需要某种方式将作业定位到它们。一个简单的方法是使用切换-q到 qsub 来明确选择一个队列,例如:qsub -q 'sync.q@*'

但是,最好让 gridengine 决定将作业放入哪个队列。为此,您可以定义一个复合队列,并将属性sync设置forced为 true。然后将该复合队列分配给队列。现在,提交的作业qsub -l sync将只放入具有该属性的队列中。这样做的好处是,如果您决定重新组织队列,则可以获得一些额外的灵活性,并且提交过程会稍微简单一些。

相关内容