NVIDIA GPGPU通信架构
吃果冻不吐果冻皮 2024年07月18日 11:50 四川
以下文章来源于大模型新视界 ,作者Bruce 仗剑走天涯
写在前面
此一部分,介绍nvlink、nccl、nvswitch、gpgpu 之间的具体联动关系。侧重于介绍通信系统本身,以及和计算的耦合性,Nvlink & nvswitch system 为 nvidia gpgpu 大规模计算和超大算力的支持可以说是十分重要的,为此有必要单列一章进行分析介绍。
NVLink 之前
传统互联通路的失灵 - PCIE太慢了
PCIe 技术是PCI 技术的扩展,最初由Intel 于2001年公布,原名3GIO(第三代IO),在2002年由PCI-SIG 审核通过,改名为PCI express,此后,每一代带宽都是前一代的2倍,PCIE gen 5 每lane为32Gbps,折合为3938MB/s,gen 5 x16 即为64GB/s。2022年公布PCie gen 6 specification,每lane 带宽为64Gbps,x16 可达1Tbps 以上。
第一代Nvlink 起于pascal,2016年,Pcie 3.0 时期,彼时,gen3 x16的带宽只有128Gbps,也就是16GB/s,而且是机器上所有的设备只能共享这个带宽,而显然对于一机8卡的GPU 高性能计算需求,是远远不够的,如果按GPU 独占带宽,且8卡均衡带宽计算,每卡不过16Gbps(2GB/s),何况NIC 网卡本身也是一个PCIE 的带宽的消费者,算上带宽竞争,则更加寥寥。
P 100 提出的带宽需求是多少?是什么促使NVIDIA 彻底抛弃PCIE,走向了自研高速互联协议呢?
我们查看白皮书,P100的32位浮点计算能力为10.6TFLOPS,也就是说每秒执行10.6 * 10^12 次32位浮点计算,如果每个浮点都是GPU外搬运而来且完全不复用旧数据,则需要10.6 * 10 ^ 3 * 32 Gbps的带宽,40000 GB/s,当然实际上不会如此,数据会有一定程度的复用,这和业务相关。不过显然每卡2GB/s的带宽能力,相差20000倍,约等于用户基于1B 及其结果原地计算20000次,要求用户达到这么高的数据复用是不太现实的。
我们比较一下,2016年推出的nvlink v1 实现了多大的带宽呢?
每GPU 有4个nvlink,每个link 单向20GB/s,每卡双向总带宽达160GB/s,这就显然比Pcie 3 x16 提升了2个数量级的带宽,对用户数据复用的要求也大大降低了。
RDMA 网络的介入 - IB/Mellanox products家族
除去传统的PCIE 通路外,CPU 和 传统的TCP 通路也逐渐显现出GPU 训练的带宽窘境,这比Pcie 带宽出现的更早,在2012年,NVIDIA 在kepler 上就推出了GPUdirect的能力,希望数据传输上bypass CPU,且特别指出了RDMA 的使用是对于GPUDirect 的高性能的保证,后来该能力更多被直接称为GPUDirectRDMA,简称GDR。GDR 至今已经10年了,10年前GPU 高性能领域就已经开始慢慢淘汰TCP,而逐步使用RDMA NIC 作为高性能数据计算的基础网卡。
至2020年,Amphere 支持Mellanox NIC 和 相关产品,NVIDIA 收购Mellanox,GDR带宽都在稳步发展,rdma 网络带宽能力,逐步从10Gbps 发展到如今CX 7的400Gbps。
我们也可以简单看一下IB 规格的历史。
虽然2012年的rdma 还是10Gbps的时代,但已经占据了超级计算机互联的绝大部分,至2009年,世界500强超级计算机中,259个使用千兆以太网作为内部互连技术,181个使用InfiniBand。同期的TCP 带宽暂未找到相关数据。
随着cable 性能的提高,rdma/ib 带宽一路高歌猛进,至今CX7 为NDR * 4 = 400Gbps。而2016年,mellanox 率先提出了在网计算协议SHARP,在自研交换机上率先实现了aggregation reduction,也就是交换机实现reduce 计算,简化网络包数的技术。至2020年,Nvidia 收购 mellanox,sharp v2 已经在mellanox 交换机上实现,至今已实现sharpv3且在quantum 中使用,而NCCL 开始支持sharp 的时间是2019年。具体sharp 的原理与收益我们会在之后的章节说明。
NV-SLI /SLI bridge
在提nvlink 之前,我们还需要了解SLI。一种早期的scaleble interface,SLI 用于早期多显卡互联,SLI 互联的GPU,可以共享存储和计算任务,SLI 互联的桥接部件称为SLI Bridge,简图如下。也是从SLI 为起点,诞生出的nvlink,后来的nvlink 可以认为是SLI的升级版本。至今,NVLINK 在Turing 也重新支持了SLI,但是性能相对低(支持路数较少),之后的nvlink 也不再提到SLI的场景,因此怀疑可能和向前兼容有关。
高速互联设备 - NVLink & NVSwitch
NVLINK
Nvlink 自从pascal 架构提出以来,至今已到第四代。每lane的带宽以及每link的带宽数都在增加。<