![](/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.