本文来自半导体行业观察。
人工智能正在从根本上改变处理器设计,将针对特定人工智能工作负载的定制处理元件与针对其他任务的更传统处理器相结合。
但是,这种权衡越来越令人困惑、复杂,管理起来也越来越具有挑战性。例如,工作负载的变化速度可能会超过定制设计所需的时间。此外,人工智能特定流程可能会超出功耗和散热预算,这可能需要调整工作负载。整合所有这些部件可能会产生一些问题,需要在系统层面而不仅仅是芯片中加以解决。
"Rambus研究员兼杰出发明家Steven Woo说:"人工智能工作负载颠覆了处理器架构。"很明显,现有的架构并不能很好地发挥作用。早在2014年,人们就开始意识到,使用GPU可以极大地提高交易性能,这极大地推动了人工智能的发展。那时,人们开始说:'GPU是一种专用架构。我们能做得更多吗?'当时,人工智能中非常常见的乘法累加显然是瓶颈所在。现在,你已经拥有了这么多优秀的硬件。我们已经掌握了乘法累加的方法。那么我们还需要在硬件中加入什么呢?这就是架构的真谛。就是要找到帐篷里的高钉子或长帐篷杆,然后把它敲下来"。
其他人对此表示赞同。"Ansys公司总监里奇-戈德曼(Rich Goldman)说:"人工智能正好适合GPU架构,这就是英伟达拥有万亿美元市值的原因。"有趣的是,英特尔很早就在做GPU,不过是在CPU内驱动视频处理器。现在他们开始做独立的GPU。另外,AMD有一个非常有趣的架构,即GPU和CPU共享内存。不过,CPU仍然很重要。英伟达公司的Grace Hopper是CPU与GPU的组合,因为并非所有应用都适合GPU架构。即使是在适合使用GPU的应用中,也有部分应用只运行小型CPU。几十年来,我们一直在CPU x86架构上运行一切,也许还包括了RISC架构,但它就是CPU。不同的应用在不同的架构上运行得更好,而英伟达公司恰好首先专注于视频游戏,然后才转向动画和电影。同样的架构非常适合人工智能,而人工智能正推动着当今的一切"。
现在的挑战是如何开发更高效的平台,并针对特定用例进行优化。“当你在真正的可扩展硬件中实现这个东西,而不仅仅是一次性用例时,那么挑战就变成了如何运行这个东西?”Cadence Tensilica AI产品营销总监Suhas Mitra说道。“传统上,在处理器中,我们有一个CPU。如果你有一个移动平台,你就有一个GPU、DSP等。所有这些都会变得混乱,因为人们看到这些工作负载有时并行得令人尴尬。随着并行计算的出现,这就是GPU变得非常流行的原因——它们拥有非常好的硬件引擎,可以进行并行处理——供应商很容易立即获利。”
Expedera公司首席科学家沙拉德-乔勒(Sharad Chole)说,当工作负载定义明确时,这种方法最有效。"在这类架构中,比方说,你正试图在边缘架构中以紧密耦合的方式集成ISP和NPU。SoC领导者正在研究如何减少设计的面积和功耗。"
Chole说,这里的挑战在于了解架构内存部分的延迟影响。"如果NPU速度慢,内存会是什么样子?当NPU速度较快时,内存会是什么样子?最后,平衡MAC与平衡内存之间的问题也由此而来,我们正试图尽可能减少输入和输出缓冲。
外部存储器带宽也是其中的关键部分,尤其是对于边缘设备而言。"没有人拥有足够的带宽,"他补充道。"因此,我们该如何划分工作负载或调度神经网络,从而使外部内存带宽得以维持并尽可能降低?这基本上就是我们通过打包或将神经网络分解成更小的片段并尝试执行这两个片段来实现的。
为快速变化的未来而设计
人工智能的一个大问题是,算法和计算模型的发展和变化速度比从头开始设计的速度更快。
Rambus的Woo表示:“如果你说你要构建一款非常适合LSTM(长短期记忆)模型的CPU,那么这个周期就是几年。”“然后你会在两年内意识到,LSTM模型作为主导事物来了又去。您想要制造专门的硬件,但您必须做得更快才能跟上。如果我们能够像改变算法一样快地创建硬件,那将是圣杯。那太好了,但我们不能这样做,尽管行业面临着这样做的压力。”
"Rambus的Woo说:"如果你说你要打造一个在LSTM(长短期记忆)模型方面非常出色的CPU,那么这个周期就是几年。"然后在两年后你发现LSTM模型成为主流。你想做专用硬件,但你必须做得更快才能跟上。如果我们创造硬件的速度能和改变算法的速度一样快,那将是一个奇迹。这是一件好事,可惜我们做不到,尽管业界正面临着这样的压力。
这也意味着处理人工智能工作负载的处理器的架构将不同于那些不专注于人工智能的处理器。"Woo说:"如果你看看这些用于训练的引擎,它们不会运行Linux或Word,因为它们不是为通用分支、多种指令或支持多种语言而设计的。"它们几乎都是基本引擎,只在少数类型的操作中运行得非常快。它们针对计算所需的特定数据移动模式进行了高度调整。以谷歌TPU为例,自上世纪80年代以来,它就采用了脉动阵列架构。它非常擅长在大型数据阵列上进行特定类型的均匀分布工作,因此非常适合这些密集的神经网络。但运行通用代码并不是这些东西的设计初衷。它们更像是大规模的协处理器,能很好地完成计算中真正重要的部分,但它们仍需要连接到管理计算其余部分的处理器之上"。
即使是基准测试也很困难,因为它并不总是同类比较,这就给架构的开发带来了困难。“这是一个很难的话题,因为不同的人使用不同的工具来解决这个问题,”Expedera的Chole说,"在设计工程师的日常工作中,这项任务就是系统级基准测试。你对SoC芯片的每个部分都要单独进行基准测试,然后根据这些数据推断所需的带宽。这就是性能,这就是我要得到的延迟。在此基础上,你试图估算整个系统的外观。但是,随着我们在设计过程中取得更多进展,我们正在研究某种基于仿真的方法,这种方法不是完整的仿真,而是在仿真中进行事务精确仿真,以获得不同设计模块的精确性能和精确带宽要求。例如,有一个RISC-V和一个NPU,它们必须协同工作并完全共存。它们必须流水线化吗?它们的工作负载能否流水线化?RISC究竟需要多少周期?为此,我们必须在RISC-V上编译程序,在NPU上编译我们的程序,然后进行联合仿真。
人工智能工作负载对处理器设计的影响
所有这些变量都会影响设计的功耗、性能和面积/成本。
Arm研究员兼高级技术总监Ian Bratt说:"ML工作负载的PPA权衡与所有架构师在考虑加速时面临的权衡类似--能效与面积。在过去几年中,随着ML专用加速指令的增加,CPU在处理ML工作负载方面的性能显著提高。许多ML工作负载都能在现代CPU上出色地运行。但是,如果您处于能源高度紧张的环境中,那么值得付出额外的硅面积成本来增加专用NPU,因为在ML推理中,NPU比CPU更节能。这种能效是以增加硅片面积和牺牲灵活性为代价的;NPU IP通常只能运行神经网络。此外,像NPU这样的专用单元也可能比CPU这样更灵活的组件实现更高的整体性能(更低的延迟)"。
西门子EDA软件部门的项目总监Russell Klein解释说:“设计中有两个主要方面对其操作特性(PPA)影响最为显著。一是计算中使用的数据表示。对于大多数机器学习计算来说,浮点数确实效率很低。使用更合适的表示可以使设计更快、更小、功耗更低。”
另一个主要因素是设计中计算元件的数量。"从根本上说,设计中要内置多少个乘法器,"Klein说,“这将带来并行性,而并行性是提供性能所必需的。一个设计可以有大量的乘法器,使其体积大、功耗高、速度快。也可以只有几个乘法器,体积小、功耗低,但速度慢得多。除了功耗、性能和面积之外,还有一个非常重要的指标,那就是每次推理的能耗。任何由电池供电或获取能量的设备,都可能对每次推理的能量比功率更敏感。"
特征和权重的数字表示也会对设计的PPA产生重大影响。
"在数据中心,一切都是32位浮点数。替代表示法可以减少运算器的大小以及需要移动和存储的数据量,"他指出,"大多数人工智能算法并不需要浮点数支持的全部范围,使用定点数就可以很好地工作。定点乘法器的面积和功率通常只有相应浮点乘法器的1/2,而且运行速度更快。通常也不需要32位的定点表示。许多算法可以将特征和权重的位宽减小到16位,在某些情况下甚至可以减小到8位。乘法器的大小和功率与其运算的数据大小的平方成正比。因此,16位乘法器的面积和功率是32位乘法器的1/4。8位定点乘法器的面积和功耗大约是32位浮点乘法器的3%。如果算法可以使用8位定点数而不是32位浮点数,则只需要1/4的内存来存储数据,只需1/4的总线带宽来移动数据。这大大节省了面积和功耗。通过量化感知训练,所需的位宽可以进一步减少。通常情况下,以量化感知方式训练的网络所需的位宽约为训练后量化网络的1/2。这样,存储和通信成本可减少1/2,乘法器面积和功率可减少3/4。量化感知训练后的网络通常只需要3-8位的定点表示。有时,某些层只需要一位。而1位乘法器就是一个"与"门。
此外,在对网络进行积极量化时,溢出会成为一个重要问题。"对于32位浮点数,开发人员不需要担心数值超出表示的容量。但对于小的定点数,就必须解决这个问题。溢出很可能会经常发生。使用饱和运算符是解决这一问题的方法之一。该运算符不会溢出,而是存储表示值中可能存在的最大值。
事实证明,这对机器学习算法非常有效,因为大的中间和的确切大小并不重要,只要它变大了就足够了。通过使用饱和数学,开发人员可以将定点数的大小再减少一两位。有些神经网络确实需要浮点表示法提供的动态范围。它们在转换为定点数时会损失过多的精度,或者需要超过32位的表示才能提供良好的精度。
在这种情况下,有几种浮点表示法可以使用。谷歌为其NPU开发的B-float16(或"brain float")是一种16位浮点数,可轻松转换为传统浮点数或从传统浮点数转换为浮点数。与较小的定点数一样,它可以实现较小的乘法器,减少数据存储和移动。Klein补充说:"还有一种IEEE-754 16位浮点数,以及英伟达的Tensorfloat。
使用其中任何一个都会导致更小、更快、功耗更低的设计。
此外,Woo说:"如果你有一个通用内核,它确实能做很多事情,但不会做得很好。它只是通用的。在你完成工作负载的任何时候,通用内核都会有一部分在使用,一部分不在使用。拥有这些东西需要面积和功率。
人们开始意识到,摩尔定律仍在为我们提供更多的晶体管,所以正确的做法也许是在人工智能流水线上构建这些擅长特定任务的专用内核。有时你会关闭它们,有时你会打开它们。但这总比拥有这些通用内核要好,因为在通用内核上,你总是会浪费一些面积和功耗,而且永远无法获得最佳性能。再加上一个愿意付费的市场——一个利润率很高、价值很高的市场,这就是一个很好的组合。
Ansys产品营销总监Marc Swinnen说:"在硬件工程领域,这也是一种相对容易理解的方法,你提出了版本1,一旦你安装了它,你就会发现哪些有效,哪些无效,并尝试解决这些问题。你运行的应用程序对于了解这些权衡需要是什么至关重要。如果你能让自己的硬件与你想运行的应用相匹配,你就能获得比使用现成的东西更高效的设计。你为自己制作的芯片非常适合你想要做的事情。"
这就是为什么一些生成式人工智能开发人员正在探索构建自己的芯片,这表明在他们看来,即使是当前的半导体也不足以满足他们未来的需求。这是人工智能如何改变处理器设计和周边市场动态的又一个例子。
人工智能还可能在芯片领域发挥重要作用,在芯片领域,半定制和定制硬件块可以被表征并添加到设计中,而无需从头开始创建一切。英特尔(Intel)和AMD等大型芯片制造商已经在内部这样做了一段时间,但无晶圆厂公司则处于劣势。
“问题在于,你的小芯片必须与现有解决方案竞争,”Fraunhofer IIS自适应系统工程部高效电子部门负责人Andy Heinig表示。“如果你目前不注重性能,你就无法与之竞争。人们都在关注这个生态系统的启动和运行。但从我们的角度来看,这是一个先有鸡还是先有蛋的问题。你需要性能,尤其是因为芯片比SoC解决方案更昂贵。但你目前还不能真正专注于性能,因为你必须先让这个生态系统投入运行。”
正确的开始
与过去不同的是,许多芯片都是针对一个插槽而设计的,而人工智能则完全取决于工作负载。
“在进行这些权衡时,最重要的是要知道目标是什么,”Expedera的Chole说。“如果你只是说'我想做所有的事,支持所有的功能',那么你就没有真正优化任何东西。你基本上只是把一个通用解决方案放在里面,希望它能满足你的功率要求。据我们了解,这种做法很少奏效。边缘设备上的每个神经网络和每个部署案例都是独一无二的。如果您的芯片安装在耳机中并运行RNN,而不是安装在ADAS芯片中并运行变压器,那么这是一个完全不同的用例。NPU、内存系统、配置和功耗都完全不同。因此,了解我们想要尝试的重要工作负载集是非常重要的。这可以是多个网络。你必须让团队就重要的网络达成一致,并在此基础上进行优化。工程团队在考虑NPU时就缺少这一点。他们只是想获得世界上最好的,但如果不做一些交易,就不可能获得最好的。我可以给你最好的,但你想要哪方面最好?”
Cadence公司的Mitra指出,每个人对PPA的看法都差不多,但人们会强调他们关心的是功率、性能、面积/成本(PPAC)中的哪一部分。"如果你是数据中心的人,你可能会接受牺牲一点面积,因为你所追求的是非常高吞吐量的机器,因为你需要进行数十亿次的人工智能推断或人工智能工作,而这些工作在运行巨大的模型、产生大量数据的同时,也在进行着市场份额的交易。你可以考虑在台式机上运行人工智能模型开发工作进行推理的日子已经一去不复返了,但即使是一些大型语言模型的推理工作也变得相当棘手。这意味着你需要一个海量数据集群,你需要在超大规模的数据中心规模上进行海量数据计算。"
还有其他考虑因素。Synopsys EDA集团产品管理总监William Ruby表示:“硬件架构决策推动了这一点,但软件的作用也至关重要。”他指出,性能与能源效率是关键。“需要多少内存?内存子系统如何分区?软件代码可以针对能源效率进行优化吗?(是的,可以。)工艺技术的选择也很重要——出于所有PPAC原因。”
此外,Synopsys公司AI/ML处理器产品经理Gordon Cooper认为,如果能效不是重点,也可以使用嵌入式GPU。"它将为您提供最佳的编码灵活性,但在功耗和面积效率方面永远比不上专用处理器。如果使用NPU进行设计,那么在平衡面积与功耗方面仍需做出权衡。尽量减少片上内存可以显著降低总面积预算,但会增加从外部内存的数据传输,从而显著增加功耗。增加片上内存将降低外部内存读写的功耗"。
结论
所有这些问题越来越成为系统问题,而不仅仅是芯片问题。
“人们在看待人工智能训练部分时会说:'哇,计算量真大。'"Woo说,"一旦你想把所有这些加速硬件都投入其中,那么系统的其他部分就会开始受到阻碍。出于这个原因,我们越来越多地看到英伟达等公司推出的这些平台,它们拥有精心设计的人工智能训练引擎,但也可能采用英特尔至强芯片。这是因为人工智能引擎并不适合进行其他部分的计算。它们不是为运行通用代码而设计的,因此这越来越多地成为一个异构系统问题。你必须让所有东西都能协同工作。”
另一个难题是在软件方面,可以通过各种方法提高效率,例如还原法。“我们认识到,在人工智能中,有一部分特定的算法和特定的计算被称为还原,这是一种奇特的方法,即把大量数字还原成一个数字或一小组数字,”Woo解释道,“可以是把它们加在一起或类似的东西。传统的方法是,如果你有来自所有其他处理器的数据,通过互连网络发送到一个处理器,然后让这个处理器将所有数据相加。所有这些数据都是通过交换机经由网络到达这台处理器的。那么,我们为什么不直接在交换机中将它们相加呢?这样做的好处是类似于在线处理。最吸引人的是,一旦你在交换机中添加完所有内容,你只需要传送一个数字,这意味着网络流量会减少。”
Woo说,这样的架构考虑因素值得考虑,因为它们能同时解决几个问题。首先,数据在网络中的传输速度非常慢,这就要求我们尽可能少地传输数据。其次,它避免了将数据传送到处理器,然后再让处理器进行运算,最后将结果传送回来的冗余工作。第三,它非常并行,因此你可以让每个交换机完成部分计算。
同样,Expedera的Chole表示,人工智能工作负载现在可以通过单个图表来定义。“有了这个图表,就不是一小套指令了。我们不是在做一个加法。我们正在同时进行数百万次加法运算,或者我们正在同时进行1000万次矩阵乘法运算。这改变了你对执行的思考模式,改变了你对指令的思考模式,改变了你对指令的压缩模式,改变了你对指令的预测和调度模式。在通用CPU中这样做是不切实际的。要做到这一点,成本太大。然而,作为神经网络,同时活动的MAC数量巨大,因此,生成指令、创建指令、压缩指令、调度指令的方式,在利用率和带宽方面会发生很大变化。这就是人工智能对处理器架构方面的巨大影响。”