我正在工作带有 MPI 的 python 代码 (mpi4py)我想在 HPC 集群的队列中跨多个节点(每个节点有 16 个处理器)实现我的代码。
我的代码结构如下:
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)
I am 能够在头节点上完美运行此代码使用命令的集群
$mpirun -np 48 python codename.py
这里的“code”是 python 脚本的名称,在给定的示例中,我选择 48 个处理器。在头节点上,对于我的特定任务,该作业大约需要 1 秒才能完成(并且它成功地给出了所需的输出)。
然而,当我run 尝试将完全相同的代码作为 HPC 集群队列之一上的作业提交,它会持续运行很长时间(很多小时)(未完成)并且我必须在一天左右后手动终止该工作。此外,它没有给出预期的输出。
这是我正在使用的 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 作业名.pbs提交作业。
我很困惑为什么代码应该在头节点上完美运行,但是当我提交此作业以在队列中的多个处理器上运行代码时遇到这个问题。我认为我可能需要更改 pbs 脚本。如果有人能建议我应该做什么来将这样的 MPI 脚本作为 HPC 集群中的队列上的作业来运行,我将非常感激。