我正在尝试让 sun gridending (sge) 在集群的所有节点上运行 MPI 作业的单独进程。
发生的事情是每个节点都有 12 个处理器,因此 SGE 将我的 60 个进程中的 12 个分配给 5 个单独的节点。
我希望它为 30 个可用节点中的每一个分配 2 个进程,因为每个节点上运行 12 个进程(dna 序列比对),节点内存不足。
所以我想知道是否可以明确让 SGE 将进程分配给给定节点?
谢谢,
保罗。
我正在尝试让 sun gridending (sge) 在集群的所有节点上运行 MPI 作业的单独进程。
发生的事情是每个节点都有 12 个处理器,因此 SGE 将我的 60 个进程中的 12 个分配给 5 个单独的节点。
我希望它为 30 个可用节点中的每一个分配 2 个进程,因为每个节点上运行 12 个进程(dna 序列比对),节点内存不足。
所以我想知道是否可以明确让 SGE 将进程分配给给定节点?
谢谢,
保罗。
查看并行环境配置中的“allocation_rule”;或者然后通过为 allocation_rule 指定 $pe_slots 然后使用 qsub 的 -pe 选项,您应该能够执行您上面要求的操作。
您可以通过创建一个队列来完成此操作,您可以在其中定义该队列仅使用每个节点中 12 个处理器中的 2 个处理器。
您可以使用命令查看当前队列的配置
qconf -sq queuename
您将在队列配置中看到以下内容。这个队列以这样一种方式命名,即它每个只使用 5 个执行主机和 4 个插槽(处理器)。
....
slots 1,[master=4],[slave1=4],[slave2=4],[slave3=4],[slave4=4]
....
使用以下命令更改队列配置
qconf -mq queuename
然后将这 4 个更改为 2 个。
在管理主机上,运行“qconf -msconf”来编辑调度程序配置。它将在编辑器中显示配置选项列表。寻找一个名为“load_factor”的。将值设置为“-slots”(不带引号)。
这告诉调度程序,当机器使用的插槽最少时,它的负载最少。如果每个 exec 主机的插槽数量相似,您将获得均匀分布。如果您有一些 exec 主机的插槽比其他主机多,那么它们将是首选,但您的分布仍然会比 load_factor 的默认值更均匀(我不记得了,在我的集群中更改了这个值已经有一段时间了前)。
您可能需要在每台主机上设置插槽。我自己已经这样做了,因为我需要将一组特定盒子上的作业数量限制为少于它们的最大值,因为它们没有其他一些盒子那么多的内存。我不知道这个 load_factor 配置是否需要,但如果需要,您可以为每个主机添加一个插槽消耗。使用“qconf -me hostname”执行此操作,向“complex_values”添加一个类似于“slots=16”的值,其中 16 是您希望该主机使用的插槽数。
这是我从我们的系统管理员那里学到的。将此 SGE 资源请求放入您的作业脚本中:
#$ -l nodes=30,ppn=2
每个节点( ppn ) 和 30 个节点请求 2个MPI进程。我认为如果其他用户也运行大量作业,则无法保证这种 30x2 布局可以在 30 节点集群上运行,但也许您可以尝试一下。