OpenMPI:简单的 2 节点设置
Posted
技术标签:
【中文标题】OpenMPI:简单的 2 节点设置【英文标题】:OpenMPI: Simple 2-Node Setup 【发布时间】:2014-05-20 11:15:34 【问题描述】:我在仅使用两个节点运行 OpenMPI 程序时遇到了问题(其中一个节点是执行 mpiexec 命令的同一台机器,而另一个节点是一台单独的机器)。
我将调用运行 mpiexec、master 的机器和另一个节点 slave。
在 master 和 slave 上,我都在 ~/mpi
下的主目录中安装了 OpemMPI我在 master 上有一个名为 ~/machines.txt 的文件。
理想情况下,~/machines.txt 应该包含:
大师 奴隶
但是,当我在 master 上运行以下命令时:
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 ...
后一个选项自动设置前缀。然后使用前缀在远程机器上设置PATH
和LD_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 节点设置的主要内容,如果未能解决你的问题,请参考以下文章