PBS下的MPI主机文件

PBS下的MPI主机文件,mpi,cluster-computing,hpc,pbs,Mpi,Cluster Computing,Hpc,Pbs,我正在尝试在PBS资源管理下的群集上运行MPI作业。集群指南说我不必担心向mpiexec传递任何东西,因为PBS应该负责这一点。对于单个节点上的作业,这是正确的,作业可以完美运行 当我提交需要多个节点的作业时,作业退出,表示无法识别主机。我在PBS脚本中包含了一个例程来解析$PBS_节点文件,并用正确的DNS后缀重建一个主机文件。PBS现在可以识别主机 现在麻烦的是:我生成的hosts文件没有正确地传递给mpiexec。有关我传递的主机文件以及MPI进程的输出,请参见下文 我的主机文件: cx1

我正在尝试在PBS资源管理下的群集上运行MPI作业。集群指南说我不必担心向mpiexec传递任何东西,因为PBS应该负责这一点。对于单个节点上的作业,这是正确的,作业可以完美运行

当我提交需要多个节点的作业时,作业退出,表示无法识别主机。我在PBS脚本中包含了一个例程来解析$PBS_节点文件,并用正确的DNS后缀重建一个主机文件。PBS现在可以识别主机

现在麻烦的是:我生成的hosts文件没有正确地传递给mpiexec。有关我传递的主机文件以及MPI进程的输出,请参见下文

我的主机文件:

cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-2-2.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
cx1-25-3-1.cx1.hpc.ic.ac.uk
MPI进程的输出:

Host   : "cx1-25-2-2.cx1.hpc.ic.ac.uk"
PID    : 32752
nProcs : 24
Slaves : 
23
(
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32753"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32754"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32755"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32756"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32757"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32758"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32759"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32760"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32761"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32762"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32763"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32764"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32765"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32766"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.32767"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.316"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.319"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.320"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.321"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.322"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.323"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.324"
"cx1-25-2-2.cx1.hpc.ic.ac.uk.325"
)
进程列表是否应与主机文件相同?为什么mpiexec不接受主机文件

实现是OpenMPI 1.6.0,我的PBS脚本的MWE如下所示:

#!/bin/sh
#PBS -l walltime=40:00:00
#PBS -l select=2:ncpus=12:mpiprocs=24:mem=4gb

module load openfoam/2.3.0 libscotch
pbsdsh2 cp -r $INPUT_DIR $TMPDIR/ 2>&1

# setting up hosts file
sed -n 1~24p $PBS_NODEFILE > hosts_buffer
for ii in `cat hosts_buffer`; do echo ${ii}.cx1.hpc.ic.ac.uk slots=12; done > hosts
nprocs=24;

# execution
mpiexec --hostfile hosts -np $nprocs $SOLVER 2>&1

我想你需要跳过12行

sed -n 1~12p $PBS_NODEFILE > hosts_buffer

我还注意到你的主文件只有23行

您也可以这样尝试:

cd  $PBS_O_WORKDIR
mpiexec -hostfile $PBS_NODEFILE  -np  `wc -l < $PBS_NODEFILE` $SOLVER 2>&1

我认为问题与你的PBS指令有关

尝试从以下位置更改:

    #PBS -l select=2:ncpus=12:mpiprocs=24:mem=4gb
致:

这样,您可以请求PBS为每个节点生成12个进程,而不是以前的24个进程。 我认为您不需要重新生成主机文件。 只需按以下方式运行代码:

    mpiexec -hostfile $PBS_NODEFILE -np 24 $SOLVER 2>&1

希望这样就可以了。

请包括您的pbs脚本,以及您使用的MPI实现,它是通过所谓的与pbs紧密集成的方式编译的吗?Open MPI可以在支持tm PBS API的情况下进行编译,因此它可以使用tm接口获取有关主机列表的信息并在远程节点上启动进程。要检查您的MPI是否为OpenMPI,只需发出:mpicc-showme:version,它应该打印OpenMPI的版本。MPI实现为OpenMPI 1.6.0。-我没有运行mpicc-showme:version,因为如果不是在PBS环境中,它将不会运行,而且队列非常长,但我加载了模块,看到$MPI_ARCH_PATH和$MPI_LIBS指向OpenMPI 1.6.0的位置。至于compile标志,一个快速的ompi|u info | grep tm显示了MCA ras:tm MCA v2.0、API v2.0、Component v1.6 MCA plm:tm MCA v2.0、API v2.0、Component v1.6 MCA ess:tm MCA v2.0、API v2.0、Component v1.6I尝试了uniq方法,我同意这种方法更干净,但仍然得到了日志中与同一节点对应的所有从机,如操作中所示。您建议的第二种方法产生一个错误,即OpenFOAM找不到主控制字典。->泡沫致命IO错误:在第0行找不到文件:/tmp/pbs.7477357.cx1b/system/controlDict。来自文件db/regIOobject/regIOobjectRead.C第73行的函数regIOobject::readStream。泡沫排出
    #PBS -l select=2:ncpus=12:mpiprocs=12:mem=4gb
    mpiexec -hostfile $PBS_NODEFILE -np 24 $SOLVER 2>&1