10.6. 通过SSH启动

在非调度环境中启动Open MPI作业时,通常使用ssh在远程节点上启动命令。如快速入门部分所述,要成功使用ssh启动MPI应用程序需要满足以下条件:

  1. 您必须能够从所有远程节点非交互式登录(无需输入密码或口令)到所有其他远程节点。

  2. Open MPI的可执行文件必须能被找到(例如,在您的PATH环境变量中)。

  3. 必须能够找到Open MPI的库文件(例如,在您的LD_LIBRARY_PATH环境变量中)。

10.6.1. 指定MPI作业的主机

有三种机制可以指定MPI作业运行的主机:

  1. mpirun(1)--hostfile选项。

    使用此选项可指定运行主机列表。请注意,为了与其他MPI实现兼容, --machinefile--hostfile的同义词。 有关--hostfile选项的更多信息,请参阅此部分

  2. mpirun(1)--host选项。

    该选项可用于在命令行中指定要运行的主机列表。 有关--host选项的更多信息,请参阅此部分

  3. 在调度环境中运行。

    如果您在调度环境中运行(例如在Slurm、Torque或LSF作业中),Open MPI将自动从调度器获取主机列表。有关在支持的调度环境中启动MPI作业的详细信息,请参阅下一小节。

重要

使用上述任何方法指定主机与用于MPI通信的网络接口无关。主机列表用于指定要在哪些主机上启动MPI进程。

10.6.2. 非交互式 ssh 登录

必须设置SSH密钥,以便在执行以下操作时无需输入密码或口令:

shell$ ssh othernode echo hello
hello
shell$

参考互联网上的说明和教程,学习如何设置SSH密钥。可以尝试使用谷歌搜索关键词如"免密码SSH"或"SSH密钥认证"。

为简化操作,您可能希望配置无密码的SSH密钥。但这会增加一定风险(例如,若您的SSH密钥遭泄露)。不过这种方式能简化SSH设置,因为您无需使用ssh-agent。请根据您能接受的风险等级进行评估。

重要

Open MPI采用基于树的模式在远程节点上启动进程。这意味着Open MPI必须能够无需交互式登录——无需输入密码或口令——从主机列表中的任意节点登录到主机列表中的任何节点

仅从调用mpirun(1)的节点向所有其他节点设置SSH密钥可能还不够。

如果您的节点之间共享$HOME文件系统,可以设置一个SSH密钥用于登录所有节点。

10.6.3. 查找Open MPI可执行文件与库文件

一旦Open MPI能够使用ssh在远程节点上调用可执行文件,它必须能够在那个远程节点上找到其辅助可执行文件和共享库。

如果Open MPI安装在系统级目录中(例如/usr/bin),Open MPI通常无需额外配置就能在远程节点上找到其可执行文件和库。

然而,如果Open MPI被安装到一个默认不搜索的路径中,您将需要提供帮助,以便Open MPI能够找到其可执行文件和库。

重要

为简化操作,强烈建议在所有计算节点上安装Open MPI时使用相同的安装路径。更多详情请参阅安装位置章节

您可以通过以下两种方式之一实现。

10.6.3.1. 使用“prefix”前缀行为

注意

"Prefix"行为仅适用于mpirun(1);不适用于通过资源管理器直接启动机制。不过,本节讨论的是使用ssh来启动MPI作业,这意味着没有资源管理器,因此也没有可用的直接启动机制。

当启用“prefix”行为时,Open MPI 会在执行远程命令前自动设置远程节点上的 $PATH$LD_LIBRARY_PATH

重要

Open MPI 假设远程节点上的安装路径 prefixbindirlibdir 与本地节点相同。如果不同,则不应使用“prefix”行为。

您可以通过以下三种方式之一启用“前缀”行为:

  1. 使用绝对路径调用 mpirun(1)

    shell$ $HOME/my-openmpi/bin/mpirun --hostfile my-hostfile.txt mpi-hello-world
    

    只需使用mpirun(1)的绝对路径,即可告知Open MPI启用"prefix"模式。

  2. 使用 --prefix 选项来配置 mpirun(1)

  shell$ $HOME/my-openmpi/bin/mpirun --hostfile my-hostfile.txt \
      --prefix $HOME/my-openmpi \
      mpi-hello-world

The ``-prefix`` option takes a single argument: the prefix path to
use for the bindir and libdir on the remote node.
  1. 使用--enable-mpirun-prefix-by-default配置Open MPI。

    如果Open MPI以这种方式构建,mpirun(1)将始终启用"前缀"行为。

10.6.3.2. 在您的shell启动文件中设置PATHLD_LIBRARY_PATH

考虑以下情况:Open MPI 配置为:

shell$ ./configure --prefix=$HOME/my-openmpi ...

在这种情况下,Open MPI将被安装到$HOME/my-openmpi目录中。 该路径几乎肯定不在任何系统默认搜索路径中, 因此必须将其添加到$PATH$LD_LIBRARY_PATH 环境变量中。

具体来说:目标是以下非交互式命令必须能够无错误执行:

# First, ensure that this command returns the correct ompi_info
# instance (i.e., $HOME/my-openmpi/bin/ompi_info).
shell$ ssh remotenode which ompi_info
/home/myusername/my-openmpi/bin/ompi_info

# Next, ensure that you can run that ompi_info command without
# error
shell$ ssh remotenode ompi_info

# ... lots of output ...

确保没有看到任何关于找不到库的错误信息。

所有shell都有某种在登录时执行的脚本文件,用于执行环境设置任务。需要编辑这个启动文件以实现以下目的:

  1. 将Open MPI的可执行文件路径(可能是$prefix/bin,或本例中的$HOME/my-openmpi/bin)添加到$PATH环境变量中。

  2. 将Open MPI的库路径(可能是$prefix/lib,或本例中的$HOME/my-openmpi/lib)添加到环境变量$LD_LIBRARY_PATH中。

您可能希望将Open MPI的库添加到$PATH$LD_LIBRARY_PATH前端,以确保优先找到这个Open MPI安装的文件。

请查阅您所用shell的手册页面以获取具体细节(例如,某些shell对启动文件的权限非常敏感)。以下列表包含了一些常见shell及其在登录时读取/执行的启动文件:

Shell

非交互式登录

交互式登录

bashzsh

$HOME/.bashrc 如果存在的话。

  1. $HOME/.bash_profile 如果存在的话,或者

  2. $HOME/.bash_login 如果存在的话,或者

  3. $HOME/.profile 如果该文件存在(按此顺序)。

请注意,某些Linux发行版会为用户自动提供$HOME/.bash_profile脚本,这些脚本也会自动执行$HOME/.bashrc。更多信息请查阅bash手册页。

sh

该shell不会自动执行任何文件,因此Open MPI会在远程节点上调用Open MPI可执行文件之前执行$HOME/.profile脚本

$HOME/.profile

csh

$HOME/.cshrc

$HOME/.cshrc 后接 $HOME/.login

tcsh

  1. $HOME/.tcshrc 如果存在的话,或者

  2. $HOME/.cshrc 如果不存在

  1. $HOME/.tcshrc 如果存在,或者

  2. $HOME/.cshrc 如果不存在

之后,执行 $HOME/.login