在Jupyter笔记本中使用`mpirun`

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Jupyter笔记本中使用`mpirun`相关的知识,希望对你有一定的参考价值。

我有一个简单的C / MPI代码:

/* File: demo.c */
#include <stdio.h>
#include <mpi.h>

void main(int argc, char** argv)
{
    int my_rank,nprocs;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
    printf("Processor [%d] : Hello, World! (world=%d processor(s))
",my_rank,nprocs);
    MPI_Finalize();
}

当我在交互式Python shell中运行它时,我得到了预期的输出:

In [1]: !mpirun -n 4 demo
Processor [1] : Hello, World! (world=4 processor(s))
Processor [3] : Hello, World! (world=4 processor(s))
Processor [2] : Hello, World! (world=4 processor(s))
Processor [0] : Hello, World! (world=4 processor(s))

In [2]: 

但是,当我在Jupyter笔记本中运行相同的命令时,我得到了四个串行作业:

enter image description here

有没有更好的方法从笔记本中调用mpirun脚本?我已经尝试过%%bash魔法和子进程,但这些产生了相同的结果。

我有兴趣从笔记本电脑运行MPI代码作为收集运行时数据以存储和显示的简单方法。我对编写并行Python程序不太感兴趣。

我在OSX 10.13.2上运行Python 3.6.3(Anaconda)

答案

(部分)答案如下。由于我不完全理解的原因,Jupyter笔记本和交互式shell使用不同的搜索路径来查找mpirun

在IPython中:

In [1]: !type mpirun
mpirun is /opt/local/bin/mpirun

但在笔记本中,我有:

enter image description here

在bash提示符中使用此版本的mpirun,我得到:

(bash) $ /usr/local/Anaconda3/bin/mpirun -n 4 demo
Processor [0] : Hello, World! (world=1 processor(s))
Processor [0] : Hello, World! (world=1 processor(s))
Processor [0] : Hello, World! (world=1 processor(s))
Processor [0] : Hello, World! (world=1 processor(s))

从笔记本运行正确的版本,我得到了预期的结果。

enter image description here

我在两个版本(OpenMPI,由Anaconda安装)和MPICH(由MacPorts安装)之间存在不兼容性。使用mpicc从一个版本编译,并使用mpirun从另一个版本运行似乎是一个坏主意。

感谢@jakevdp为这个blog post指出了我正确的方向!

以上是关于在Jupyter笔记本中使用`mpirun`的主要内容,如果未能解决你的问题,请参考以下文章

pip 安装了 google.colab,现在无法在 Jupyter 笔记本上运行代码

将python文件导入jupyter笔记本

解决Jupyter notebook报错:AssertionError: wrong color format ‘var(--jp-mirror-editor-variable-color)‘(代码片

如何在从 docker 容器运行的 jupyter 笔记本中获取黑色代码格式?

在 jupyter/iPython notebook 脚本和类方法之间同步代码

如何在 Jupyter 笔记本中运行 Python asyncio 代码?