在 SGE 中提交作业时如何请求节点数(不是 procs)?
例如在 TORQUE 中,我们可以指定
qsub -l nodes=3
如何在 SGE 中通过节点名称请求节点?
例如,在 TORQUE 中,我们可以通过、
qsub -l nodes=abc+xyz+pqr
where和are 主机名来做到这一点abc
xyz
pqr
对于单个主机名,
qsub -l hostname=abc
它可以工作。但是如何在 SGE 中分隔多个主机名?
2 回答
使用 Grid Engine 请求节点数是间接完成的。当您想提交并行作业时,您必须请求并行环境 ( man sge_pe
) 以及插槽数量(处理器等),例如qsub -pe mytestpe 12
...
根据allocation_rule
并行环境 ( qconf -sp mytestpe
) 中的定义,插槽分布在一个或多个节点上。如果您有一个所谓的固定分配规则,您只需添加某个数字作为分配规则,例如 4(每个主机 4 个插槽),这很容易。如果您喜欢一台主机,只需提交-pe mytestpe 4
10 个节点,只需提交-pe mytestpe 40
.
节点名称可以由-l h=abc
. 由于节点名称是
RESTRINGS
Grid Engine 中的(正则表达式字符串),因此您可以为主机过滤创建正则表达式:qsub -l h="abc|xyz"
. 您还可以创建主机组 ( qconf -ahgrp
) 并请求所谓的队列域 ( qsub -q all.q@@mygroup
)。
丹尼尔
您可以使用 -tc 来限制并发任务的数量(即,将用于数组作业的槽数)。当我提交具有 100 个子作业的数组作业时,我使用它来限制对我们队列的影响,使用 -tc 10 默认为 10 个同时作业。当每个作业完成时,将提交来自待处理池的另一个数组作业。
我能够弄清楚的唯一方法是设置特定的资源配额集(使用 qconf -mrqs),指定您要使用的特定主机组。您必须首先设置所需的所有组合。但是,我看不出指定特定主机的真正理由,除非这些主机具有您想要使用的特定资源(在这种情况下,我会为这些主机设置可消耗资源并将适当数量的资源应用于每个主机可以提供它们,然后使用它而不是为特定作业指定特定主机)。