首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在进口几个特定包后,mpirun无法工作。

在进口几个特定包后,mpirun无法工作。
EN

Stack Overflow用户
提问于 2022-08-28 03:23:14
回答 1查看 68关注 0票数 0

我有两个python脚本,一个正在使用os模块在另一个脚本中使用mpi执行。这两个脚本的内容如下所示。让x包是制造麻烦的包,abc包是随机的包。我添加了命令"type mpirun“和"mpirun主机名”,以显示正在发生的变化。

runscript.py:

代码语言:javascript
复制
import os

# importing a normal package abc
import abc
os.system("type mpirun")
os.system("mpirun hostname")
os.system("mpirun -n 5 python hello.py")

# importing package x
import x
os.system("type mpirun")
os.system("mpirun hostname")
os.system("mpirun -n 5 python hello.py")

hello.py:

代码语言:javascript
复制
from mpi4py import MPI
import x
comm = MPI.COMM_WORLD
print(comm.rank)

命令"python runscript.py“的输出:

代码语言:javascript
复制
mpirun is /home/pavan/packages/openmpi-4.0.7/opt-gfortran/bin/mpirun
skynet
skynet
skynet
skynet
skynet
skynet
skynet
skynet
skynet
skynet
2
3
4
1
0
mpirun is /home/pavan/packages/openmpi-4.0.7/opt-gfortran/bin/mpirun

在输出中可以看到,如果我导入特定的包,“”不会打印任何内容,hello.py脚本也不会被执行,但是"type mpirun“将打印openmpi的相同位置。我不知道为什么导入特定的包会导致这个问题。当我导入一个随机包abc时,不会发生这种情况。

另外,请注意,由mpirun执行的脚本也导入了特定的包x,但是脚本被正确执行。这个问题只发生在runscript.py中。

任何对这个奇怪错误的帮助都将不胜感激!另外,当“”命令没有输出任何内容时,意味着什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-28 03:57:32

我怀疑根本原因是包x imports MPI (从mpi4py)。

在幕后,这意味着您的程序首先开始作为一个顺序程序,因此它是有效的system("mpirun ...")

一旦导入了MPI (通过包x间接导入),runscript.py就变成了MPI单例,不再允许“`system”(“mpirun.”)。

import x之前,可以插入以下行

代码语言:javascript
复制
import mpi4py
mpi4py.rc.initialize=False
mpi4py.rc.finalize=False

看看是否有用。

请注意,这对我来说适用于一个简单的测试,但是如果它(间接地)发出诸如访问x之类的MPI调用,它将“破坏”包MPI.COMM_WORLD.rank。

下面的程序说明了这一点。

代码语言:javascript
复制
import os
os.system("mpirun -n 1 hostname")

print('after mpi4py')
# make sure `MPI_Init()` is not invoked under the hood
import mpi4py
mpi4py.rc.initialize=False
mpi4py.rc.finalize=False

from mpi4py import MPI

# since `mpi4py` was not initialized, the following call will crash the program if uncommented
#print(MPI.COMM_WORLD.rank)

os.system("mpirun -n 1 hostname")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73515776

复制
相关文章

相似问题

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