本地主机上没有 MPI 的容器中的 MPI

标签 mpi singularity-container

背景: 我已在 Singularity 容器中成功创建基于 MPI 的应用程序,并使用 Singularity 文档推荐的混合模式执行它们。这要求我在容器和主机 O/S 上都安装了 MPI 的“兼容”版本。我理解如果我要跨多个节点运行作业,为什么这是必要的。

但在我们的用例中,我们的互连速度较慢,因此在多个节点上运行作业对我们来说几乎没有任何意义。混合模式迫使我跟踪每个容器中内置的 MPI 的每个版本,这些容器可能会用于确保主机操作系统上提供正确的 MPI。我首先使用容器的全部原因是为了避免不得不处理这种版本依赖性的麻烦。

我的问题: 如果我可以接受 MPI 应用程序只能在单个物理节点内执行的限制,那么我有没有办法在不依赖于在主机 O/S 上安装任何东西的 Singularity 容器中构建 MPI 应用程序?

最佳答案

我不是最擅长 MPI 的,但如果您不尝试与其他节点(或同一计算节点上其他进程产生的作业)通信,您应该能够使用singularity exec mpi_image.sif mpirun ....

修改您的 Singularity 定义以能够 run the image as an instance 也可能很有用。 .它使 singularity 的行为更像 Docker,允许您通过 singularity shell 进入运行的执行环境。这极大地简化了在执行未很好记录的事情时的调试。

关于本地主机上没有 MPI 的容器中的 MPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60151542/

相关文章:

c - MPI简单数据传输程序

hpc - Singularity 容器中的文件所有权和权限

docker - Snakemake 奇点与本地资源/关于 Snakemake 与 --use-singularity 的问题

MPI "hello world"编译失败

c - MPI 与 C : Communication time

c - 声明数组时出现段错误

gcc - 编译 FFTW 时出现问题

ubuntu-18.04 - 在 Singularity 容器中安装 TinyTeX

R 用矩形而不是文本绘制绘图

docker - 在 Singularity 中运行 Docker 镜像时绑定(bind)端口