【问题标题】:OpenMPI: Simple 2-Node SetupOpenMPI:简单的 2 节点设置
【发布时间】: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。

标签: parallel-processing mpi cluster-computing openmpi


【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 2012-06-21
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多