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