如何在PyCharm中使用mpiexec运行带有mpi4py的Python脚本?

6

我有一个依赖mpi4py的MPI实现的Python脚本。

需要通过mpiexec(或mpirun)运行。

我的问题是:如何直接从PyCharm使用mpiexec(或mpirun)来运行(并希望调试)Python脚本?

作为外部工具运行mpiexec并不是一个好主意,因为我将无法进行调试。

我应该怎么办呢?


你无法从PyCharm运行Python脚本吗? - PySaad
我可以运行任意脚本,但我需要使用mpiexec来运行它。我会修改问题以反映这一点。 - Amr ALHOSSARY
1个回答

8
我看到两种在PyCharm中调试mpi4py脚本的方式,还有一种涉及Visual Studio。

两种方法都很痛苦,因为与Visual Studio相反,PyCharm并不是设计成这个阶段MPI应用程序的调试IDE。

第一种选项(最少痛苦):您需要 PyCharm Professional 2019
我们将使用 PyCharm Professional 的远程调试功能。
启动 PyCharm 创建一个项目,然后转到 Run->Edit Configurations,在那里您会找到一个 Python 远程调试的模板(这是 PyCharm professional 的专属功能)。创建一个 : 将端口保持为 0 并勾选允许并行运行。 Edit conf MPI 点击 Apply 并返回主屏幕。
如果你点击
Click debug
您将看到此控制台,调试服务器正在等待连接;请注意它将要通信的端口(在我的情况下为 64777): Console1 单击mpi进程所需的次数,并每次记录端口。这是令人厌烦的部分。

在我的示例中,我将运行 4 个进程,因此单击了四次并得到了[64777, 64890, 64891, 64893]

现在开始调试您要调试的脚本:

from mpi4py import MPI
import time
import os
size=MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
import pydevd_pycharm
port_mapping=[65117, 65118, 65119, 65115]
pydevd_pycharm.settrace('localhost', port=port_mapping[rank], stdoutToServer=True, stderrToServer=True)

print os.getpid()


if(rank==0):
    print size, rank
    print 'go boy go !!!'
else:
    print size, rank
    print 'run Forrest...'

看我如何报告端口。

现在打开终端并执行:
执行命令

你已经可以开始调试了,在所有进程的pydevd_pycharm.settrace后自动设置断点。
端口65117上的调试控制台,进程等级为0 控制台1
端口65118上的调试控制台,进程等级为1 控制台2
控制台2调试

就是这样,除了步骤和执行不同步,所以有些痛苦,但如果你想调试send recv,这也可以解决问题。

第二个选项(非常繁琐):你拥有PyCharm Community 2019

在你的脚本开头,打印出进程的PID,并设置延时以便你有时间附加每个进程。

from mpi4py import MPI
import time
import os
size=MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()

print os.getpid()
sys.stdout.flush()
time.sleep(200)

if (rank == 0):
    print size, rank
    print 'go boy go !!!'
else:
    print size, rank
    print 'run Forrest...'

运行
执行
在此输入图像说明
(在我的例子中,你只有200秒的时间),进入Run->Attach to process,并选择您想要调试的进程,并知道PID(因此是print os.getpid()在此输入图像说明 在此输入图像说明

那么你就没问题了。

第三个选项:

购买安装有Window Server 2012的PC。

安装Visual Studio 2019 + PTVS(Python for Visual Studio)扩展

安装HPC Pack / SDK 2016

按照此教程:YouTube教程PTVS with MPI,并发现使用Visual Studio调试Python(以及同时封装的C ++ / C)的好处。
抱歉打广告,但微软团队确实在这方面做出了努力…
唯一不足的是必须将HPC Server的头节点强制放置在Window Server 2012下,但无论如何…


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接