【问题标题】:Using `mpirun` within a Jupyter notebook在 Jupyter 笔记本中使用“mpirun”
【发布时间】:2018-02-10 18:47:47
【问题描述】:

我有一个简单的 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))\n",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 笔记本中运行相同的命令时,我得到了四个串行作业:

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

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

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

【问题讨论】:

    标签: ipython mpi jupyter-notebook jupyter


    【解决方案1】:

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

    在 IPython 中:

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

    但在笔记本中,我有:

    在 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))
    

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

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

    感谢@jakevdp 提供的blog post,它为我指明了正确的方向!

    【讨论】:

    • 我尝试过同样的事情,但我根本没有得到任何输出。我已经检查以确保 mpicc 和 !test mpirun 提供相同的 mpi 版本,但我不知道为什么单元格显示它已成功运行而根本没有输出。在运行上述之前,您是否为 jupyter notebook 修改了一些参数?
    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多