首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TensorFlow Horovod: NCCL和MPI

TensorFlow Horovod: NCCL和MPI
EN

Stack Overflow用户
提问于 2018-11-27 11:45:54
回答 2查看 5.1K关注 0票数 11

霍洛沃德正在将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用于分布式深度学习,以及他们在培训期间的职责是什么,我将非常感激。

EN

回答 2

Stack Overflow用户

发布于 2020-02-07 09:01:30

消息传递接口( MPI )是并行计算(维基百科)中使用的消息传递标准.大多数情况下,当使用Horovod时,您都会使用开放MPI,这是MPI标准的一个开源实现。

MPI实现允许一个程序的多个实例并行运行。程序代码保持不变,但只是在几个不同的进程中运行。此外,MPI库公开了一个API,以便在这些进程之间轻松地共享数据和信息。

Horovod使用这种机制来运行运行神经网络的Python脚本的某些进程。在神经网络运行过程中,这些过程应该知道并共享一些信息。其中一些信息是关于环境的,例如:

  1. 当前正在运行的进程数量,以便能够正确修改神经网络的参数和超参数,例如批处理大小、学习速率等。
  2. 知道哪个进程是“主”进程,打印日志并从单个进程保存文件(检查点)。
  3. 当前进程的id (称为“秩”),以便它可以使用输入数据的特定区域。

其中一些信息是关于神经网络的训练过程的,例如:

  1. 模型的权重和偏差的随机初始值,因此所有过程都将从同一点开始。
  2. 每个训练步骤结束时的权重值和偏差值,因此所有过程都将以相同的值开始下一步。

有更多的信息是共享的,上面的符号就是其中的一部分。

最初,Horovod使用MPI来满足上述所有需求。然后,Nvidia发布了NCCL,它是一个由许多GPU之间高性能通信算法组成的库.为了提高总体性能,Horovod开始在(4)和主要(5)等方面使用NCCL,因为NCCL允许在GPU之间更有效地共享这些数据。

Nvidia博士中,我们可以看到NCCL可以与MPI一起使用,而且通常:

MPI用于CPU-CPU通信,NCCL用于GPU通信.

Horovod仍然使用MPI来运行Python脚本的少数实例,并管理环境(级别、大小、哪个进程是“主进程”等等)允许用户轻松地管理运行。

票数 6
EN

Stack Overflow用户

发布于 2020-02-07 07:58:57

首先,霍洛维德只在一开始就使用MPI。

在将NCCL引入霍洛夫德之后,即使在NCCL模式下,MPI仍然用于提供环境信息(等级、大小和local_rank)。NCCL有一个示例展示了它如何在每个进程设置的一个设备中利用MPI:

下面的代码是在MPI上下文中使用每个MPI级别的一个设备创建通信器的示例。

https://docs.nvidia.com/deeplearning/sdk/nccl-developer-guide/docs/examples.html#example-2-one-device-per-process-or-thread

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53498952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档