2017-09-15 125 views
5

所以我有一个gmsh troberle。如何从Jupyter笔记本电脑运行兼容MPI的应用程序?

直接执行工作正常:

!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是 unabl e找到任何相关的网络接口:\ n \ n模块:OpenFabrics (openib)\ n主机:931136e3f6fe \ n \ n另一个传输将用 代替,尽管这可能会导致\ nlower 的性能。\ n ---- -------------------------------------------------- -------------------- \ n \ x1b [1m \ x1b [31mFatal:无法打开显示:(FLTK内部 错误)\ x1b [0m \ n- -------------------------------------------------- ----------------------- \ nMPI_ABORT在通信器MPI_COMM_WORLD \ n的第0级被调用,错误代码为 1. \ n \ n注意:调用MPI_ABORT会导致Open MPI to杀死所有的MPI进程。\ n您可能会或可能不会看到其他进程输出, 取决于\ nexactly开放MPI杀死 他们的时候。\ n ------------------- -------------------------------------------------- ----- \ n“

因此,如何从Python 3的代码仿效jupyter !执行?


@Hristo:

_ = /选择/康达/ bin中/ jupyter SHLVL = 1个PATH = /选择/康达/ bin中:/选择/康达/ bin中:在/ usr /本地/ sbin目录:在/ usr/local/bin中:/ usr/sbin目录:在/ usr/bin中:/ sbin目录:/ bin中 HOSTNAME = 931136e3f6fe HOME = /根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: 同样的结果。

+0

你能'出口OMPI_MCA_btl =^openib'然后再试一次 ?很难判断根本原因是infiniband(MPI)还是显示问题(可能与应用程序有关) –

+0

它抱怨它无法打开到显示服务器的连接,这意味着“DISPLAY”环境变量不是正确设置。尝试以'[“env”,“env DISPLAY =:0 gmsh -3 -algo ...”]运行命令''。在图形终端上执行'echo $ DISPLAY'来获得适当的值。如果Jupyter服务器在另一个帐户下运行,除非在终端中发出'xhost +'(危险 - 禁用显示服务器身份验证),否则它可能不起作用。如果Jupyter运行在不同的主机上,它可能根本无法工作。 –

回答

1

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

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

从Open MPI 3.0.0开始,你可以用 export OMPI_MCA_mca_base_env_list=DISPLAY 开始你Jupyter笔记本

顺便说一句,应该你的应用程序需要打开X显示前实现这一目标? 如果它不做任何图形,那么它可以调整到无法显示时可以正常工作。

[附录]

的其他可能性是gmsh认为由于DISPLAY被设定的显示是可用的,所以它试图将其打开和失败。你可以尝试设置该环境变量,看看事情如何,无论是在命令行(如互动模式),并通过笔记本电脑(如模式)

相关问题