运行 Horovod

本页面包含使用 horovodrun 的 Open MPI 示例。请查阅您的 MPI 文档以了解您系统上 mpirun 命令的参数。

通常每个进程会分配一个GPU,因此如果服务器有4个GPU,你将运行4个进程。在horovodrun中,进程数量通过-np标志指定。

在拥有4个GPU的机器上运行:

$ horovodrun -np 4 -H localhost:4 python train.py

在4台机器上运行,每台机器配备4个GPU:

$ horovodrun -np 16 -H server1:4,server2:4,server3:4,server4:4 python train.py

你也可以在主机文件中指定主机节点。例如:

$ cat myhostfile

aa slots=2
bb slots=2
cc slots=2

此示例列出了主机名称(aa、bb 和 cc)以及每个主机有多少个“插槽”。 插槽表示一个节点上可以执行的进程数量。 此格式与 mpirun 命令中的格式相同。

在主机文件中指定的主机上运行:

$ horovodrun -np 6 -hostfile myhostfile python train.py

要求

使用 horovodrun 需要满足以下条件之一:

  • Open MPI >= 2.X

  • Spectrum MPI

  • MPICH

  • OpenRTE

  • Gloo

  • 英特尔(R) MPI

如果你没有安装MPI,你可以使用Gloo运行horovodrun。Gloo依赖项会自动随Horovod一起安装,并且只需要在安装Horovod时你的系统上有CMake可用。

如果你想使用不同版本的MPI,仍然可以通过直接运行mpirun 来使用Horovod。

因SSH问题导致的故障

执行horovodrun的主机必须能够无密码提示地SSH到所有其他主机。

如果 horovodrun 因权限错误而失败,请确认您能够在不输入密码或回答类似以下问题的情况下通过 ssh 连接到其他所有服务器:

无法 确认 主机 ' ( address>)' 真实性。 RSA 密钥 指纹 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx。 是否 确定 要继续 连接 (是/否)?

要了解更多关于设置无密码身份验证的信息,请参阅此页面

为避免 The authenticity of host ' ( address>)' can't be established 提示,使用 ssh-keyscan 将所有主机添加到 ~/.ssh/known_hosts 文件中:

$ ssh-keyscan -t rsa,dsa server1 server2 > ~/.ssh/known_hosts

高级:使用 Open MPI 运行 Horovod

在某些高级场景中,您可能希望对传递给 Open MPI 的选项进行细粒度控制。 要了解如何直接使用 Open MPI 运行 Horovod 训练, 请阅读 Run Horovod with Open MPI

使用英特尔(R) MPI运行Horovod

horovodrun 自动将一些参数转换为英特尔(R) MPI mpirun 支持的格式。允许的选项集包括 -np-H 和 ssh 参数(-p、-i)。英特尔(R) MPI mpirun 不支持 MCA 参数,但您可以通过 环境变量 设置一些选项。 更多信息请参阅 英特尔(R) MPI 官方文档