请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
搜索

人工智能时代的算力挑战

人工智能时代的算力挑战-1.jpg

陈永伟/文

最近,OpenAI推出的聊天机器人ChatGPT真可谓是红到发紫。无论是做技术的、做投资的,还是普通网友,好像不聊几句ChatGPT就显得落伍了。当然,在一片对ChatGPT的追捧当中,也有一些不同的意见。比如,图灵奖得主、Meta的首席AI科学家杨立昆(YannLe-Cun)就在社交媒体上发帖说:从底层技术看,ChatGPT并没有什么创新。与其说它是一次巨大的技术革新,倒不如说它是一个工程上的杰作。

杨立昆的这番言论一出,就遭遇到了网友的一片嘲讽,很多人甚至毫不客气地说,作为Meta的AI掌门人,这完全就是一种“吃不到葡萄说葡萄酸”的狡辩。由于Meta先前在同类产品上的失败经历,所以面对如此汹汹的舆论,杨立昆也是百口莫辩,只能就此噤声,不再对ChatGPT进一步发表评论。

不过,如果我们认真回味一下杨立昆的话,就会发现他的话其实是非常有道理的:虽然从表现上看,现在的ChatGPT确实非常惊艳,但从根本上讲,它依然是深度学习技术的一个小拓展。事实上,与之类似的产品在几年前已经出现过,所不同的是,ChatGPT在参数数量上要远远多于之前的产品,其使用的训练样本也要大得多。而它卓越的性能,其实在很大程度上只是这些数量优势积累到了一定程度之后产生的质变。

有意思的是,如果我们回顾一下深度学习的历史,就会发现这种利用神经网络进行机器学习的思路其实在上世纪50年代就有了,可以称得上是人工智能领域最古老的理论之一。早在1958年,罗森布拉特就曾经用这个原理制造了一台机器来识别字符。然而,在很长的一段时间内,这个理论却一直无人问津,即使现在被尊为“深度学习之父”的杰弗里·辛顿(GeoffreyHinton)也长期遭受孤立和排挤。究其原因,固然有来自当时在人工智能领域占主导地位的“符号主义”的打压,但更为重要的是,当时的深度学习模型确实表现不佳。

直到本世纪初,这一切才发生了改变。长期蛰伏的深度学习理论终于翻身成为了人工智能的主流,一个个基于这一理论开发的模型如雨后春笋一般出现。从打败围棋高手的AlphaGo到识别出几亿种蛋白质结构的AlphaFold,从可以瞬间生成大师画作的Dall-E、StableDiffusion到当今如日中天的ChatGPT,所有的这些在短短的几年之间涌现了。

那么,到底是什么原因让深度学习在过去的几年中扭转了长期的颓势,让它得以完成了从异端到主流的转换?我想,最为关键的一点就是算力的突破。

算力及其经济效应

所谓算力,就是设备处理数据、输出结果的能力,或者简而言之,就是计算的能力。它的基本单位是用“每秒完成的标准操作数量”(standardizedoperationspersecond,简称SOPS)来进行衡量。不过,由于现在的设备性能都非常高,因而在实践中用SOPS来衡量算力已经变得不那么方便。相比之下,“每秒完成的百万次操作数”(millionoper-ationspersecond,简称MOPS)、“每秒完成的十亿次操作数”(gigaoperationspersecond,简称GOPS),以及“每秒完成的万亿次操作数”(teraoperationspersecond,简称TOPS)等单位变得更为常用。当然,在一些文献中,也会使用某些特定性能的设备在某一时间段内完成的计算量来作为算力的单位——其逻辑有点类似于物理学中用到的“马力”。比如,一个比较常用的单位叫做“算力当量”,它就被定义为一台每秒运算千万亿次的计算机完整运行一天所实现的算力总量。

那么,算力的意义究竟何在呢?关于这个问题,阿格拉沃尔(AjayAgrawal)、甘斯(JoshuaGans)和戈德法布(AviGoldfarb)在他们合著的《预测机器》(PredictionMachines,中文译名为《AI极简经济学》)中,曾经提出过一个有启发的观点:算力的成本将关系到AI模型的“价格”。经济学的原理告诉我们,在给定其他条件的前提下,人们对一种商品的需求量取决于该商品的价格。而对于两种性能相近,具有替代关系的商品来说,具有更低价格的那种商品会在市场上具有更高的竞争力。将这一点应用到人工智能领域,我们就可以找到深度学习理论为什么在几十年中都不被待见,却在最近几年中实现爆发的原因。

虽然深度学习的理论并不算困难,但是为了实现它,要投入的运算量是十分巨大的。在算力低下的时代,算力的单位成本非常高。在罗森布拉特提出深度学习思想雏形的那个年代,一台计算机的体积几乎和一间房子那么大,但即便如此,让它运算一个大一点的矩阵都还需要很长时间。虽然理论上我们也可以用深度学习来训练大模型并达到比较好的效果,但这样的成本显然是没有人能够承受的。而相比之下,符号学派的模型对于计算量的要求要小得多,因此这些模型的相对价格也要比深度学习模型来得低。在这种情况下,深度学习理论当然不会在市场上有竞争力。但是,当算力成本大幅度降低之后,深度学习模型的相对价格就降了下来,它的竞争力也就提升了。从这个角度看,深度学习在现阶段的胜利其实并不是一个纯粹的技术事件,在很大程度上,它还是一个经济事件。

改进算力的方法

那么,决定算力的因素有哪些呢?

为了直观起见,我们不妨以计算数学题来对此进行说明:如果我们要提高在单位时间内计算数学题的效率,有哪些方法可以达到这一目的呢?我想,可能有以下几种方法是可行的:一是找更多人一起来计算。如果一个人一分钟可以算一个题,那么十个人一分钟就可以算十个题。这样,即使每个人的效率没有提升,随着人数的增加,单位时间内可以计算的数学题数量也可以成倍增加。二是改进设备。比如,最早时,我们完全是依靠手算的,效率就很低。如果改用计算器,效率会高一点。如果使用了Excel,效率就可能更高。三是将问题转化,用更好的方法来计算。比如,计算从1加到100,如果按照顺序一个个把数字加上去,那么可能要算很久。但是,如果我们像高斯那样用等差数列求和公式来解这个问题,那么很快就可以计算出结果。

将以上三个方案对应到提升算力问题,我们也可以找到类似的三种方法:一是借助高性能计算和分布式计算;二是实现计算模式上的突破;三是改进算法——尽管严格地说这并不能让算力本身得到提升,但是它却能让同样的算力完成更多的计算,从某个角度看,这就好像让算力增加了一样。

1、高性能计算和分布式计算

从根本上讲,高性能计算和分布式计算都是通过同时动用更多的计算资源去完成计算任务,就好像我们前面讲的,用更多的人手去算数学题一样。所不同的是,前者聚集的计算资源一般是聚集在本地的,而后者动用的计算资源则可能是分散在网上的。

(1)高性能计算

先看高性能计算。高性能计算中,最为重要的核心技术是并行计算(ParallelComputing)。所谓并行计算,是相对于串行计算而言的。在串行计算当中,计算任务不会被拆分,一个任务的执行会固定占有一块计算资源。而在并行计算中,任务则会被分解并交给多个计算资源进行处理。打个比方,串行计算过程就像是让一个人独立按照顺序完成一张试卷,而并行计算则像是把试卷上的题分配给很多人同时作答。显然,这种任务的分解和分配可以是多样的:既可以是把计算任务分给多个设备,让它们协同求解,也可以是把被求解的问题分解成若干个部分,各部分均由一个独立的设备来并行计算。并行计算系统既可以是含有多个处理器的超级计算机,也可以是以某种方式互连的若干台独立计算机构成的集群。

从架构上看,并行计算可以分为同构并行计算(homogeneousparallelcomputing)和异构并行计算(heterogeneousparallelcomputing)。顾名思义,同构并行计算是把计算任务分配给一系列相同的计算单元;异构并行计算则是把计算任务分配给不同制程架构、不同指令集、不同功能的计算单元。比如,多核CPU的并行运算就属于同构并行,而CPU+GPU的架构就属于异构并行。

对比于同构并行,异构并行具有很多的优势。用通俗的语言解释,这种优势来自于各种计算单元之间的“术业专攻”,在异构架构之下,不同计算单元之间的优势可以得到更好的互补。正是由于这个原因,异构并行计算正得到越来越多的重视。

比如,现在越来越多的设备当中,都采用了将GPU和CPU混搭的架构。为什么要这么做呢?为了说明白这一点,我们需要略微介绍一下CPU和GPU的结构:从总体上看,无论是CPU还是GPU,都包括运算器(ArithmeticandLogicUnit,简称ALU)、控制单元(ControlUnit,简称CL)、高速缓存器(Cache)和动态随机存取存储器(DRAM)。但是,这些成分在两者中的构成比例却是不同的。

在CPU当中,控制单元和存储单元占的比例很大,而作为计算单位的ALU比例则很小,数量也不多;而在GPU当中则正好相反,它的ALU比例很大,而控制单元和存储单元则只占很小的一个比例。这种结构上的差异就决定了CPU和GPU功能上的区别。CPU在控制和存储的能力上比较强,就能进行比较复杂的计算,不过它可以同时执行的线程很少。而GPU则相反,大量的计算单位让它可以同时执行多线程的任务,但每一个任务都比较简单。打个比喻,CPU是一个精通数学的博士,微积分、线性代数样样都会,但尽管如此,让他做一万道四则运算也很难;而GPU呢,则是一群只会四则运算的小学生,虽然他们不会微积分和线性代数,但人多力量大,如果一起开干,一万道四则运算分分钟就能搞定。

由于GPU的以上性质,它最初的用途是作为显卡,因为显卡负责图形和色彩的变换,需要的计算量很大,但每一个计算的复杂性都不高。当深度学习兴起之后,人工智能专家们发现GPU其实也很适合用来训练神经网络模型。因为在深度学习模型中,最主要的运算就是矩阵运算和卷积,而这些运算从根本上都可以分解为简单的加法和乘法。这样一来,GPU就找到了新的“就业”空间,开始被广泛地应用于人工智能。但是,GPU并不能单独执行任务,所以它必须搭配上一个CPU,这样的组合就可以完成很多复杂的任务。这就好像让一个能把握方向的导师带着很多肯卖力的学生,可以干出很多科研成果一样。正是在这种情况下,异构并行开始成为了高性能计算的流行架构模式。

不过,异构架构也是有代价的。相对于同构架构,它对于应用者的编程要求更高。换言之,只有当使用者可以更好地把握好不同计算单元之间的属性,并进行有针对性的编程,才可能更好地利用好它们。

除此之外,我们还必须认识到,哪怕是借助异构架构,通过并行运算来提升运算效率的可能也是有限的。根据阿姆达尔定律(Amdahl’sLaw),对于给定的运算量,当并行计算的线程趋向于无穷时,系统的加速比会趋向于一个上限,这个上限将是串行运算在总运算中所占比例的倒数。举例来说,如果在一个运算中,串行运算的比例是20%,那么无论我们在并行运算部分投入多少处理器,引入多少线程,其加速比也不会突破5。这就好像,如果我要写一本关于生成式AI的书,可以将一些资料查找的工作交给研究助手。显然,如果我有更多的研究助手,写书的进度也会加快。但这种加快不是无限的,因为最终这本书什么时候写完,还要看我自己“码字”的速度。

(2)分布式计算

采用聚集资源的方式来增强