OpenMPI:简单的 2 节点设置

Posted

技术标签:

【中文标题】OpenMPI:简单的 2 节点设置【英文标题】:OpenMPI: Simple 2-Node Setup 【发布时间】:2014-05-20 11:15:34 【问题描述】:

我在仅使用两个节点运行 OpenMPI 程序时遇到了问题(其中一个节点是执行 mpiexec 命令的同一台机器,而另一个节点是一台单独的机器)。

我将调用运行 mpiexec、ma​​ster 的机器和另一个节点 slave

ma​​sterslave 上,我都在 ~/mpi

下的主目录中安装了 OpemMPI

我在 ma​​ster 上有一个名为 ~/machines.txt 的文件。

理想情况下,~/machines.txt 应该包含:

大师 奴隶

但是,当我在 ma​​ster 上运行以下命令时:

mpiexec -n 2 --hostfile ~/machines.txt 主机名

输出,我收到以下错误:

bash: orted: 找不到命令

但是如果 ~/maschines.txt 只包含运行命令的节点的名称,它就可以工作。 ~/machines.txt:

主人

命令:

mpiexec -n 2 --hostfile ~/machines.txt 主机名

输出:

大师大师

我尝试在 slave 上运行相同的命令,并将 machines.txt 文件更改为仅包含 slave,它也可以正常工作。我已确保我的 .bashrc 文件包含 OpenMPI 的正确路径。

我做错了什么?简而言之,只有当我尝试在远程机器上执行程序时才会出现问题,但我可以在执行命令的机器上完美地运行 mpiexec。这让我相信这不是路径问题。我错过了连接两台机器的步骤吗?我有从主机到从机的无密码 ssh 登录功能。

【问题讨论】:

如果你在~/mpi 下安装了MPI,那么我猜你已经将~/mpi 添加到PATH 里面的.bashrc 或其他东西。不要假设在运行 MPI 的每台机器上都加载了 .bashrc 是的,我在两台机器的 PATH 和 lib LD_LIBRARY_PATH 中都添加了 bin。 【参考方案1】:

使用 --prefix 选项显式设置绝对 OpenMPI 前缀:

prompt> mpiexec --prefix=$HOME/mpi ...

或使用绝对路径调用mpiexec

prompt> $HOME/mpi/bin/mpiexec ...

后一个选项自动设置前缀。然后使用前缀在远程机器上设置PATHLD_LIBRARY_PATH

【讨论】:

我尝试了这两种方法。它适用于在同一台机器上执行,但是当我尝试在另一台机器上执行时,它会等待大约 5 秒然后停止而没有任何输出。我正在运行“主机名”程序,所以我期待那里有远程机器的主机名,但它没有出现。似乎它正在登录另一台机器,因为它确实在终止前等待了 5 秒。【参考方案2】:

此错误消息意味着您没有在远程计算机上安装 Open MPI,或者您没有在远程计算机上正确设置 PATH 以进行非交互式登录(即,它无法找到在远程机器上安装 Open MPI)。 “orted”是 Open MPI 用来在远程节点上启动进程的辅助可执行文件之一——所以如果没有找到“orted”,那么它甚至没有达到尝试在远程启动“主机名”的地步节点。

请注意,您的 shell 启动文件(例如,在您的 .bashrc 中)中的交互式登录和非交互式登录之间可能存在差异。

还请注意,将 Open MPI 安装在所有节点上的相同路径位置要简单得多——这样,上述前缀方法将在远程节点上执行时自动添加正确的 PATH 和 LD_LIBRARY_PATH,并且您不必处理您的 shell 启动文件。

请注意,在 Open MPI 主网站上有大量关于此类主题的常见问题解答。

【讨论】:

这是我的 .bashrc 文件在 master 上的样子:pastebin.com/JTCZzpWs 这是它在 slave 上的样子:pastebin.com/TDSZiFUz 我在这里没有看到任何问题。你?我正在使用 Ubuntu。 当您运行非交互式 ssh 命令时,您是否 100% 确定您的 $HOME/.bashrc 正在执行?例如,“ssh master uptime”和“ssh slave uptime”?您可能希望在 $HOME/.bashrc 中添加 echo 语句以进行验证。 但是,当我将 echo "Welcome" 放在 .bashrc 文件的底部时,它不会输出 "Welcome"。嗯... 如果将导出语句移动到 .bashrc 的顶部有效,这意味着 .bashrc 中的内容比您放入 pastebin 输出的内容要多。 .bashrc 中的交互式和非交互式登录之间可能存在差异——这可能是罪魁祸首(以及为什么将它们向上移动)。至于没有输出,是的,防火墙可能是一个问题,请参阅:open-mpi.org/faq/?category=running#diagnose-multi-host-problems【参考方案3】:

尝试编辑文件

/etc/环境

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home /hadoop/openmpi_install/bin" LD_LIBRARY_PATH=/home/hadoop/openmpi_install/lib

【讨论】:

【参考方案4】:

这个答案来得太晚了但是对于linux用户来说,在~/.bashrc文件末尾添加环境变量是一个坏习惯,因为仔细看顶部,你会注意到一个if函数退出if in非交互模式,这正是您通过 ssh 主机编译程序的方式。所以把你的环境变量放在文件的顶部,然后退出 if

【讨论】:

以上是关于OpenMPI:简单的 2 节点设置的主要内容,如果未能解决你的问题,请参考以下文章

DCOM 和 OpenMPI

OpenMPI 中的动态节点

OpenMPI 节点和网络拓扑

MPICH/OpenMPI 中的容错

如何指定 OpenMPI 使用的端口范围?

使用 OpenMPI 进行数据分发