在 HPC 集群上使用 python 代码 (mpi4py) 提交作业

Submit job with python code (mpi4py) on HPC cluster

我正在使用 MPI (mpi4py) 编写 python 代码,我想在一个队列中跨多个节点(每个节点有 16 个处理器)实现我的代码在 HPC 集群中。

我的代码结构如下:

from mpi4py import MPI

comm = MPI.COMM_WORLD 
size = comm.Get_size()
rank = comm.Get_rank()

count = 0
for i in range(1, size):
    if rank == i:
        for j in range(5):
            res = some_function(some_argument)
            comm.send(res, dest=0, tag=count) 

能够使用命令

在集群的头节点上运行这段代码完全正常
$mpirun -np 48 python codename.py

此处 "code" 是 python 脚本的名称,在给定的示例中,我选择了 48 个处理器。在头节点上,对于我的特定任务,作业大约需要 1 秒才能完成(并且它成功地给出了所需的输出)。

但是,当我 运行 尝试提交与 HPC 集群队列之一上的作业完全相同的代码时,它会保持 运行ning 很长时间很长时间(许多小时)(未完成),我必须在一天左右后手动终止工作。此外,它没有给出预期的输出。

这是我正在使用的 pbs 文件,

#!/bin/sh

#PBS -l nodes=3:ppn=16 
#PBS -N phy
#PBS -m abe
#PBS -l walltime=23:00:00
#PBS -j eo
#PBS -q queue_name

cd $PBS_O_WORKDIR
echo 'This job started on: ' `date`

module load python27-extras
mpirun -np 48 python codename.py

我使用命令qsub jobname.pbs提交作业。

我很困惑为什么代码在头节点上 运行 完全没问题,但是当我将此作业提交给 运行 跨多个代码时 运行 却遇到了这个问题队列中的处理器。我假设我可能需要更改 pbs 脚本。如果有人可以建议我应该如何处理 运行 这样的 MPI 脚本作为 HPC 集群中队列上的作业,我将非常感激。

不需要更改我的代码。这是有效的 pbs 脚本。 =)

显然,我需要在作业脚本中调用适当的 mpirun,以便当代码在集群中运行时,它使用与在头节点中使用的相同的 mpirun。

这是造成差异的行:/opt/intel/impi/4.1.1.036/intel64/bin/mpirun

这是有效的作业脚本。

#!/bin/sh

#PBS -l nodes=3:ppn=16
#PBS -N phy
#PBS -m abe
#PBS -l walltime=23:00:00
#PBS -j eo
#PBS -q queue_name

cd $PBS_O_WORKDIR
export OMP_NUM_THREADS=16
export I_MPI_PIN=off
echo 'This job started on: ' `date`

/opt/intel/impi/4.1.1.036/intel64/bin/mpirun -np 48 python codename.py