编者按:
那么,GPU是什么?我们为什么需要GPU?随着ChatGPT等大语言模型(LLM)横空出世,GPU又为何引来各大科技公司抢购?今天和大家一起聊聊。
8年前,高考结束后的暑假,作为班里的“电脑爱好者”,我经常被同学们问上大学配什么新电脑。当时的我告诉大家,配好电脑有两个东西很重要,一个叫CPU,决定电脑反应速度的快慢;另一个叫GPU,负责图形的运算,玩电脑游戏流畅可得靠它。
那时候的GPU,在大家印象里就是用来打游戏的。然而8年后的今天,随着ChatGPT等大语言模型(LLM)横空出世,能够处理人工智能高性能计算的GPU突然引来各大科技公司抢购。自称为“人工智能计算领域的领导者”的GPU生产商英伟达(NVIDIA)在一年内股价飙升,6月19日更是一跃成为全球市值最高的公司。想买台带GPU的电脑的同学,申请“爸妈轮天使投资”的理由也变成了“我想学人工智能”。
Part.1
GPU能做的事情CPU都能做?我们为什么需要GPU
比起GPU,大家可能更熟悉的还是计算机的CPU,全称为中央处理单元(Central Processing Unit)。CPU是计算机的“大脑”,它支配计算机中的其他部件,协同完成网页浏览、游戏渲染、视频播放等等一切“计算任务”。CPU决定了计算机的运行速度,有一句网络用语是“把我CPU干烧了”,就是用CPU工作温度过高失灵,来比喻脑子里的事情太多太复杂,脑子转不过来了。
上为CPU是计算机的“大脑”(图片来源:veer);
下为英特尔(Intel)i9-12900KS CPU(图片来源:hothardware)
而GPU也是被CPU支配控制的部件之一。GPU全称为图形处理单元(Graphic Processing Unit),主要功能是完成图形处理相关任务,以GPU为核心的主板扩展卡就是大家在买电脑时经常听说的显卡。
理论上,所有能由GPU完成的计算任务,都能由CPU完成。一台电脑没有独立GPU仍然能够正常开机,但若是没了CPU就“臣妾不能够了”。既然如此,我们为什么还要花大价钱去买GPU呢?因为,就像我们不能抛开剂量谈毒性,计算机也不能抛开“性能”谈“功能”。
对于游戏渲染、人工智能这些计算任务,CPU并不擅长,虽然也能从功能层面上完成,但性能表现十分有限。对于游戏渲染而言,性能的局限性体现在更低的帧率,更粗糙的画质上,也许无伤大雅。但在人工智能的应用上,以大语言模型GPT为案例分析,如果仅使用CPU的话,其训练时间将长达数百年,这样的速度显然不能满足我们对于人工智能技术突破的渴望。
Part.2
GPU是如何实现加速的?从并行架构的角度看GPU与CPU的区别
在开始讨论之前,我们需要进行一个类比:计算机中的一个程序,可以类比成由一连串运算题组成的试卷——计算机科学家们的祖师爷艾伦·图灵就是这么构想计算机程序的。当然,这些运算题有难有易,有小学生就能轻松应对的四则运算,也有高中生可以玩转的三角函数,还有大学生才能完全掌握的微积分。
计算机科学家曾希望CPU可以像一位经验老道的“数学家”,发挥他的计算能力(计算指令)、敏锐的决策力(控制指令)快速地完成试卷(程序),得到用户想要的结果。而随着计算机的程序越来越复杂,“老数学家”的能力逐渐不能满足要求了,他主要的缺点是:即使每道题都能算得很快,但任何时间都只能一心一意地算一道题。
于是,英特尔、IBM、AMD等公司开始意识到,可以在一个CPU内“聘请”多位数学家,也就构成了目前常见的多核CPU。当然受限于芯片散热、良率的约束,多位数学家中的每一位都不像的从前的那么强,可能更像是多位准备参加高等数学考试的“大学生”。——为什么是准备参加呢?因为考完试就忘了(扎心)。
GPU则可以类比成约由几千到上万个“小学生”核心组成的大型计算团队。相比于大学生核心,单个小学生核心只能计算更简单的运算,且计算速度也仅有大学生的1/4~1/3。下图展示了英伟达H100 GPU的架构,“小学生”核心对应图中的绿色小格子,一共有18432个。一万多名小学生核心先被层层划分成为上百个“班级”,在班级内部再动态划分成32-64人一组的“值日小组”。
英伟达H100 GPU架构图,GPU中包含了众多小核心,按照层次结构进行组织
图片来源:英伟达H100架构白皮书
该如何让这么多小学生核心高效协作呢?像CPU一样让每个小学生都独立完成试卷,显然不是一个理智的方案。为了解决协同问题,英伟达GPU增加了一条规则限制:每个“值日小组”内的所有核心(线程)在同一时间只能执行一种运算操作(指令),而一个或多个值日小组(可以跨越班级)可以被组织起来共同完成一张程序试卷,这种协同工作模式被称为单指令多线程并行(Single instruction, multiple threads,简称为SIMT),是英伟达GPU运作的核心模式。我们用一张示意图对比CPU和GPU的并行运作方法。
多核与SIMT并行方式差异的示意图(作者自制)
聪明的你应该已经意识到,这种奇妙的组织方式会让CPU和GPU所能做答的试卷产生明显的区别。如果CPU(单个核心)的试卷长这样:
已知:
a = 1, b = 2, c = 3
又知:
d = a * 2
e = d + b
f = c / e
求: f
已知:
a0 = 1, a1 = 2, a2 = 3,
b0 = 4, b1 = 5, b2 = 6,
c0 = 7, c1 = 8, c2 = 9
又知:
d0 = a0 * 2
d1 = a1 * 2
d2 = a2 * 2
e0 = d0 + b0
e1 = d1 + b1
e2 = d2 + b2
f0 = c0 / e0
f1 = c1 / e1
f2 = c2 / e2
求: f0, f1, f2
这也太奇怪了!怎么会有人出这样的试卷呢?事实情况是:图形渲染和人工智能应用恰好符合这样的特点。对于图形渲染而言,输入的3D图形是由众多离散的点坐标组成的,在渲染过程中需要并行地对多个点进行相同的位置转换、光照运算;在人工智能应用中,现实世界输入的图像、文字被表达成了大规模的矩阵和向量,而矩阵和向量之间的运算操作也可以抽象成多个数值并行执行相同的运算,正中SIMT并行的下怀!
Part.3
如何乘上AI的“东风:从GPU到GPGPU
1999年,英伟达发布了世界上第一款GPU——GeForce 256,它集成了变换、裁剪及渲染等图形计算的硬件加速,也因此被命名为图形处理单元。
早期GPU的可编程性很弱,大多数用户只能调用固定的编程接口进行固定的图形操作。但是一些具有前瞻视野的计算机科学家意识到了GPU可挖掘的并行计算潜力,他们尝试将洋流模拟、大气模拟等科学计算问题映射转换成GPU可支持的图形操作,并获得了性能收益。
也许是受到了这种“歪打正着”的应用场景启发,2007年英伟达推出了CUDA(Compute Unified Device Architecture)编程框架,向开发者全面放开了GPU的可编程能力。借助CUDA,用户可以用类似C/C++的编程方式编写适用于GPU的并行程序。从此,GPU的名字变成了GPGPU(General-purpose computing on graphics processing units),多出来的GP表达了对通用性的支持。
在比CUDA推出稍早一点的2006年,人工智能泰斗Hinton及其团队改进了深度神经网络的训练方法,属于“连接主义学派”的深度学习方法开始回暖。到了2012年,图像分类模型 AlexNet 赢得了 ImageNet 竞赛,激发了深度学习研究的热情,借助GPGPU进行训练的方法开始被广泛采纳。2014年,NVIDIA推出了cuDNN深度学习加速库,让基于GPU的深度学习训练变得更加容易。
之后的故事我们逐渐熟悉,2016年谷歌的人工智能围棋软件AlphaGo击败韩国棋手李世石,在AlphaGo的早期版本中,谷歌使用了176块GPU支撑其运行。
2022年末,聊天机器人ChatGPT惊艳登场,引发了人们对于人工智能技术新一轮的憧憬。ChatGPT是一种大语言模型,能够基于海量文本数据的训练,通过机器学习理解并生成人类语言。尽管缺乏公开数据支持,但是相关领域研究者普遍认为OpenAI公司采用了数千到数万块当时顶级的NVIDIA A100 GPU以支持训练。
在此背景下,支撑大模型算力需求的GPU正成为各大科技企业争夺的“紧俏货”。作为具有垄断地位的厂商,英伟达在这场人工智能的狂潮中,凭借十余年的技术积累,成功抓住了机遇,完成了从“游戏处理器”到“人工智能计算平台”的华丽转身,可谓是“好风凭借力,送我上青云”。
英伟达在GPU领域处于全球垄断地位,然而受限于美国政府的出口限制,高端GPU型号对我国处于禁售状态。开发设计具有独立自主知识产权的人工智能计算平台,是我国计算机科研人员当前发力的重点问题之一。
推荐资源