霍洛沃德正在将NCCL和MPI组合成一个用于分布式深度学习的包装器,例如TensorFlow。我以前没有听说过NCCL,我正在研究它的功能。以下是NVIDIA网站上关于NCCL的说明:
NVIDIA集体通信库(NCCL)实现了对NVIDIA GPU性能进行优化的多GPU和多节点集体通信原语。
从关于NCCL的介绍视频中,我了解到NCCL是通过PCIe、NVLink、原生Infiniband、以太网工作的,它甚至可以通过RDMA检测GPU在当前硬件拓扑中是否有意义,并透明地使用它。
所以我想问为什么在霍洛沃德需要MPI?据我所知,MPI还被用来通过also范式有效地交换分布式节点之间的梯度。但据我所知,NCCL已经支持这些功能。
那么,MPI只用于轻松地调度集群上的作业吗?对于CPU上的分布式深度学习,既然我们不能在那里使用NCCL?
如果有人能解释在何种情况下MPI和/或NCCL用于分布式深度学习,以及他们在培训期间的职责是什么,我将非常感激。
发布于 2020-02-07 09:01:30
消息传递接口( MPI )是并行计算(维基百科)中使用的消息传递标准.大多数情况下,当使用Horovod时,您都会使用开放MPI,这是MPI标准的一个开源实现。
MPI实现允许一个程序的多个实例并行运行。程序代码保持不变,但只是在几个不同的进程中运行。此外,MPI库公开了一个API,以便在这些进程之间轻松地共享数据和信息。
Horovod使用这种机制来运行运行神经网络的Python脚本的某些进程。在神经网络运行过程中,这些过程应该知道并共享一些信息。其中一些信息是关于环境的,例如:
其中一些信息是关于神经网络的训练过程的,例如:
有更多的信息是共享的,上面的符号就是其中的一部分。
最初,Horovod使用MPI来满足上述所有需求。然后,Nvidia发布了NCCL,它是一个由许多GPU之间高性能通信算法组成的库.为了提高总体性能,Horovod开始在(4)和主要(5)等方面使用NCCL,因为NCCL允许在GPU之间更有效地共享这些数据。
在Nvidia博士中,我们可以看到NCCL可以与MPI一起使用,而且通常:
MPI用于CPU-CPU通信,NCCL用于GPU通信.
Horovod仍然使用MPI来运行Python脚本的少数实例,并管理环境(级别、大小、哪个进程是“主进程”等等)允许用户轻松地管理运行。
发布于 2020-02-07 07:58:57
首先,霍洛维德只在一开始就使用MPI。
在将NCCL引入霍洛夫德之后,即使在NCCL模式下,MPI仍然用于提供环境信息(等级、大小和local_rank)。NCCL有一个示例展示了它如何在每个进程设置的一个设备中利用MPI:
下面的代码是在MPI上下文中使用每个MPI级别的一个设备创建通信器的示例。
https://stackoverflow.com/questions/53498952
复制相似问题