我正在使用MPI (mpi4py)编写mpi4py python代码,并且我希望在一个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) 我是,可以使用命令在集群的头节点上很好地运行这段代码
$mpirun -np 48 python codename.py这里的“代码”是python脚本的名称,在给定的示例中,我选择了48个处理器。在head节点上,对于我的特定任务,任务大约需要1秒才能完成(并且它成功地提供了所需的输出)。
但是,当我运行时,尝试在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 jobname.pbs来提交作业。
我不明白为什么代码应该在head节点上运行得非常好,但是当我提交这个作业以便在队列中的许多处理器上运行代码时,就会遇到这个问题。我假设我可能需要修改pbs脚本。如果有人能建议我如何在HPC集群中的队列上运行这样一个MPI脚本,我将非常感激。
发布于 2017-05-26 02:15:55
不需要改变我的代码。这是pbs脚本起作用了。=)
显然,我需要在作业脚本中调用适当的mpirun,这样当代码在集群中运行时,它使用的mpirun与head节点中使用的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.pyhttps://stackoverflow.com/questions/44172413
复制相似问题