python - 如何从pycharm中使用mpi4py(使用mpiexec)运行python脚本?

标签 python parallel-processing pycharm mpi mpi4py

我有一个依赖于 MPI 的 mpi4py 实现的 python 脚本。
这需要通过 mpiexec(或 mpirun)运行。

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

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

我可以做什么?

最佳答案

我看到了两种使用 pycharm 调试 mpi4py 脚本的方法,以及一种涉及 Visual Studio 的方法。

两者都非常痛苦,因为 PyCharm 在现阶段并不是真的要成为与 Visual Studio 不同的 MPI 应用程序的调试 IDE。

第一种选择(痛苦较小):您拥有 PyCharm Professional 2019
我们将使用 PyCharm 专业版的远程调试器功能。
启动 PyCharm 创建一个项目,然后转到 Run->Edit Configurations,在那里你会找到一个 Python Remote Debug 的模板(这是 PyCharm 专业版保留的功能)。创建一个:将端口保留为 0 并勾选允许并行运行。
Edit conf MPI
单击应用并返回主屏幕。
如果你点击
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...'

看看我是如何报告端口的。

现在打开一个终端并执行:
executing

并且您已启动并运行,在 pydevd_pycharm.settrace 之后设置了一个自动断点。在所有过程中。
端口 65117 上的调试控制台,等级 0 上的进程
Console 1
端口 65118 上的调试控制台,等级 1 上的进程
Console 2
Console 2 debug

就是这样,除了步进和执行不同步所以很痛苦但如果你想调试 send recv它可能会奏效。

第二种选择(非常痛苦):你有 PyCharm 社区 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...'


executing
enter image description here
(很快,在我的示例中,您只有 200 秒),转到 Run -> Attach to process 并选择要调试的进程,知道 PID(因此是 print os.getpid() )
enter image description here
enter image description here

你应该没事的。

第三个选项:

购买装有 Window Server 2012 的 PC。

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

安装 HPC 包/SDK 2016

按照本教程:YouTube tutorial PTVS with MPI并发现使用 Visual Studio 调试 Python(同时封装 C++/C)的好处。
很抱歉宣传,但微软团队确实在这方面做出了努力......
只强制您的 HPC Server 的头节点在 Window Server 2012 下是一个无赖,但无论如何......

关于python - 如何从pycharm中使用mpi4py(使用mpiexec)运行python脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57519129/

相关文章:

python - Django Celery 任务队列

python - 如何从 confluent_python AVRO 消费者获取最新的偏移值

algorithm - 如何通过移植 FPGA 算法来估计 GPU FLOPs?

linux - Selenium ::WebDriver::Error with Firefox & Chrome

python - Selenium Chrome 驱动程序 - 语法错误 : (unicode error) 'unicodeescape' codec

python - 在 PyCharm 中为 Python 突出显示更复杂的语法?

python - simplejson 返回值不按顺序

python - 检查字符串是否在列表中,具体取决于最后两个字符

R optimParallel - 找不到函数

python - 如何在 pycharm 包安装中添加 --trusted-host?