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

时间:2017-09-15 13:44:31

标签: python process mpi jupyter-notebook execution

所以我有gmsh的片段。

直接执行正常:

!gmsh -3 -algo meshadapt tmp_0.geo -o SFM.msh

从代码执行失败时:

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)

使用:

  

B“--------------------------------------------- ----------------------------- \ n [[23419,1],0]:一个高性能的Open MPI指向点消息传递模块\ n   无法找到任何相关的网络接口:\ n \ n模块:OpenFabrics   (openib)\ n主机:931136e3f6fe \ n \ n将使用其他传输方式   相反,虽然这可能导致\ nlower   性能。\ n ---------------------------------------------- ---------------------------- \ n \ x1b [1m \ x1b [31mFatal:无法打开显示:(FLTK内部)   误差)\ X1B [0米\ n ------------------------------------------ -------------------------------- \ n \ nMPI_ABORT在通讯器MPI_COMM_WORLD \ n中的等级0上被调用,带有错误代码   1. \ n \ n注意:调用MPI_ABORT会导致Open MPI终止所有MPI进程。\ n您是否可能看到其他进程的输出,   当Open MPI杀死时,依赖于\ nexactly   它们。\ 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: 结果相同。

1 个答案:

答案 0 :(得分:1)

似乎根本原因是未设置$DISPLAY环境变量。

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

从Open MPI 3.0.0开始,您可以实现此目的 export OMPI_MCA_mca_base_env_list=DISPLAY 在开始你的Jupyter笔记本之前

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

<强> [附录]

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