我有一个使用 MPI 并行化的程序。它认为它能够在我们基于 (CentOS 6.6) 的 HPC 网格上跨多个节点运行,而实际上它只能在多个内核上成功运行同一计算节点的。
例如,如果我qsub
向网格请求 20 个核心,并且 Grid Engine 决定将其拆分到两个不同的节点,则程序将失败。但是,如果有一个节点有 20 个可用核心,并且 Grid Engine 将其全部发送到该节点,则程序会成功运行。 qsub 脚本包含#$ -pe mpi 20
选择核心数量的命令。
因此,目前,我手动qstat -f -u "*"
识别具有 20 个可用核心的计算节点,并使用以下命令提交到该节点:qsub -q general.q@node-X-X
我正在寻找一种方法来告诉 Grid Engine 等待并仅将作业提交到具有所需数量的可用核心的单个计算节点。这将使我能够自动提交作业。
我正在考虑编写一个 bash 脚本来解析该qstat -f -u "*"
命令,但必须有一个更优雅的解决方案。我已经浏览了 qsub 手册,但无法找到合适的标志或命令行参数。
我目前无法修改程序本身,而且我不是系统管理员。
以下是我可用的不同软件版本的一些信息:
MPI/gridengine 信息:
> ompi_info | grep gridengine
MCA ras: gridengine (MCA v2.0, API v2.0, Component v1.6.2)
网格引擎版本为:OGS/GE 2011.11p1
答案1
要使 Gridengine 在单个节点上安排 20 个核心作业,您必须创建一个新的并行环境或调整您正在使用的环境。您需要的设置是
allocation_rule $pe_slots
从man sge_pe
:
如果使用特殊分母 $pe_slots,则必须在单个主机上分配使用 qsub(1) -pe 开关指定的全部进程。
不要忘记将新的 PE 添加到您的队列中。
要解决您的原始问题,在多个节点上运行 MPI 作业,您可以提出第二个问题,其中包含更多详细信息。
答案2
如果您使用-pe smp 20
而不是,-pe mpi 20
您将使用 SMP(“共享内存并行性”)环境而不是 MPI。
SMP 是一种更简单的并行方法在一台计算机上运行,跨线程共享本地系统内存。因此,它将所有请求的槽放置在单个节点上(如果可用),而不是将它们拆分到多个计算节点上。
对我来说,这似乎已经解决了问题。