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

6

我有一个与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)

with:

b"--------------------------------------------------------------------------\n[[23419,1],0]: 一个高性能的 Open MPI 点对点消息模块无法找到任何相关的网络接口:\n\n模块: OpenFabrics (openib)\n 主机: 931136e3f6fe\n\n将使用另一种传输方式,尽管这可能会导致性能降低。\n--------------------------------------------------------------------------\n\x1b[1m\x1b[31m致命错误: 无法打开显示器: (FLTK 内部错误)\x1b[0m\n--------------------------------------------------------------------------\nMPI_ABORT 在通信器 MPI_COMM_WORLD 中的秩 0 上被调用,并带有错误码 1。\n\n注意:调用 MPI_ABORT 会导致 Open MPI 杀死所有 MPI 进程。您可能会看到其他进程的输出,也可能不会看到,具体取决于 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: 相同的结果。


你能否执行 export OMPI_MCA_btl=^openib 并再次尝试?很难确定根本原因是Infiniband(MPI)还是显示问题(可能与应用程序相关)。 - Gilles Gouaillardet
它抱怨无法打开到显示服务器的连接,这意味着DISPLAY环境变量未正确设置。尝试以["env", "env DISPLAY=:0 gmsh -3 -algo ..."]命令运行。在图形终端中执行echo $DISPLAY以获取正确的值。如果Jupyter服务器在不同的帐户下运行,则可能无法正常工作,除非在终端中发出xhost +(危险-禁用显示服务器身份验证)。如果Jupyter在不同的主机上运行,则很可能根本无法工作。 - Hristo Iliev
1个回答

1
似乎根本原因是未设置$DISPLAY环境变量。 首先确保在启动Jupyter笔记本时已经设置了$DISPLAY。 您还可能需要指示mpirun将其导出到所有MPI任务中。 从Open MPI 3.0.0开始,您可以通过以下方式实现这一点: export OMPI_MCA_mca_base_env_list=DISPLAY 在启动Jupyter笔记本之前。 顺便说一句,如果应用程序需要打开X显示器怎么办? 如果不进行任何图形操作,则可以调整以在没有显示器可用时正确工作。 [补充] 另一种可能性是gmsh认为显示器可用,因为设置了DISPLAY,所以尝试打开它并失败。 您可以尝试取消设置此环境变量,然后查看事情的进展,无论是通过命令行(例如交互模式)还是通过笔记本(例如批处理模式)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接