簡體   English   中英

導入幾個特定包后,mpirun 無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM