10.6. 通过SSH启动
在非调度环境中启动Open MPI作业时,通常使用ssh在远程节点上启动命令。如快速入门部分所述,要成功使用ssh启动MPI应用程序需要满足以下条件:
您必须能够从所有远程节点非交互式登录(无需输入密码或口令)到所有其他远程节点。
Open MPI的可执行文件必须能被找到(例如,在您的
PATH环境变量中)。必须能够找到Open MPI的库文件(例如,在您的
LD_LIBRARY_PATH环境变量中)。
10.6.1. 指定MPI作业的主机
有三种机制可以指定MPI作业运行的主机:
mpirun(1)的
--hostfile选项。使用此选项可指定运行主机列表。请注意,为了与其他MPI实现兼容,
--machinefile是--hostfile的同义词。 有关--hostfile选项的更多信息,请参阅此部分。mpirun(1)的
--host选项。该选项可用于在命令行中指定要运行的主机列表。 有关
--host选项的更多信息,请参阅此部分。在调度环境中运行。
如果您在调度环境中运行(例如在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 假设远程节点上的安装路径 prefix、bindir 和 libdir 与本地节点相同。如果不同,则不应使用“prefix”行为。
您可以通过以下三种方式之一启用“前缀”行为:
使用绝对路径调用 mpirun(1)。
shell$ $HOME/my-openmpi/bin/mpirun --hostfile my-hostfile.txt mpi-hello-world
只需使用mpirun(1)的绝对路径,即可告知Open MPI启用"prefix"模式。
使用
--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.
使用
--enable-mpirun-prefix-by-default配置Open MPI。如果Open MPI以这种方式构建,mpirun(1)将始终启用"前缀"行为。
10.6.3.2. 在您的shell启动文件中设置PATH和LD_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都有某种在登录时执行的脚本文件,用于执行环境设置任务。需要编辑这个启动文件以实现以下目的:
将Open MPI的可执行文件路径(可能是
$prefix/bin,或本例中的$HOME/my-openmpi/bin)添加到$PATH环境变量中。将Open MPI的库路径(可能是
$prefix/lib,或本例中的$HOME/my-openmpi/lib)添加到环境变量$LD_LIBRARY_PATH中。
您可能希望将Open MPI的库添加到$PATH和$LD_LIBRARY_PATH的前端,以确保优先找到这个Open MPI安装的文件。
请查阅您所用shell的手册页面以获取具体细节(例如,某些shell对启动文件的权限非常敏感)。以下列表包含了一些常见shell及其在登录时读取/执行的启动文件:
Shell |
非交互式登录 |
交互式登录 |
|---|---|---|
|
|
请注意,某些Linux发行版会为用户自动提供 |
|
该shell不会自动执行任何文件,因此Open MPI会在远程节点上调用Open MPI可执行文件之前执行 |
|
|
|
|
|
|
之后,执行 |