如何从Jupyter笔记本电脑运行MPI兼容的应用程序?

Duc*_*een 5 python process mpi execution jupyter-notebook

所以我有一个小册子gmsh.

直接执行工作正常:

!gmsh -3 -algo meshadapt tmp_0.geo -o SFM.msh
Run Code Online (Sandbox Code Playgroud)

从代码执行失败时:

try:
    out = subprocess.check_output(
            ["gmsh", "gmsh -3 -algo meshadapt tmp_0.geo -o SFM.msh"],
            stderr=subprocess.STDOUT
            ).strip().decode('utf8')
except subprocess.CalledProcessError as e:
    out = e.output
print(out)
Run Code Online (Sandbox Code Playgroud)

有:

B"------------------------------------------------ -------------------------- \n [[23419,1],0]:高性能Open MPI点对点消息传递module \n无法找到任何相关的网络接口:\n \n模块:OpenFabrics(openib)\n主机:931136e3f6fe \n \n将使用另一种传输方式,但这可能会导致性能下降.\n ---- -------------------------------------------------- -------------------- \n\x1b [1m\x1b [31mFatal:无法打开显示:(FLTK内部错误)\ x1b [0m \n-- -------------------------------------------------- ---------------------- \n \nMPI_ABORT在通讯器MPI_COMM_WORLD \n中的等级0上被调用,错误代码为1. \n \n注意:调用MPI_ABORT导致Open MPI全部杀死MPI进程.\n您可能会也可能看不到其他进程的输出,具体取决于Open MPI何时杀死它们.\n ----------------------- -------------------------------------------------- - \n"

那么如何!在Python 3代码中模拟jupyter中的执行呢?


@Hristo:

_ =/opt/conda/bin/jupyter SHLVL = 1 PATH =/opt/conda/bin:/ opt/conda/bin:/ usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin HOSTNAME = 931136e3f6fe HOME =/root LC_ALL = C.UTF-8 PWD =/JPY_PARENT_PID = 1 LANG = C.UTF-8 TERM = xterm-color CLICOLOR = 1 PAGER = cat GIT_PAGER = cat MPLBACKEND = module://ipykernel.pylab.backend_inline env DISPLAY =:0 gmsh -3 -algo meshadapt tmp_0.geo -o SFM.msh

@Gilles:结果相同.

Gil*_*det 1

看来根本原因是$DISPLAY环境变量没有设置。

首先确保$DISPLAY在 Jupyter 笔记本启动时进行设置。您可能还必须直接mpirun将其导出到所有 MPI 任务。

export OMPI_MCA_mca_base_env_list=DISPLAY 从 Open MPI 3.0.0 开始,您可以在启动 Jupyter Notebook 之前实现此目的

顺便问一下,您的应用程序需要打开 X 显示吗?如果它不做任何图形,那么可以将其调整为在没有可用显示时正常工作。

[附录]

另一种可能性是,gmsh由于已设置,因此认为显示可用DISPLAY,因此尝试打开它但失败。您可以尝试取消设置此环境变量,并通过命令行(例如交互模式)和笔记本(例如批处理模式)查看事情进展情况