![](/img/trans.png)
[英]ModuleNotFoundError for several packages after importing in editable mode
[英]mpirun not working after importing few specific packages
我有两个 python 脚本,一个正在使用 os 模块在另一个脚本中使用 mpi 执行。 两个脚本的内容如下所示。 让 package x 成为造成麻烦的那个,而 package abc 是随机的 package。 我添加了命令“type mpirun”和“mpirun hostname”来显示正在发生的变化。
运行脚本.py:
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")
你好.py:
from mpi4py import MPI
import x
comm = MPI.COMM_WORLD
print(comm.rank)
命令“python runscript.py”的Output:
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
从 output 中可以看出,如果我导入特定的 package,“mpirun 主机名”不会打印任何内容,并且 hello.py 脚本也不会执行,但“type mpirun”正在为 openmpi 打印相同的位置。 我不知道为什么导入特定的 package 会导致这个问题。 当我导入随机 package abc 时,不会发生这种情况。
另外,请注意,mpirun 正在执行的脚本也在导入特定的 package x,但脚本执行正确。 该问题仅发生在 runscript.py
对此奇怪错误的任何帮助将不胜感激,? 另外,当“mpirun 主机名”命令没有 output 什么时,这是什么意思?
我怀疑根本原因是 package x
进口MPI
(来自mpi4py
)。
在引擎盖下,这意味着您的程序首先作为顺序程序启动,因此它对system("mpirun...")
有效。
一旦MPI
被导入(间接通过 package x
), runscript.py
就变成了 MPI singleton 并且不再允许`system("mpirun...")。
在import x
之前,您可以插入以下行
import mpi4py
mpi4py.rc.initialize=False
mpi4py.rc.finalize=False
看看它是否有帮助。
请注意,这适用于我的简单测试,但如果它(间接)发出 MPI 调用(例如访问 MPI.COMM_WORLD.rank),则会“破坏”package x
。
下面的程序说明了这一点。
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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.