GPU如何主宰人工智能和计算

智能计算 时间:2024-04-03来源:半导体产业纵横

三十年前,CPU 和其他专用处理器处理几乎所有计算任务。那个时代的显卡可以加速 Windows 和应用程序中 2D 形状的绘制,但没有其他用途。

快进到今天,GPU 已经成为行业中最主要的芯片之一。

如今,GPU 不再仅仅是用于图形处理的设备——实际上机器学习和高性能计算已经严重依赖于这个看似微不足道的 GPU 的处理能力。让我们一起探讨这一芯片是如何从一个朴素的像素处理器演变成具有强大浮点计算能力的核心设备的。

起初 CPU 主宰一切

让我们回到 20 世纪 90 年代末。高性能计算领域,涵盖了超级计算机上的科学研究、标准服务器上的数据处理以及工作站上的工程和设计任务,完全依赖于两种类型的 CPU:1)专为某一特定目的而设计的专用处理器;2)来自 AMD、IBM 或英特尔的现成芯片。

ASCI 红色超级计算机是 1997 年最强大的超级计算机之一,由 9,632 颗英特尔奔腾 II Overdrive 处理器组成(如下图所示)。每个处理器单元运行在 333 MHz 的频率下,系统的理论峰值计算性能达到了超过 3.2 TFLOPS(每秒万亿次浮点运算)。

来源:维基百科

在本文中,我们经常会提及 TFLOPS,因此有必要花一些时间来解释一下它的含义。在计算机科学中,浮点数(floating points,简称浮点)是表示非整数值的数据类型,例如 6.2815 或 0.0044。整数值常用于进行控制计算机及其上运行的任何软件所需的计算。

浮点数对于精度至关重要的情况至关重要,尤其是与科学或工程相关的任何事物。即使是一个简单的计算,比如求圆的周长,也至少涉及到一个浮点数值。

多年来,CPU 一直拥有用于在整数和浮点数上执行逻辑运算的单独电路。在前文提到的奔腾 II 过载版中,它可以在每个时钟周期内执行一个基本的浮点操作(乘法或加法)。理论上,这就是为什么 ASCI Red 的浮点峰值性能为 9,632 个 CPU x 3.33 亿个时钟周期 x 1 操作/周期 = 3,207,456 百万 FLOPS。

这些数据是基于理想条件(例如,使用最简单的指令处理适合缓存的数据),在现实中很难实现。然而,它们为评估系统潜在性能提供了一个很好的参考。

其他超级计算机也拥有类似数量的标准处理器——位于劳伦斯利弗莫尔国家实验室的蓝色太平洋使用了 5808 个 IBM 的 PowerPC 604e 芯片,洛斯阿拉莫斯国家实验室的蓝色山脉(见上图)容纳了 6144 个 MIPS Technologies R1000 芯片。

要达到太浮点运算级别,需要数千个 CPU,以及大量的 RAM 和硬盘存储作为支持。因为这些设备的数学需求如此之高,直到现在这种情况仍然存在。

当我们在学校的物理、化学和其他学科中第一次接触方程式时,一切都是一维的。换句话说,我们对距离、速度、质量、时间等使用单一的数字。然而,为了准确地建模和模拟现象,需要更多的维度,数学进入了向量、矩阵和张量的领域。

这些在数学中被视为单一实体,但包含多个值,这意味着任何进行计算的计算机需要同时处理大量数字。考虑到当时的 CPU 每周期只能处理一到两个浮点数,因此需要数千个 CPU。

SIMD 加入战局:MMX,3DNow! 和 SSE

1997 年,英特尔更新了 Pentium CPU 系列,引入了一项名为 MMX 的技术扩展——一组在核心内部利用八个附加寄存器的指令。每个寄存器被设计成存储一到四个整数值。这种系统允许处理器在多个数值上同时执行单条指令,这种方法更为人所熟知的是 SIMD(单指令,多数据)。

一年后,AMD 推出了自己的版本,名为 3DNow!。由于寄存器可以存储浮点值,这使得 3DNow! 明显优于 MMX。又过了一年,英特尔在奔腾 III 中引入了 SSE(流式单指令多数据扩展),解决了 MMX 中的问题。

3DNow! 首次亮相于 AMD K6-2 CPU。来源:Fritzchens Fritz

随着时间推移,高性能计算机设计者们已经能使用可高效处理向量数学的标准处理器。

经过千百万次的扩展,这些处理器可以同样高效地处理矩阵和张量。尽管取得了这一进步,但超级计算机领域仍更青睐旧式或专用芯片,因为这些新扩展并未专为此类任务而设计。此外,还有另一种比 AMD 或 Intel 的任何 CPU 更擅长 SIMD 处理的迅速流行处理器:GPU。

在图形处理器的早期,CPU 处理场景中组成三角形的计算(因此,AMD 为其 SIMD 实现使用了 3DNow! 这个名字)。然而,像素的着色和纹理处理完全由 GPU 负责,并且这项工作的许多方面涉及到矢量数学。

20 多年前最好的消费级显卡,如 3dfx Voodoo5 5500 和 Nvidia GeForce 2 Ultra,都是出色的 SIMD 设备。然而,它们是为制作游戏的 3D 图形而创建,没有其他用途。即使在专业市场上的显卡也完全专注于渲染。

来源: The Time Trekking Technologist

ATI 的 ATI FireGL 3 配备了两个 IBM 芯片(一个 GT1000 几何引擎和一个 RC1000 栅格化器),高达 128 MB 的 DDR-SDRAM,以及声称的 30 GFLOPS 的处理能力。然而,所有这些都是为了加速像 3D Studio Max 和 AutoCAD 这样的程序中的图形渲染,使用的是 OpenGL 渲染 API。

那个时代的 GPU 并没有配备用于其他用途的功能,因为将 3D 对象变换并转换为显示器图像的过程并不涉及大量的浮点运算。实际上,其中很大一部分是整数级别的运算,而且在显卡开始在整个管道大量使用浮点值之前还需要几年时间。

其中最早的一个是 ATI 的 R300 处理器,它拥有 8 个独立的像素管线,可以以 24 位浮点精度处理所有数学运算。遗憾的是,除了图形处理之外,无法利用其强大的性能——硬件和相关软件都完全以图像为中心。

计算机工程师并非对于 GPU 具有大量 SIMD 能力但缺乏将其应用于其他领域的途径一无所知。令人惊讶的是,正是一款游戏主机向我们展示了如何解决这个棘手问题。

统一的新时代

2005 年 11 月,微软的 Xbox 360 上市,搭载了一款由 IBM 设计制造、基于 PowerPC 架构的 CPU,以及一款由 ATI 设计、由 TSMC 制造的 GPU。

这款名为 Xenos 的显卡芯片非常特殊,因为其布局完全摒弃了传统的分离顶点和像素管道的方法。

Xenos 激发了一种至今仍在使用的设计范例的出现。

来源:Oleg Kashirin

取而代之的是一个由三组 SIMD 阵列组成的簇。具体来说,每个簇包含 16 个向量处理器,每个处理器包含 5 个数学单元。这种布局使每个阵列能够在一个周期内同时对 80 个浮点数据值执行来自线程的两个顺序指令。

统一着色器架构使得每个阵列都能处理任何类型的着色器。尽管这使芯片的其他方面变得更为复杂,但 Xenos 引发的设计模式至今仍在使用。在 500 MHz 的时钟速度下,整个集群理论上可以实现 240 GFLOPS(500 x 16 x 80 x 2)的处理速度,用于执行三个线程的乘-加指令。

为了让这个数字更具规模感,我们可以将其与 10 年前世界顶级超算的速度进行对比。例如,1994 年位居世界超算之首的桑迪亚国家实验室的 Aragon XP/S140,其拥有 3,680 个英特尔 i860 CPU,峰值达到了 184 GFLOPS。芯片发展的步伐迅速超过了这台机器,但 GPU 的情况也是如此。

多年来,CPU 已经将 SIMD 阵列集成到自己的设计中,例如,英特尔最早的奔腾 MMX 就拥有一个专用单元来处理向量上的命令,其中包括多达 8 个 8 位整数。到 Xbox 的 Xenos 在全球家庭中应用的时候,这样的单元至少已经扩大了两倍,但相较于 Xenos 中的单元,它们仍然显得很小。

来源:Fritzchens Fritz

当消费级显卡开始采用统一着色器架构的 GPU 时,它们已经具有比 Xbox 360 图形芯片更高的处理速率。

英伟达的 G80(如上图所示),用于 GeForce 8800 GTX(2006)的理论峰值达到了 346 GLFOPS,而 ATI 的 R600 在 Radeon HD 2900 XT(2007)上宣称达到了 476 GLFOPS。

两大显卡制造商很快在其专业型号上利用这种计算能力。虽然价格昂贵,但 ATI FireGL V8650 和 Nvidia Tesla C870 非常适合高端科学计算机。然而,在最高水平上,全球的超级计算机仍继续依赖标准 CPU。事实上,在 GPU 开始出现在最强大的系统之前还需要过去几年时间。

那么,鉴于 GPU 显然能提供显著的处理速度,为什么它们一开始就没有被使用呢?

超级计算机及类似系统的设计、建造和运行成本极高。多年来,它们都是围绕着大量 CPU 构建的,因此,一夜之间整合其他处理器并非易事。这样的系统需要进行彻底的规划和初步的小规模测试,然后逐步增加芯片数量。

其次,要让所有这些组件在软件方面协调运行并非易事,这对当时的 GPU 来说是一个重大的弱点。尽管 GPU 已经具有高度可编程性,但之前为它们提供的软件还是相当有限的。

Microsoft 的 HLSL(高级着色器语言),英伟达的 Cg 库和 OpenGL 的 GLSL 使访问图形芯片的处理能力变得简单,尽管这仅用于渲染。

所有这些都随着统一着色器架构 GPU 的出现而发生了改变。

在 2006 年,当时已成为 AMD 子公司的 ATI 和英伟达发布了旨在将此功能用于不仅仅是图形处理的软件工具包,它们分别使用名为 CTM(Close To Metal)和 CUDA(计算统一设备架构)的 API。

科学和数据处理领域的研究人员真正需要的是一个全面的解决方案——一个能将庞大的 CPU 和 GPU 阵列(通常称为异构平台)作为一个由众多计算设备组成的单一实体。

2009 年,他们的需求得到了满足。最初,OpenCL 是由苹果公司开发的,后来由接管 OpenGL 的 Khronos Group 发布。如今,OpenCL 已成为在日常图形外使用 GPU 的事实上的统一软件平台。而当时人们称这个领域为 GPGPU,即指在 GPU 上进行通用计算,这个概念由 Mark Harris 首创。

GPU 加入计算竞赛

与庞大的科技评论世界不同,全球并没有数百名评论家在测试超级计算机的性能声明。然而,自 20 世纪 90 年代初以来,德国曼海姆大学的一个持续进行的项目就旨在实现这一目标。

被称为 TOP500 的组织,每年发布两次全球十大最强大超级计算机的排名榜单。

2010 年榜单上首次出现了装备 GPU 的计算机,这两台来自中国的系统分别是星云和天河一号。星云使用了英伟达的 Tesla C2050(实质上是 GeForce GTX 470,如下图所示),而天河一号则采用了 AMD 的 Radeon HD 4870 芯片。前者具有理论峰值 2,984 TFLOPS。

来源: Fritchens Fritz

在早期高端 GPGPU 时代,英伟达成为了配置计算巨擘的首选厂商,并非因为性能上的优势——通常 AMD 的 Radeon 显卡具有更高的处理性能——而是因为软件支持。CUDA 得到了快速的发展,而在 AMD 推出合适的替代方案之前,还需要几年的时间,这就促使用户选择使用 OpenCL。

然而,英伟达并没有完全垄断市场。英特尔的 Xeon Phi 处理器也试图在市场上占有一席之地。这些处理器源自一个被终止的名为 Larrabee 的 GPU 项目,它构成了一个奇特的 CPU-GPU 混合体。Xeon Phi 处理器由多个类似 Pentium 的核心(即 CPU 部分)组成,并搭配了大型浮点运算单元(即 GPU 部分)。

对 Nvidia Tesla C2050 内部的检查展示了 14 个被称为流式多处理器(SMs)的模块,这些模块通过缓存和中央控制器进行划分。每个模块中包含 32 组逻辑电路(英伟达称之为 CUDA 核心),分别负责执行整数值和浮点数的所有数学运算。对于后者,每个核心每个时钟周期可以处理单精度(32 位)的一次 FMA(融合乘加)操作;而双精度(64 位)操作至少需要两个时钟周期。

Xeon Phi 芯片中的浮点处理单元(如下图所示)似乎有相似之处,但每个核心处理的数据量只有 C2050 中一个 SM 的一半。尽管如此,与特斯拉的 14 个 SM 相比,单个 Xeon Phi 处理器有 32 个重复的核心,因此每个时钟周期总体上可以处理更多的数据。然而,英特尔首次发布的芯片更像是一个原型,并未完全发挥其潜力。相较而言,英伟达的产品运行速度更快、功耗更低,并最终被证明更胜一筹。


在 AMD、英特尔和英伟达三家公司的 GPGPU 竞争中,这成为了一个反复出现的主题。其中一个公司的产品可能在处理核心数量上占优势,而另一个公司的产品可能在时钟速度上更快,或拥有更强大的缓存系统。

CPU 在各种类型的计算中仍然不可或缺,许多超级计算机和高端计算系统仍然采用 AMD 或 Intel 处理器。虽然单个 CPU 在 SIMD 性能上无法与一般 GPU 竞争,但当它们以数千计连接在一起时,表现就相当不错了。然而,这样的系统在功耗效率方面欠佳。

例如,在 Radeon HD 4870 GPU 被用于天河一号超级计算机的同时,AMD 的顶级服务器 CPU(12 核 Opteron 6176 SE)也在广泛应用。虽然 CPU 的功耗约为 140W,理论上可达到 220 GFLOPS 的性能,但仅增加 10W 功耗的 GPU 则可提供高达 1,200 GFLOPS 的峰值性能,且成本只是 CPU 的一小部分。

一块能做更多事的「小显卡」

几年后,不仅是世界上的超级计算机在使用 GPU 进行大量并行计算,英伟达也积极推广其 GRID 平台,这是一项用于科学和其他应用的 GPU 虚拟化服务。最初,它作为一个托管云端游戏的系统推出,但在 GPGPU 大规模、低成本需求不断增长的推动下,发生了这一转变。在英伟达的年度技术会议上,GRID 作为各个行业工程师们的重要工具展示出来。

在同一活动中,GPU 制造商展示了一个未来架构的概要,代号为 Volta。发布的细节很少,人们普遍认为这将是另一款面向英伟达所有市场的芯片。

与此同时,AMD 也在开展类似的项目。他们通过不断更新其游戏型 Radeon 系列、服务器型 FirePro 和 Radeon Sky 系列显卡的图形核心下一代(GCN)设计。当时的性能表现令人惊叹,FirePro W9100 的峰值 FP32 吞吐量达到 5.2 TFLOPS(32 位浮点),这一数据在不到二十年前的超级计算机上难以想象。

尽管 GPU 设计的初衷主要还是为了 3D 图形处理,但随着渲染技术的发展,这些芯片必须在处理通用计算任务方面表现出越来越高的性能。然而,唯一的问题在于它们处理高精度浮点数计算(即 FP64 或更高精度)的能力有限。

回顾 2015 年全球顶级超级计算机,使用 GPU 的数量相对较少,不论是 Intel 的 Xeon Phi 还是英伟达的 Tesla,与完全基于 CPU 的计算机相比,GPU 使用的数量都很少。

2016 年,随着英伟达发布 Pascal 架构,一切都发生了变化。这是该公司首次将重点放在专为高性能计算市场设计的 GPU 上,其他产品则适用于多个行业。在 Pascal 架构中,仅有一种型号(GP100)产品是针对高性能计算市场的,并仅衍生出 5 款相关产品。但是,在以往的架构中,只有少数几个 FP64 核心,而这款芯片则拥有接近 2000 个 FP64 核心。

机架式装置中的 8 个 P100 显卡。来源:ComputerBase

随着特斯拉 P100 提供超过 9 TFLOPS 的 FP32 处理能力和一半的 FP64 处理能力,这款图形卡非常强大。相比之下,AMD 的 Radeon Pro W9100 使用 Vega 10 芯片,在 FP32 性能上提速 30%,但在 FP64 性能上却慢了 800%。此时,由于销售疲软,英特尔即将停产 Xeon Phi 处理器。

一年后,英伟达终于发布了 Volta 架构,立刻表明公司不仅仅关注将其 GPU 引入高性能计算(HPC)和数据处理市场,还瞄准了另一个市场。

神经元、网络,真是惊奇无比

深度学习是在更广泛的机器学习领域内的一个子领域,而机器学习又是人工智能的一个子集。深度学习涉及使用复杂数学模型,即神经网络,从给定数据中提取信息。

一个例子是判断给定图片描绘的是否为特定动物的概率。要做到这一点,模型需要进行「训练」——以这个例子为例,训练过程中要展示数百万张该动物的照片,以及数百万张未出现该动物的照片。涉及到的数学计算主要基于矩阵和张量运算。

几十年来,这种工作负载一直只能由基于 CPU 的超级计算机承担。然而,早在 2000 年代初期,人们已经认识到 GPU 非常适合处理这样的任务。

尽管如此,英伟达把赌注押在深度学习市场的显著扩张上,并在其 Volta 架构中添加了特殊功能以在这一领域中脱颖而出。这个功能被称为张量核心,它包括多个 FP16 逻辑单元,组成一个大阵列,但其功能较为有限。

Pascal(左)和 Volta(右)

实际上,它们的功能非常有限,只能执行一个操作:将两个 FP16 4x4 矩阵相乘,然后将另一个 FP16 或 FP32 4x4 矩阵加到结果上(这个过程称为 GEMM 操作)。英伟达以及竞争对手之前的 GPU 也能执行这样的计算,但速度远不如 Volta。这个架构下的唯一一款 GPU,GV100,共有 512 个张量内核,每个内核能在一个时钟周期内执行 64 个 GEMM 操作。

根据数据集中矩阵的大小以及所使用的浮点数大小,Tesla V100 显卡在进行张量计算时理论上可以达到 125 TFLOPS 的性能。显然,Volta 是为一个小众市场而设计的。尽管 GP100 在超级计算机领域的应用较为有限,但新型的 Tesla 显卡却迅速被广泛采用。

随后,英伟达在其后续的图灵架构中为普通消费类产品添加了张量核心,并开发了名为 DLSS(深度学习超采样)的图像放大技术。DLSS 利用 GPU 中的核心运行神经网络对图像进行放大,同时纠正帧中的任何失真。

有一段时间,英伟达在深度学习领域的 GPU 加速市场一家独大,数据中心业务的收入飙升,在 2017 财年、2018 财年和 2019 财年分别达到了 145%、133% 和 52% 的增长。到 2019 财年末,高性能计算、深度学习等市场的销售收入累计达到 29 亿美元,取得了非常显著的成果。

市场随后迎来了爆炸式增长。2023 年最后一个季度,公司的总收入达到了 221 亿美元,同比暴增达到了 265%。大部分增长是由公司的人工智能项目带来的,贡献了 184 亿美元的收入。

然而,在利润丰厚的领域,竞争自然难以避免。尽管英伟达仍是顶级 GPU 供应商,但其他大型科技公司也绝非甘于落后。

2018 年,谷歌开始通过云服务提供自家开发的张量处理芯片(Tensor Processing Chips)的访问。不久之后,亚马逊也跟进推出了专门的 CPU——AWS Graviton。同时,AMD 正在重组其 GPU 部门,形成了两个截然不同的产品线:一个主要面向游戏(RDNA),另一个专门用于计算(CDNA)。

尽管 RDNA 与其前身有显著不同,但 CDNA 实际上可以看作是 GCN 的自然演进,只不过是放大到了庞大的规模。如今,观察用于超级计算机、数据服务器和 AI 机器的 GPU,一切都呈现出巨大的规模。

AMD 的 CDNA 2 驱动的 MI250X 配备了 220 个计算单元,提供了接近 48 TFLOPS 的双精度 FP64 吞吐量,以及 128 GB 的高带宽存储器(HBM2e)。这两方面在高性能计算应用中都备受追捧。而英伟达的 GH100 芯片,采用 Hopper 架构和 576 个张量核心,在 AI 矩阵计算中使用低精度的 INT8 数字格式,可以潜在地达到 4000 TOPS。

英特尔的 Ponte Vecchio GPU 同样庞大,拥有 1000 亿个晶体管,而 AMD 的 MI300 多了 460 亿,由多个 CPU、图形和内存芯片组成。

然而,这些产品都有一个共同之处,那就是它们并不是真正的 GPU。在英伟达将这个术语当作营销工具之前,GPU 这个缩写代表的是图形处理单元。AMD 的 MI250X 根本没有光栅输出单元(ROPs),即使是 GH100 在 Direct3D 性能方面也只类似于 GeForce GTX 1050,使得 GPU 中的「G」变得无关紧要。

那么,我们还能称呼它们为什么呢?

「GPGPU」并不理想,因为它表述得较笨拙,是指在通用计算中使用 GPU,并非指设备本身。"HPCU"(高性能计算单元)也好不到哪去。但也许这并不是很重要。

毕竟,「CPU」这个术语相当宽泛,涵盖了各种不同类型的处理器和用途。

下一个 GPU 征服的领域是什么?

随着英伟达、AMD、苹果、英特尔以及其他数十家公司投入数十亿美元进行 GPU 研究和开发,现今的图形处理器短时间内不太可能被截然不同的技术所替代。

对于渲染,最新的 API 和使用它们的软件包(如游戏引擎和 CAD 应用程序)通常对运行代码的硬件并不挑剔。因此,从理论上讲,它们可以很容易地适应一种全新的硬件设备。

然而,在 GPU 中只有相对较少的部件专门用于图形处理,其中最明显的是三角形设置引擎、光栅化操作处理器(ROPs),以及在最近的版本中,高度专用的光线追踪单元。然而,其余部分基本上是一个大规模并行的 SIMD 芯片,由强大且复杂的存储器/缓存系统支持。

基本设计已经非常成熟,未来的提升主要依赖于半导体制造技术的进步。换句话说,它们只能通过增加更多逻辑单元、提高时钟速度或二者结合来实现进一步的优化。

当然,可以将新功能整合到 GPU 中,从而让它们在更广泛的场景中发挥作用。在 GPU 历史上,这样的事情已经发生过多次,而统一着色器架构的过渡尤为重要。虽然专用硬件处理张量或光线追踪计算更为理想,但现代 GPU 的核心也能够胜任这些任务,尽管速度较慢。

正因如此,像 AMD MI250 和英伟达 GH100 这样的产品与其桌面 PC 对应产品有着极为相似的外观,而未来用于高性能计算和人工智能的设计也很可能会延续这一趋势。那么,如果芯片本身并没有发生重大变化,它们的应用领域会有什么变化呢?

谷歌的 Coral 加速板搭载了两颗 Edge TPU 芯片

与人工智能相关的领域实质上都属于计算领域。在需要执行大量 SIMD 计算的场景下,GPU 很可能会被用到。虽然现今科学与工程领域中很多行业已经在利用这些处理器,但未来我们还可能见证 GPU 衍生品应用的迅猛增长。

如今,人们可以购买到配备了专用于加速张量计算的微型芯片的手机。随着像 ChatGPT 这样的工具在性能和受欢迎程度上的不断提升,我们将看到更多搭载此类硬件的设备。

作为简单的图形处理器,GPU 最初只是为了加速游戏运行而设计,但如今已经演变成一种全方位的加速器。它在全球范围内助力各种工作站、服务器以及超级计算机的运行。

全球数百万人每天都在使用这些技术——不仅在我们的电脑、手机、电视和流媒体设备中,还包括在使用整合了语音和图像识别的服务,以及提供音乐和视频推荐的服务时。

GPU 的未来可能是未知领域,但有一点可以肯定:在未来的几十年里,图形处理单元将继续作为计算和 AI 领域的主导工具。

关键词: GPU

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版