我们希望拥有一个基于 SGE 的计算集群,其中一个队列可以让计算人员访问所有节点,另一个集群队列可以让其他人员访问一半的节点,以供偶尔(但频繁)使用。
我们希望限制第二个队列的资源,以便计算人员可以继续做一些工作,即使非计算人员偶尔(但大量)使用。
有没有办法设置两个(或更多)由一个节点集合组成的 SGE 队列,使得一个队列可以包含所有节点,而第二个队列包含相同节点的子集,并且两个队列同时运行?
我应该研究哪些具体的 SGE 配置参数来设置这样的功能?
答案1
当然,这是完全可能的。SGE 队列彼此独立,因此您可以将任何节点分配给每个队列,让它们按您的意愿重叠。
要创建队列,请键入qconf -aq
:这将打开您的默认编辑器(通常是 vim)。在 中键入队列名称qname
,在 中添加要分配的主机hostlist
,对于slots
,添加以逗号分隔的条目列表,格式为[hostname=numslots]
。通常,插槽数是主机中的核心数,但如果您愿意,可以订阅不足或超额。如果您希望队列重叠,只需将相同的主机添加到多个队列即可。
但请注意,默认情况下重叠队列不知道彼此的使用情况。它们都会很乐意将作业分配给同一节点并期望它们运行。
防止这种情况发生的最常见方法是使节点成为作业独占节点,这样一次只能运行一个作业。(这是其他调度程序(如 PBS)的默认设置。)SGE 使这有点复杂,并且涉及创建一个只能在每个节点上使用一次的虚拟“资源”。为此,请键入qconf -mc
manage消耗性资源。这将打开一个列出可消耗资源的编辑器:添加一个名为“exclusive”的新资源,如下所示:
#name shortcut type relop requestable consumable default urgency
#-----------------------------------------------------------------------------------------
exclusive excl BOOL EXCL YES YES 1 1000
有关详细信息,请参阅网格引擎 维基。
您还可以配置所谓的下属队列。在此,您可以设置一个队列,以便在分配超过一定数量的每个节点的插槽时,它将自动覆盖另一个队列。要设置它,请运行qconf -mq queue1
并在“从属”下指定queue2=N
。然后,每当队列1中节点上使用的插槽数超过否,队列2中的作业将被暂停,直到队列1中的作业完成。