首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HPC集群上使用python代码(mpi4py)提交作业

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

Stack Overflow用户
提问于 2017-05-25 04:43:13
回答 1查看 3.4K关注 0票数 4

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

我的代码结构如下:

代码语言:javascript
复制
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) 

我是,可以使用命令在集群的头节点上很好地运行这段代码

代码语言:javascript
复制
$mpirun -np 48 python codename.py

这里的“代码”是python脚本的名称,在给定的示例中,我选择了48个处理器。在head节点上,对于我的特定任务,任务大约需要1秒才能完成(并且它成功地提供了所需的输出)。

但是,当我运行时,尝试在HPC集群的一个队列上提交与作业相同的代码,它会持续运行很长一段时间(许多小时)(没有完成),我不得不在一天左右之后手动关闭作业。而且,它没有给出预期的输出。

这是我使用的pbs文件,

代码语言:javascript
复制
#!/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脚本,我将非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-26 02:15:55

不需要改变我的代码。这是pbs脚本起作用了。=)

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

这是区别所在的行:/opt/intel/impi/4.1.1.036/intel64/bin/mpirun

这就是起作用的作业脚本。

代码语言:javascript
复制
#!/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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44172413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档