提到AI算力,人们首先想到的往往是GPU。但从广义上讲,能运行AI算法的芯片都叫AI芯片——CPU、GPU、FPGA、NPU、ASIC都能执行AI算法,只不过在执行效率上差异巨大。CPU虽然能快速执行复杂数学计算,但一旦同时处理多项任务,性能就会明显下降,行业内基本达成共识:CPU并不适合AI计算。
CPU加xPU的异构方案,如今已成为大算力场景的标配,其中GPU是应用最广泛的AI芯片。业内普遍认可的AI芯片类型包括GPU、FPGA、NPU等。由于CPU负责控制调配计算机硬件资源,还要运行操作系统,在现代计算系统中仍不可或缺。GPU、FPGA等芯片本质上都是CPU的翻跟斗,因此主流AI计算系统都采用CPU+xPU的异构并行架构。而CPU+GPU是目前最流行的组合,在HPC、图形图像处理以及AI训练/推理等场景中占据主导地位。IDC数据显示,2021年中国AI芯片市场中,GPU的市占率达到89%。

自GPU诞生以来,NVIDIA和它的竞争对手ATI(后被AMD收购)一直在为显卡增添更多功能。2006年,NVIDIA发布了CUDA开发环境——这是最早被广泛使用的GPU计算编程模型。CUDA将GPU的能力向科学计算等领域开放,标志着GPU演变为一种更通用的计算设备——GPGPU(通用GPU)。此后,NVIDIA顺势推出了面向数据中心的产品线。

GPU性能的持续提升与功能丰富,逐步满足了AI运算的需求。2010年NVIDIA推出的Fermi架构,是首个完整的GPU计算架构,其中提出的许多新概念沿用至今。Kepler架构在硬件上集成了双精度计算单元(FP64),并引入了GPUDirect技术,使GPU能绕过CPU和系统内存,直接与其他GPU进行数据交互。Pascal架构则首次应用了第一代NVLink。
到了Volta架构,Tensor Core登场,这对AI计算加速意义重大。简单回顾NVIDIA GPU的硬件变革历程:工艺进步、计算核心数增加等基础升级持续推动性能提升,同时每一代架构的功能特性也在不断丰富,逐渐更好地适配AI运算的需要。

AI的数据来源广泛,GPU也逐步实现了对各种数据类型的支持。按照精度差异,算力可以从INT8(整数类型)、FP16(半精度)、FP32(单精度)、FP64(双精度)等不同维度来对比。AI应用处理的数据包括文字、图片或视频,数据类型差异很大。一般来说,精度越高准确性越高,但降低精度可以节省运算时间、降低成本。所以,精度的选择本质上是在准确度、成本、时间之间寻找平衡。目前许多AI模型运行半精度甚至整型计算,就能达到符合要求的推理和训练效果。随着架构迭代,NVIDIA GPU支持的数据类型持续丰富——Turing架构的T4开始支持INT8,Ampere架构的A100的Tensor Core则开始支持TF32。

在均衡分配资源的前提下,处理低精度的硬件单元数量更多,因此表现出的算力性能也更高。GPU作为翻跟斗能获得广泛应用,很大程度上得益于它的通用性。为了在不同精度的数据类型上都有良好性能,以兼顾AI、科学计算等不同场景,NVIDIA在分配处理不同数据类型的硬件单元时大体上保持了均衡。因为低精度数据类型的计算占用更少的硬件资源,同一款GPU中处理低精度数据类型的硬件单元数量较多,对应计算能力也更强。以V100为例,每个SM中的FP32单元数量是FP64单元的两倍,最终V100的FP32算力(15.7 TFLOPS)也近似为FP64(7.8 TFLOPS)的两倍。类似的规律在P100、A100和H100等各代旗舰产品中也能看到。

GPU引入特殊硬件单元来加速AI的核心运算环节。矩阵-矩阵乘法(GEMM)是神经网络训练和推理的核心,本质是在网络互连层中将大矩阵输入数据与权重相乘。矩阵乘积的求解需要大量乘积累加操作,而FMA(融合乘加)可以用更少的时钟周期完成这一过程。传统CUDA Core执行FMA指令时,硬件层面需要将数据按“寄存器→ALU→寄存器→ALU→寄存器”的方式来回搬运。2017年发布的Volta架构首次引入了Tensor Core(张量核心),这是NVIDIA研发的新型处理核心。根据NVIDIA数据,Volta Tensor Core可以在一个GPU时钟周期内执行4×4×4=64次FMA操作,吞吐量是Pascal架构下CUDA Core的12倍。

Tensor Core持续迭代,加速能力不断提升。Volta架构引入Tensor Core后,GPU的AI算力有了明显跃升。后续每一代架构升级中,Tensor Core都有较大改进,支持的数据类型也逐渐增多。以A100到H100为例,Tensor Core从3.0迭代到4.0,H100在FP16 Tensor Core的峰值吞吐量提升至A100的3倍。同时,H100 Tensor Core新增了对FP8数据类型的支持,其FP8 Tensor Core吞吐量更是A100 FP16 Tensor Core的6倍。

在Tensor Core加速下,低精度比特位宽的算力呈现爆发式增长,这正好契合了AI计算的需求。选取从Pascal到Hopper架构时期每一代的旗舰数据中心显卡,对比经Tensor Core加速前后的FP16算力指标,可以发现两个规律:第一,经Tensor Core加速后的FP16算力明显高于加速之前;第二,每单位Tensor Core支持的算力远高于每单位CUDA Core支持的算力。同时,Tensor Core自2017年推出以来,首先完善了对低精度数据类型的支持,顺应了AI发展的方向。

数据访问支配着计算能力的利用率。AI运算涉及大量数据的存储与处理,根据Cadence数据,与一般工作负载相比,每台AI训练服务器需要6倍的内存容量。而在过去几十年里,处理器速度随着摩尔定律高速提升,DRAM的性能提升却远远慢于处理器速度。如今,DRAM的性能已经成为整体计算机性能的重要瓶颈——这就是所谓的“内存墙”。除了性能,内存对能效比的限制也日益凸显,Cadence数据显示,在自然语言类AI负载中,存储消耗的能量占比高达82%。

GPU采用高带宽HBM来降低“内存墙”的影响。为了防止占用系统内存,同时提供高带宽和低延迟,GPU都配备了独立内存。常规的GDDR显存焊接在GPU芯片周边的PCB板上,与处理器之间的数据传输速率较慢,存储容量也小,成为运算速度提升的瓶颈。而HBM裸片通过TSV进行堆叠,然后整体与GPU核心通过中介层互连,因此获得了极高的带宽,同时节省了PCB面积。目前,GDDR显存仍是消费级GPU的行业标准,而HBM已成为数据中心GPU的主流选择。

硬件单元的改进与显存升级,增强了单张GPU的算力释放。然而,随着Transformer模型的大规模发展和应用,模型参数量呈爆炸式增长——GPT-3参数量达到1750亿,相比GPT增长了近1500倍,预训练数据量也从5GB提升到了45TB。大模型参数量的指数级增长带来了诸多问题,使得GPU集群化运算成为必然:
第一,即使最先进的GPU,也无法再将模型参数完全拟合到主内存中。第二,即使模型可以安装在单个GPU上(例如通过在主机和设备内存之间交换参数),所需的大量计算操作也可能导致训练时间过长,不进行并行化根本不现实。根据NVIDIA数据,在8个V100 GPU上训练一个1750亿参数的GPT-3模型需要36年,而在512个V100 GPU上训练则只需7个月。

为了解决GPU集群通信问题,NVIDIA开发了NVLink技术。在硬件端,GPU之间稳定、高速的通信是实现集群运算的必要条件。传统x86服务器使用的PCIe互连带宽由其代际与结构决定——例如x16 PCIe 4.0双向带宽仅为64GB/s。此外,GPU之间通过PCIe交互还会与总线上的CPU操作竞争,进一步挤占可用带宽。为了突破PCIe互连的带宽限制,NVIDIA在P100上首次搭载了高速GPU互连技术NVLink(一种总线及通讯协议),使GPU之间不再需要通过PCIe进行交互。

NVLink与NVIDIA GPU架构同步发展,每一种新架构都伴随着新一代NVLink。第四代NVLink为每个GPU提供900 GB/s的双向带宽,比上一代高1.5倍,比第一代NVLink高5.6倍。

在此基础上,NVIDIA又开发了基于NVLink的芯片NVSwitch,充当GPU集群数据通信的“枢纽”。NVLink 1.0技术刚推出时,一台服务器中的8个GPU无法全部实现直接互连。同时,当GPU数量增加时,仅靠NVLink技术需要数量庞大的总线。为了解决这些难题,NVIDIA在NVLink 2.0时期发布了NVSwitch,实现了NVLink的全连接。NVSwitch是一款GPU桥接芯片,可提供所需的NVLink交叉网络,在GPU之间的通信中发挥“枢纽”作用。借助NVSwitch,每颗GPU都能以相同的延迟和速度访问其他GPU。从程序角度来看,16个GPU都被视为一个GPU,系统效率最大化,大大降低了多GPU系统的优化难度。


通过添加更多NVSwitch来支持更多GPU,集群分布式运算得以实现。在训练大型语言模型时,NVLink网络同样能带来显著的性能提升。如今,NVSwitch已成为高性能计算(HPC)和AI训练应用中不可或缺的一环。
