我正在尝试在PBS资源管理下的群集上运行MPI作业。群集指南说我不应该担心将任何内容传递给mpiexec
,因为PBS应该照顾它。对于单个节点上的作业,这是正确的,并且作业运行良好。
当我提交需要多个节点的作业时,作业将退出,表示无法识别主机。我在PBS脚本中包含了一个例程来解析$PBS_NODEFILE
,并使用正确的DNS后缀重建主机文件。 PBS现在识别主机。
现在出现了令人不安的部分:我生成的主机文件未正确传递给mpiexec
。请参阅下面,了解我传递的hosts文件以及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
答案 0 :(得分:0)
我认为你需要跳过12行
sed -n 1~12p $PBS_NODEFILE > hosts_buffer
或
uniq $PBS_NODEFILE > hosts_buffer
我还注意到你的主机文件只有23行。
你也可以这样试试:
cd $PBS_O_WORKDIR
mpiexec -hostfile $PBS_NODEFILE -np `wc -l < $PBS_NODEFILE` $SOLVER 2>&1
答案 1 :(得分:0)
我认为这个问题与你的PBS指令有关。
尝试更改:
#PBS -l select=2:ncpus=12:mpiprocs=24:mem=4gb
到:
#PBS -l select=2:ncpus=12:mpiprocs=12:mem=4gb
这样,您请求PBS为每个节点生成12个进程,而不是之前的24个进程。 我认为您不需要重新生成主机文件。 只需将代码运行为:
mpiexec -hostfile $PBS_NODEFILE -np 24 $SOLVER 2>&1
应该这样做,希望如此。