跨节点MPI环境的两个问题

跨节点MPI环境的两个问题

💡 原文中文,约1500字,阅读约需4分钟。
📝

内容提要

本文记录了作者在多节点上部署和运行MPI程序时遇到的问题,包括安装MPI编译器和开发包、配置NFS文件系统、动态库加载和创建子通讯子等。作者通过编辑环境变量和使用IP地址解决了这些问题,并总结了部署多节点MPI环境的经验。成功运行程序没有耽误正常下班。

🔎

延伸解读

环境变量传递的陷阱

文章指出,mpiexec 声称会自动传递环境变量,但实际测试中 LD_LIBRARY_PATH 并未传递到其他节点,导致动态库加载失败。作者尝试在 ~/.bashrc 中配置也无效,最终通过 SSH 的 .ssh/environment 和 sshd_config 解决。这提醒我们,跨节点运行时不能完全依赖 mpiexec 的文档说明,需验证环境变量是否真正生效,并准备备用方案。

主机名与IP的差异

创建子通讯子时,使用主机名指定节点会导致 MPI_Comm_dup 崩溃,而改用 IP 地址则正常。单节点运行无此问题。作者发现多个 MPICH 版本均有此现象,怀疑是 bug 或设计如此。这提示在跨节点 MPI 环境中,若遇到通讯子相关崩溃,可尝试将主机名替换为 IP 地址,可能绕过问题。

部署多节点MPI的关键步骤

文章总结了部署多节点 MPI 的三个要点:在所有节点安装 MPI 环境(如 MPICH)、配置 NFS 共享文件系统以避免文件复制、设置节点间免密登录。这些步骤是运行跨节点 MPI 程序的基础,缺一不可。作者强调,即使现在多用集群,自行部署时仍需注意这些细节,否则容易遇到意外问题。

❓

Q&A

在多节点上部署MPI程序时需要注意哪些事项?

需要安装MPI编译器和开发包,推荐使用MPICH,并配置NFS文件系统以共享文件,设置免密登录。

如何解决跨节点MPI程序中的动态库加载问题?

可以通过创建.ssh/environment文件导出环境变量,并在/etc/ssh/sshd_config中设置PermitUserEnvironment为yes来解决。

为什么在使用mpiexec时需要使用IP地址而非主机名?

因为在某些情况下,使用主机名会导致程序崩溃,而使用IP地址则可以正常运行。

在部署MPI环境时,如何配置NFS文件系统?

主节点作为服务端,其它节点作为客户端,所有节点共享相同的路径以便进行文件读写。

在多节点MPI环境中,如何实现节点间的免密登录?

使用ssh-keygen生成公钥和密钥,然后使用ssh-copy-id将公钥分发到各个子节点。

作者在部署多节点MPI环境时遇到了哪些具体问题?

遇到的具体问题包括动态库加载问题和创建子通讯子时程序崩溃的问题。

🏷️

标签

➡️

继续阅读