如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

简介: NCCL在不同的深度学习框架(CNTK/Tensorflow/Torch/Theano/Caffe)中,由于不同的模型大小,计算的batch size大小,会有不同的表现。比如上图中CNTK中Resnet50能达到32卡线性加速比

问题详情:

深度学习中常常需要多GPU并行训练,而Nvidia的NCCL库NVIDIA/nccl(https://github.com/NVIDIA/nccl)在各大深度学习框架(Caffe/Tensorflow/Torch/Theano)的多卡并行中经常被使用,请问如何理解NCCL的原理以及特点?

回答:

NCCL是Nvidia Collective multi-GPU Communication Library的简称,它是一个实现多GPU的collective communication通信(all-gather, reduce, broadcast)库,Nvidia做了很多优化,以在PCIe、Nvlink、InfiniBand上实现较高的通信速度。

下面分别从以下几个方面来介绍NCCL的特点,包括基本的communication primitive、ring-base collectives、NCCL在单机多卡上以及多机多卡实现、最后分享实际使用NCCL的一些经验。

(1)communication primitive

并行任务的通信一般可以分为Point-to-point communication和Collective communication。P2P通信这种模式只有一个sender和一个receiver,实现起来比较简单。第二种Collective communication包含多个sender多个receiver,一般的通信原语包括broadcast,gather,all-gather,scatter,reduce,all-reduce,reduce-scatter,all-to-all等。简单介绍几个常用的操作:

Reduce:从多个sender那里接收数据,最终combine到一个节点上。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

All-reduce:从多个sender那里接收数据,最终combine到每一个节点上。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

而传统Collective communication假设通信节点组成的topology是一颗fat tree,如下图所示,这样通信效率最高。但实际的通信topology可能比较复杂,并不是一个fat tree。因此一般用ring-based Collective communication。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

(2) ring-base collectives

ring-base collectives将所有的通信节点通过首尾连接形成一个单向环,数据在环上依次传输。以broadcast为例, 假设有4个GPU,GPU0为sender将信息发送给剩下的GPU,按照环的方式依次传输,GPU0-->GPU1-->GPU2-->GPU3,若数据量为N,带宽为B,整个传输时间为(K-1)N/B。时间随着节点数线性增长,不是很高效。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

下面把要传输的数据分成S份,每次只传N/S的数据量,传输过程如下所示:

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

GPU1接收到GPU0的一份数据后,也接着传到环的下个节点,这样以此类推,最后花的时间为

S*(N/S/B) + (k-2)*(N/S/B) = N(S+K-2)/(SB) --> N/B,条件是S远大于K,即数据的份数大于节点数,这个很容易满足。所以通信时间不随节点数的增加而增加,只和数据总量以及带宽有关。其它通信操作比如reduce、gather以此类推。

那么在以GPU为通信节点的场景下,怎么构建通信环呢?如下图所示:

单机4卡通过同一个PCIe switch挂载在一棵CPU的场景:

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

单机8卡通过两个CPU下不同的PCIe switch挂载的场景:

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

(3)NCCL实现

NCCL实现成CUDA C++ kernels,包含3种primitive operations: Copy,Reduce,ReduceAndCopy。目前NCCL 1.0版本只支持单机多卡,卡之间通过PCIe、NVlink、GPU Direct P2P来通信。NCCL 2.0会支持多机多卡,多机间通过Sockets (Ethernet)或者InfiniBand with GPU Direct RDMA通信。

下图所示,单机内多卡通过PCIe以及CPU socket通信,多机通过InfiniBand通信。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

同样,在多机多卡内部,也要构成一个通信环。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

下面是单机 4卡(Maxwel GPU)上各个操作随着通信量增加的带宽速度变化,可以看到带宽上限能达到10GB/s,接近PCIe的带宽。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

下图是Allreduce在单机不同架构下的速度比较:

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

先不看DGX-1架构,这是Nvidia推出的深度学习平台,带宽能达到60GB/s。前面三个是单机多卡典型的三种连接方式,第三种是四张卡都在一个PCIe switch上,所以带宽较高,能达到>10GB/s PCIe的带宽大小,第二种是两个GPU通过switch相连后再经过CPU连接,速度会稍微低一点,第一种是两个GPU通过CPU然后通过QPI和另一个CPU上的两块卡相连,因此速度最慢,但也能达到>5GB/s。

下图是Allreduce多机下的速度表现,左图两机8卡,机内PCIe,机间InfiniBand能达到>10GB/s的速度,InfiniBand基本上能达到机内的通信速度。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

下图是NCCL在CNTK ResNet50上的scalability,32卡基本能达到线性加速比。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

(4)我们的实测经验

首先,在一台K40 GPU的机器上测试了GPU的连接拓扑,如下:

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

可以看到前四卡和后四卡分别通过不同的CPU组连接,GPU0和GPU1直接通过PCIe switch相连,然后经过CPU与GPU2和GPU3相连。

下面是测试PCIe的带宽,可以看到GPU0和GU1通信能达到10.59GB/s,GPU0同GPU2~3通信由于要经过CPU,速度稍慢,和GPU4~7的通信需要经过QPI,所以又慢了一点,但也能达到9.15GB/s。

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

而通过NVlink连接的GPU通信速度能达到35GB/s:

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

NCCL在不同的深度学习框架(CNTK/Tensorflow/Torch/Theano/Caffe)中,由于不同的模型大小,计算的batch size大小,会有不同的表现。比如上图中CNTK中Resnet50能达到32卡线性加速比,Facebook之前能一小时训练出ImageNet,而在NMT任务中,可能不会有这么大的加速比。因为影响并行计算效率的因素主要有并行任务数、每个任务的计算量以及通信时间。我们不仅要看绝对的通信量,也要看通信和计算能不能同时进行以及计算/通信比,如果通信占计算的比重越小,那么并行计算的任务会越高效。NMT模型一般较大,多大几十M上百M,不像现在image的模型能做到几M大小,通信所占比重会较高。

下面是NMT模型单机多卡加速的一个简单对比图:

如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?

以上就是对NCCL的一些理解,很多资料也是来自于NCCL的官方文档,欢迎交流讨论。




本文作者:Non
本文转自雷锋网禁止二次转载, 原文链接
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
机器学习/深度学习 虚拟化 数据中心
NVIDIA T4和A10:不同应用场景下的GPU加速器选择
在数据中心和云计算领域,GPU加速器扮演着至关重要的角色。NVIDIA T4和A10是两款适用于不同应用场景的GPU加速器。本文将比较它们的性能和适用场景,帮助读者更好地选择适合自己需求的GPU实例。
5016 0
|
6月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU服务器租用费用_NVIDIA A10、V100、T4、P4、P100 GPU卡
阿里云GPU云服务器提供NVIDIA A10、V100、T4、P4、P100等多种GPU卡,结合高性能CPU,单实例计算性能高达5PFLOPS。支持2400万PPS及160Gbps内网带宽。实例规格多样,如A10卡GN7i(3213.99元/月)、V100-16G卡GN6v(3830.00元/月)等。适用于深度学习、科学计算、图形处理等场景。GPU软件如AIACC-Training、AIACC-Inference助力性能优化。购买方式灵活,客户案例包括深势科技、流利说、小牛翻译。
727 0
|
6月前
|
XML 机器学习/深度学习 监控
性能监控之Telegraf+InfluxDB+Grafana NVIDIA GPU实时监控
【6月更文挑战12天】性能监控之Telegraf+InfluxDB+Grafana NVIDIA GPU实时监控
152 0
|
存储 人工智能 芯片
多GPU训练大型模型:资源分配与优化技巧 | 英伟达将推出面向中国的改良芯片HGX H20、L20 PCIe、L2 PCIe
在人工智能领域,大型模型因其强大的预测能力和泛化性能而备受瞩目。然而,随着模型规模的不断扩大,计算资源和训练时间成为制约其发展的重大挑战。特别是在英伟达禁令之后,中国AI计算行业面临前所未有的困境。为了解决这个问题,英伟达将针对中国市场推出新的AI芯片,以应对美国出口限制。本文将探讨如何在多个GPU上训练大型模型,并分析英伟达禁令对中国AI计算行业的影响。
1553 0
|
机器学习/深度学习 人工智能 芯片
一文详解多模态大模型发展及高频因子计算加速GPU算力 | 英伟达显卡被限,华为如何力挽狂澜?
近年来,全球范围内的芯片禁令不断升级,给许多企业和科研机构带来了很大的困扰,需要在技术层面进行创新和突破。一方面,可以探索使用国产芯片和其他不受限制的芯片来替代被禁用的芯片;另一方面,可以通过优化算法和架构等方法来降低对特定芯片的依赖程度。
|
7月前
|
人工智能 缓存 机器人
【2024】英伟达吞噬世界!新架构超级GPU问世,AI算力一步提升30倍
英伟达在加州圣荷西的GTC大会上发布了全新的Blackwell GPU,这款拥有2080亿个晶体管的芯片将AI性能推向新高度,是公司对通用计算时代的超越。Blackwell采用多芯片封装设计,通过两颗GPU集成,解决了内存局部性和缓存问题,提供20 petaflops的FP4算力,是上一代产品的5倍。此外,新平台降低了构建和运行大规模AI模型的成本和能耗,使得大型语言模型推理速度提升30倍。黄仁勋表示,Blackwell标志着AI算力在近八年内增长了一千倍,引领了技术边界拓宽的新趋势。
|
7月前
|
弹性计算 并行计算 UED
GPU实例使用--自动安装NVIDIA GPU驱动和CUDA组件
GPU 云服务器正常工作需提前安装正确的基础设施软件,对于搭载了 NVIDIA 系列 GPU卡的实例而言,如果把 NVIDIA GPU 用作通用计算,则需安装 NVIDIA GPU 驱动、 CUDA、cuDNN等软件。
101426 3
|
7月前
|
弹性计算 并行计算 UED
带你读《弹性计算技术指导及场景应用》——4. 自动安装NVIDIA GPU驱动和CUDA组件
带你读《弹性计算技术指导及场景应用》——4. 自动安装NVIDIA GPU驱动和CUDA组件
152 0
|
存储 人工智能 安全
探秘英伟达显卡的制造之路 | 英伟达断供GPU,中国大模型何去何从?
在当今时代,人工智能技术正以前所未有的速度发展,推动着各个领域的创新与变革。作为人工智能技术的核心引擎之一,高性能GPU扮演着至关重要的角色。在这个领域,英伟达的H100无疑是一款备受瞩目的高端产品。它针对高性能计算和人工智能应用而设计,具备强大的计算能力和高内存容量,以及先进的互连技术,可以有效提升集群中的计算效率,加速深度学习、计算机视觉、自然语言处理等领域的AI训练和推理任务。