Horovod on GPU¶
要使用 Horovod 在 GPU 上,请阅读以下选项并查看哪一个最适合您。
有GPU吗?¶
在大多数情况下,使用NCCL 2将显著提升性能,优于CPU版本。NCCL 2提供了针对NVIDIA GPU和各种网络设备(如RoCE或InfiniBand)优化的allreduce操作。
-
如果您使用
nccl-包安装了 NCCL 2,您应当将库路径添加到.txz LD_LIBRARY_PATH环境变量中或在/etc/ld.so.conf中注册它。$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/nccl-
/lib
2. (可选) 如果您正在使用支持GPUDirect RDMA的NVIDIA Tesla GPU和NIC,可以通过安装nv_peer_memory驱动程序进一步加速NCCL 2。
GPUDirect 允许 GPU 之间无需 CPU 参与即可传输内存,这显著降低了延迟和 CPU 负载。如果检测到,NCCL 2 能够自动使用 GPUDirect 进行 allreduce 操作。
安装 Open MPI 或按照 这些步骤 安装其他 MPI 实现。
注意: Open MPI 3.1.3 存在可能导致挂起的问题。推荐的修复方法是降级到 Open MPI 3.1.2 或升级到 Open MPI 4.0.0。
如果你从PyPI安装了TensorFlow,请确保安装了
g++-5或更高版本。如果你从PyPI安装了PyTorch,请确保安装了
g++-5或更高版本。如果你从Conda安装了任一软件包,请确保安装了
gxx_linux-64Conda包。安装
horovodpip 包。如果您使用
nccl-包安装了 NCCL 2,您应该使用.txz HOROVOD_NCCL_HOME环境变量指定 NCCL 2 的路径。$ HOROVOD_NCCL_HOME=/usr/local/nccl-
HOROVOD_GPU_OPERATIONS=NCCL pip install --no-cache-dir horovod 如果您使用 Ubuntu 包安装了 NCCL 2,您可以运行:
$ HOROVOD_GPU_OPERATIONS=NCCL pip install --no-cache-dir horovod
如果您使用 CentOS / RHEL 包安装了 NCCL 2,您可以运行:
$ HOROVOD_NCCL_INCLUDE=/usr/include HOROVOD_NCCL_LIB=/usr/lib64 HOROVOD_GPU_OPERATIONS=NCCL pip install --no-cache-dir horovod
注意: 某些计算通信比较高的模型即使在GPU版本可用的情况下,也能通过在CPU上执行allreduce操作获得性能提升。要强制在CPU上进行allreduce操作,请将device_dense='/cpu:0'传递给hvd.DistributedOptimizer:
opt = hvd.DistributedOptimizer(opt, device_dense='/cpu:0')
高级:拥有专有的MPI实现,支持GPU并针对您的网络进行了优化?¶
本节仅适用于您拥有支持 GPU 的专有 MPI 实现(即非 Open MPI 或 MPICH)的情况。 大多数用户应遵循上述章节之一。
如果你的MPI供应商在GPU上实现的allreduce操作比NCCL 2更快,你可以配置Horovod来使用它替代:
$ HOROVOD_GPU_ALLREDUCE=MPI pip install --no-cache-dir horovod
此外,如果你的MPI供应商实现支持GPU上的allgather、broadcast和reducescatter操作,你也可以配置Horovod来使用它们:
$ HOROVOD_GPU_OPERATIONS=MPI pip install --no-cache-dir horovod
注意: Allgather会分配一个与参与训练进程数成比例的输出张量。如果您发现GPU内存不足,可以通过向hvd.DistributedOptimizer传递device_sparse='/cpu:0'来强制在CPU上执行allgather操作:
opt = hvd.DistributedOptimizer(opt, device_sparse='/cpu:0')