×
嵌入式 > 技术百科 > 详情

NVIDIA造出16核心全球最大GPU,它的作用功不可没!

发布时间:2020-06-13 发布时间:
|

在之前的GTC2018大会上,英伟达发布了全新的DGX-2超级计算机。凭借多达16颗Volta GPU强大的计算能力,这款重达350磅、售价40万美元的机器可以提供最多2PFLOPS的深度学习计算能力,堪称目前AI业界的最强者。那么,英伟达是如何将16颗Tesla V100的GPU连接在一起,并发挥出如此强大的计算能力的呢?要回答这个问题,就有必要来看看什么是NVLink 2和NVSwitch。

随着AI市场的兴起,英伟达近年来在GPU上持续发力,不断推出全新的产品。新产品在计算能力提升的同时,其芯片面积也已经屡创新高,甚至逼近了制程和成本的平衡极限。以最新的GV100核心为例,其计算能力高达单精度浮点15TFLOPS,双精度浮点8.5TFlops,新加入的Tensor Core带来了大约120TFlops的AI计算能力。获得如此计算能力的代价是GV100的芯片面积已经高达815平方毫米,堪称史上面积第一大的GPU核心。即使是台积电使用了最先进的12nm制程,受制于芯片如此大的面积,其良率表现和最终成本也很不好看。

但是,即使这样的计算能力、即使已经逼近成本和制造平衡线,GV100核心也是无法满足AI计算需求的。在深度学习的模型训练中,面对海量的数据,人们对计算能力的需求几乎是无限的,TFLOPS仅仅是入门,科学家们还在考虑如何制造和使用性能达到PFLOPS甚至EFLOPS、ZFLOP性能级别的设备,更快的性能带来了更快的计算速度,也带来了更高的效率来完成计算并获得结果,实现研究的突破。

对英伟达来说,单芯片计算能力已经达到了目前技术条件下的上限,除非更换全新的制程,否则14/16nm世代的工艺已经很难再榨出油水(TSMC 12nm工艺实际上只是之前16nm工艺的深度优化版本,起名12nm更多是商业用途)。为了满足计算能力的需求,英伟达开始考虑并联多个GPU来获得更好的性能。

和桌面SLI等消费级技术完全不同的是,工业和科学研究所需要的计算加速设备对GPU并联的需求更高,8个起步,16个也才刚刚够看。鉴于此,英伟达需要一种全新的总线来连接所有的GPU,以实现数据共享和满足计算所需,这就是NVLink的由来。

NVLink

小试牛刀的160GB/s

说起NVLink,我们不得不提到PCIe总线。在NVLink出现之前,多GPU之间的互联是由PCIe总线完成的,PCIe 3.0 x16总线能够提供32GB/s的双向带宽,借助于PCIe Switch的存在,PCIe总线能够完成CPU-GPU、GPU-GPU之间的数据交换。一个典型的例子就是AMD的CrossFire X多卡互联系统,完全借助PCIe总线来传递数据,甚至不需要额外的桥接通道,相比之下,英伟达的SLI技术至今依旧在使用桥接芯片实现GPU的直接连接。

▲依赖PCIe总线的多路GPU系统。

虽然通过PCIe总线可以连接多颗GPU,但是仅仅32GB/s的双向带宽和PCIe Switch的存在,还是使得更多GPU之间的连接存在瓶颈。尤其是在AI计算这种需要更多数据传递和平衡的系统中,PCIe不可能支持诸如8个GPU这样的系统,因此系统的性能难以继续提升。

在这种情况下,英伟达决定自行开发一种总线用于多GPU互联。在2016年发布的Pascal架构GPU中,英伟达首次推出了这种名为NVLink的总线系统。单个NVLink是一个双向接口,包含了32个链路,每个方向形成8个差分对。根据英伟达的数据,Pascal家族的GP100核心中集成了4个NVLink总线,每个可以提供40GB/s的带宽,因此GP100芯片拥有的带宽为160GB/s。

支持NVLink技术与不支持NVLink技术的CPU连接结构示意图。

作为一种创新的总线设计,NVLink如果只是用于连接GPU,就显得有些浪费了。实际上英伟达希望NVLink作为系统的基础总线而存在,就像PCIe总线那样。在这一点上,IBM有力地支持了英伟达,IBM为旗下的高性能处理器Power 8+中加入了对NVLink 1.0的支持,这使得Power 8处理器能够通过更快、更宽的NVLink连接GPU,而不是之前的PCIe。在一些系统中,四颗GP100 GPU和2个IBM Power 8+处理器借助于NVLink总线,可以实现GPU之间的两两联通以及CPU和GPU之间的互联互通,相比PCIe效率大大提升。

NVLink总线结构示意图。

除了面向大中型设备外,英伟达还推出了采用英特尔处理器、使用NVLink总线的设备。这款专门面向AI加速市场的设备被称为DGX-1,它集成了8颗GP100 GPU和双插槽、20核心的英特尔至强Xeon E5-2698v4处理器。由于每颗GPU只有4个NVLink总线,因此8颗GPU组成了立方体样式的网状网络拓扑结构。其中一组4颗GPU可以实现两两连接,然后每颗GPU再和另一组相对应的GPU直连,最终实现了8颗GPU互联的设计。

▲DGX-1的8路GPU连接方案示意图。

NVLink接口正视图。

在和CPU通讯方面,由于英特尔的至强Xeon处理器不支持NVLink,因此GPU需要通过PCIe总线连接至CPU。在这种系统中,8颗GPU所需要的PCIe通道数量远远超过了系统所能提供的上限,因此每一对2颗GPU连接至一个PCIe Switch,系统中的4个PCIe Switch能够满足8颗GPU和CPU通讯的需求,CPU之间的通讯使用了英特尔自己的QPI总线。通过这样复杂的设计,DGX-1完成了双路CPU和8路GPU的互联。

借助于NVLink总线,系统实现了双Power8 CPU和4颗GPU的互联。

NVLink 2.0

迈向单芯片300GB/s带宽

由于NVLink推出后获得了成功,因此英伟达继续研发第二代NVLink总线,IBM也跟进推出了支持NVLink 2.0的Power 9处理器。NVLink 2.0的特点在于将每条链路的信号带宽从之前的20GB/s提升至25GB/s,因此一条NVLink 2.0总线的双向带宽可以达到50GB/s,账面数据提升了25%。

不仅如此,NVLink 2.0还带来了一些功能上的提升,比如允许CPU直接对每个GPU的HBM2显存读取或进行原子操作,并支持内存一致性,也支持CPU将图形内存中的数据存储在CPU缓存中,方便CPU快速处理,新加入的地址转换服务(ATS)则允许GPU直接访问CPU的页表。在功耗方面,NVLink 2.0加入了低功耗模式,可以在没有负载的情况下进入休眠模式,节约能耗的同时提升性能功耗比。

NVLink 2.0、NVLink 1.0以及PCIe总线的带宽对比。

目前NVLink 2.0被GV100 GPU独占,GV100 GPU拥有6个NVLink 2.0总线,这使得其带宽达到了300GB/s,相比之前的GP100 GPU的160GB/s提升了87.5%。

在产品方面,英伟达去年将DGX-1的GPU升级至GV100核心,但是没有改变原有的拓扑结构,依旧是8颗GPU核心,多余的NVLink 2.0总线被用于加强GPU之间的互联。这些GPU之间能够享受高达100GB/s的数据带宽而不是上代的40GB/s,考虑到GV100的在深度学习上的性能暴增,NVLink 2.0能够带来的性能提升还是比较显著的。另外在增加了额外的连接后,跨GPU之间的数据传输性能表现也会更好。

英伟达GV100核心是有史以来最大的GPU。

显然,NVLink 2.0在8 GPU系统中的应用只是最开始的尝试而已,英伟达还在准备着大规模的并行计算。在GTC 2018上,英伟达宣布了DGX-2,拥有16颗GV100核心,并且每颗核心拥有的HBM2内存的容量也从之前的16GiB升级至32GiB,总计拥有512GiB的HBM2内存。此外,DGX-2的CPU也升级至2颗2.7GHz的24核心至强Xeon Platinum 8168,相比前代产品的性能更为出色。

NVLink 2.0推出后,英伟达顺势升级了DGX-1系统。

但是,在面对越来越多的GPU互联要求时,前代8颗GPU互联时所采用的总线直连方案就存在一定的问题了。其原因主要是,8颗GPU在NVLink的连接中已经需要至少16条总线线路,在DGX-1升级版的NVLink 2.0中更是达到了24条总线。如此多的总线连接对PCB的布线和制造都是一个极大的难题,况且如果要完成16颗GPU两两互联的话,其总线规模将急剧膨胀,甚至难以在PCB上完成。

为“世界上最大的GPU”而生

NVSwitch解析

为了解决这个问题,英伟达设计了一种取巧的方法:既然GPU之间的两两互联难以完成,那么可以设计一个交换芯片,让所有的GPU都连接至交换芯片上,再由交换芯片实现数据的互联互通,这颗交换芯片的名称就叫NVSwitch。

NVSwitch是一个专用的NVlink交换器,每个NVSwitch芯片拥有18个NVlink端口,在连接NVlink 2.0总线的时候,每个端口的双向带宽为50GB/s,整个NVSwitch的总带宽高达900GB/s。由于带宽巨大、连接接口多,NVSwitch芯片的体积与功耗都比较夸张。

根据英伟达数据,NVSwitch内部集成了20亿个晶体管,在采用了台积电12nm FFN工艺(和GV100工艺相同)后功耗依然高达100W,需要采用主动散热方案才能正常运行。在封装方面,NVSwitch采用的是1940针的4平方厘米BGA封装方案,其中576个引脚分配给NVLink总线,其余的引脚用作电源、PCIe、I2C以及GPIO等其他用途,规模巨大。

英伟达还公布了NVSwitch芯片的结构图,其中大量的面积被两侧的NVLink总线占据,中央部分则由上部的NVlink总线和中间用作数据交换的XBAR以及下部的控制部分占据。从结构图来看,NVSwitch芯片大量的晶体管被用在连接和数据通道上,其设计还是相当复杂的。

NVSwitch芯片正视图。

由于NVSwitch拥有18个端口,因此这使得英伟达可以设计一个完全无阻塞、完全互联、拥有16颗GPU的系统。从实际产品来看,英伟达的连接方式依旧是先将GPU分为两组,每组8颗GV100 GPU,每颗GV100芯片拥有6个NVLink 2.0接口,每个接口都和一个单独的NVSwitch芯片连接,一颗GV100可以连接6个NVSwitch芯片。以此类推,让所有的8颗GPU都连接在这6个NVSwitch芯片上,实现了6个NVSwitch芯片和8颗GPU的连接。

在上述连接中,每个NVSwitch芯片实际上只使用了8个接口,还剩余10个接口未连接。实际上在DGX-2中,16颗GPU分为2组后分别连接至2个NVSwitch底板上(每个底板有6个NVSwitch芯片,如上文所述),2个NVSwitch底板之间的连接是通过NVLink总线完成的,这两个底板之间的NVLink 2.0总线正是来自于NVSwitch芯片剩余的10个接口中的8个。至于最后的2个接口,目前是空置状态,据猜测可能会被用于GPU和IBM Power 9处理器之间的连接。在这种连接方案中,IBM的Power 9处理器可以直接连接每个基板的每个NVSwitch芯片,这意味着所有的GPU都可以直接和CPU连接。

▲16颗GPU通过NVSwitch的连接示意图,一共使用了12个NVSwitch芯片。

8颗GPU和6个NVSwitch芯片连接图。

上述描述可能比较绕口且难以从字面上理解,理解NVSwitch的最佳方法是图片。不过,为什么英伟达要利用2个NVSwitch底板和12颗NVSwitch芯片来连接16颗GPU,而不是采用更简单的6个NVSwitch芯片连接16颗GPU—即使看起来接口数量完全足够,原因尚不得而知。一种猜测是可能16颗GPU芯片和6个NVSwitch连接的话,PCB设计会过于复杂,难以生产;另一种猜测则基于机器结构设计和散热方面的考虑。无论怎么说,英伟达通过“8×GPU-6×NVSwitch-6×NVSwitch-8×GPU”的设计,完成了一个史无前例的复杂系统,并带来了革命性的优势。

英伟达公布的NVSwitch连接方案示意图,更为清晰、明朗。

其中一个显著的优势则来自于通讯一致性。在之前的DGX-1中由于跨GPU之间的数据需要额外的转发,因此远程访问将是不一致的,通常的解决方法是增加缓存或延迟发送,但这无疑降低了效率并额外增加了负载,同时也使得利用统一内存变得更为困难。

但是借助于NVSwitch,在DGX-2上,每颗GPU都可以以相同的延迟和速度和其他GPU进行通讯,因此大型AI工作负载可能利用这个特性进行并行工作,大大提高了效率。在GTC 2018上,借助于这样的一致性,英伟达称DGX-2为“世界上最大的GPU”。在这种系统中,由于每颗GPU都和其他GPU相连,因此内存统一访问的问题已经被大大简化,现在可能存在高达512GiB的高带宽(HBM2)内存被虚拟化后视作一个统一内存,GPU和NVSwitch也都实现了算法来辅助内存子系统。

英伟达公布的DGX-2结构图,清晰可见上下两层PCB,每层8颗GPU。

就程序而言,不需要再等待或者将其看作多个GPU,整个机器可以被看做一个大型独立的GPU方案,这使得大量的应用在计算中拥有最好的效能和最方便的程序设计。NVSwitch的出现,大大降低了多GPU系统优化的难度。

连接更多的可能

从上文的介绍可以看出,NVLink 2.0和NVSwitch的出现,使得GPU从之前的“多路系统”变成虚拟意义上的“单一GPU”。实际上,目前英伟达推出的DGX-2并没有彻底发挥NVSwitch的实力,毕竟DGX-2采用的是英特尔方案,GPU依旧需要采用PCIe总线和CPU通讯,如果是IBM的Power 9,NVlink 2.0和NVSwitch系统的性能想必会更为出色。

理论上来说,NVSwitch支持更多的GPU连接,不仅仅只是16颗GPU。从NVSwitch设计来看,对应连接的系统最多支持18颗GPU,更大规模的GPU在部分应用中可以带来显著的性能提升。显然,随着英伟达不断在GPU上推进技术发展,NVSwitch规模进一步扩大、NVlink连接进一步增多的话,DGX系统将更快、更大、更适合未来计算的需求。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
示波器使用时要注意的19个问题