Ale*_*lex 7 python mpi deep-learning tensorflow
Horovod正在将NCCL和MPI 组合成分布式深度学习的包装器,例如TensorFlow.我以前没有NCCL的负责人,正在调查功能,从Nvidia网站上他们就NCCL说明了以下内容:
NVIDIA集体通信库(NCCL)实现了多GPU和多节点集合通信原语,这些原语针对NVIDIA GPU进行了性能优化.
从关于NCCL 的介绍视频中我了解到NCCL通过PCIe,NVLink,Native Infiniband,以太网工作,它甚至可以检测通过RDMA的GPU Direct是否在当前硬件拓扑中有意义并透明地使用它.
所以我质疑为什么在Horovod需要MPI?据我所知,MPI还用于通过allreduce范例有效地交换分布式节点之间的梯度.但据我所知,NCCL已经支持这些功能.
那么MPI仅用于轻松调度群集上的作业吗?对于CPU上的分布式深度学习,既然我们不能在那里使用NCCL?
如果有人可以解释MPI和/或NCCL用于分布式深度学习的情况以及他们在培训工作中的职责,我将非常感谢.
小智 7
MPI(消息传递接口)是并行计算中使用的消息传递标准(维基百科)。大多数时候,您在使用 Horovod 时会使用Open MPI,Horovod 是 MPI 标准的开源实现。
MPI 实现允许轻松地并行运行一个程序的多个实例。程序代码保持相同,只是在几个不同的进程中运行。此外,MPI 库还公开了一个 API,可以在这些进程之间轻松共享数据和信息。
Horovod 使用这种机制来运行运行神经网络的 Python 脚本的某些进程。这些进程应该在神经网络运行过程中了解并共享一些信息。其中一些信息与环境有关,例如:
其中一些信息是关于神经网络的训练过程,例如:
还有更多信息被共享,上面的要点是其中的一些信息。
最初,Horovod 使用 MPI 来满足上述所有要求。随后,Nvidia 发布了NCCL,这是一个由许多用于 GPU 之间高性能通信的算法组成的库。为了提高整体性能,Horovod 开始将 NCCL 用于诸如 (4) 和主要 (5) 之类的事情,因为 NCCL 允许在 GPU 之间更有效地共享这些数据。
在Nvidia 文档中我们可以看到 NCCL 可以与 MPI 结合使用,一般来说:
MPI用于CPU-CPU通信,NCCL用于GPU-GPU通信。
Horovod 仍然使用 MPI 来运行 Python 脚本的少数实例并管理环境(排名、大小、哪个进程是“主进程”等),以允许用户轻松管理运行。
首先,horovod一开始只使用MPI。
Horovod 引入 NCCL 后,即使在 NCCL 模式下,MPI 仍然用于提供环境信息(rank、size 和 local_rank)。NCCL 文档有一个示例,展示了它如何在一个设备每个进程设置中利用 MPI:
以下代码是在 MPI 上下文中创建通信器的示例,每个 MPI 等级使用一个设备。
| 归档时间: |
|
| 查看次数: |
1466 次 |
| 最近记录: |