浅谈人工智能工作负载对处理器设计的影响

人工智能

626人已加入

描述

  人工智能正在从根本上改变处理器设计,将针对特定人工智能工作负载的定制处理元素与针对其他任务的更传统的处理器相结合。

  但是权衡变得越来越令人困惑、复杂和难以管理。例如,工作负载的变化速度可能比生产定制设计所需的时间还要快。此外,该人工智能-特定流程可能会超出电力和散热预算,这可能需要调整工作负载。集成所有这些部分可能会产生需要在系统级解决的问题,而不仅仅是在芯片中。

  “人工智能工作负载彻底改变了处理器架构,”Steven Woo说,他是兰布斯。“很明显,现有的体系结构并不能很好地工作。一旦人们在2014年开始意识到你可以使用GPU并在交易性能上获得巨大收益,这给了人工智能一个巨大的推动。那时人们开始说,GPU是一种专门的架构。我们能做得更多吗?当时很明显,在人工智能中非常普遍乘法累加是瓶颈。现在你有了所有这些伟大的硬件。我们已经把乘法累加的东西搞定了。那么我们还需要在硬件中加入什么呢?这才是建筑的真谛。关键是在帐篷里找到高高的钉子或长长的帐篷杆,然后把它敲下来。“

  其他人同意。“人工智能只是把自己借给GPU架构,这就是为什么英伟达有一万亿美元的市值,”说Ansys导演里奇·戈德曼。“有趣的是,英特尔已经做了很长时间的GPU,但在他们的CPU内部驱动视频处理器。现在他们在做独立的GPU。此外,AMD有一个非常有趣的架构,其中GPU和CPU共享内存。但是,CPU还是很重要的。NVIDIA的格蕾丝·赫柏是CPU-GPU的组合,因为不是所有东西都适合GPU架构。即使在这样的应用程序中,也有运行小型CPU的部分。几十年来,我们一直在一个CPU x86架构上运行一切,也许是RISC架构,但它是一个CPU。不同的应用在不同的架构上运行得更好,而NVIDIA恰好首先专注于视频游戏,并将其转化为动画和电影。同样的架构非常适合人工智能,人工智能正在推动今天的一切。”

  现在的挑战是如何开发更高效的平台,可以针对特定的用例进行优化。“当您在真正的可扩展硬件中实施这一功能,而不仅仅是一次性使用案例时,挑战就变成了如何运行这一功能?”Tensilica AI产品营销总监苏哈斯·米特拉说节奏。“传统上,在处理器领域,我们有一个CPU。如果你有一个移动平台,你有一个GPU,DSP等。所有这些都变得令人不安,因为人们看到这些工作负载有时是令人尴尬的并行。随着并行计算的出现,这就是GPU变得非常受欢迎的原因——他们有非常好的硬件引擎可以进行并行处理——供应商很容易立即获利。”

  首席科学家沙拉德·乔莱说,当工作负荷得到很好的理解时,效果最好Expedera。“在这些类型的架构中,假设您正在尝试在边缘架构中以紧密耦合的方式集成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上编译程序,然后进行联合仿真。”

  人工智能工作负载对处理器设计的影响

  所有这些变量都会影响设计的功耗、性能和面积/成本。

  研究员兼高级技术总监伊恩·布拉特说手臂,“ML工作负载的PPA权衡类似于所有架构师在考虑加速时面临的权衡——能效与面积。在过去的几年里,随着特定于ML的加速指令的增加,CPU在ML工作负载方面已经有了显著的提高。许多ML工作负载可以在现代CPU上运行。然而,如果您处于高度受限的能源环境中,那么可能值得支付额外的硅面积成本来添加专用npu,这比ML推断的CPU更节能。这种效率是以额外的硅面积和牺牲灵活性为代价的;NPU IP往往只能运行神经网络。此外,与CPU等更灵活的组件相比,NPU等专用单元可能能够实现更高的整体性能(更低的延迟)。”

  拉塞尔·克莱恩,项目总监西门子EDA的Catapult软件部门解释说:“设计中有两个主要方面将最显著地影响其操作特性,即PPA。一个是计算中使用的数据表示。对于大多数机器学习计算来说,浮点数真的非常低效。使用更合适的表示法可以使设计更快、更小、功耗更低。”

  另一个主要因素是设计中计算元素的数量。“本质上,多少乘数将被纳入设计,”克莱恩说。“这带来了交付性能所需的并行性。一个设计可以有大量的乘法器,使其体积大、功耗高、速度快。或者它可以只有几个,使它体积小,功耗低,但速度慢得多。除了功耗、性能和面积之外,另一个非常重要的指标是每次推理的能耗。任何由电池供电或获取能量的东西,都可能对能量比功率更敏感。”

  特征和权重的数字表示也会对设计的PPA产生重大影响。

  “在数据中心,一切都是32位浮点数。替代表示可以减少操作符的大小和需要移动和存储的数据量,”他指出。“大多数人工智能算法不需要浮点数支持的全部范围,在定点数的情况下也能很好地工作。定点乘法器通常与相应的浮点乘法器的面积和功率有关,并且它们运行得更快。通常,也不需要32位定点表示。许多算法可以将特征和权重的位宽减少到16位,或者在某些情况下减少到8位甚至更小。乘法器的大小和能力与它所运算的数据大小的平方成正比。因此,16位乘法器是32位乘法器的面积和乘方。8位定点乘法器消耗的面积和功耗大约是32位浮点乘法器的3%。如果算法可以使用8位定点数而不是32位浮点,则只需要存储器来存储数据,并且只需要总线带宽来移动数据。这些都是面积和功率的显著节省。通过进行量化感知训练,可以进一步减少所需的位宽。典型地,以量化感知方式训练的网络需要大约为训练后量化网络的比特宽度。这将存储和通信成本降低了,乘法器面积和功耗降低了。量化感知训练网络通常只需要3-8比特的定点表示。有时候,一些层可能只有一个比特。1位乘法器是一个“与”门

  此外,当积极量化网络时,溢出成为一个重要问题。“有了32位浮点数,开发人员就不必担心数值超出了表示能力。但是对于小的固定点数,必须解决这个问题。溢出很可能会频繁发生。使用饱和运算符是解决这个问题的一种方法。该操作将存储表示的最大可能值,而不是溢出。事实证明,这对于机器学习算法非常有效,因为一个大的中间和的确切大小并不重要,它变大的事实就足够了。使用饱和数学允许开发人员将他们使用的定点数的大小减少一两位。一些神经网络确实需要浮点表示提供的动态范围。当转换成定点时,它们只是损失了太多的精度,或者需要32位以上的表示来提供良好的精度。在这种情况下,有几种浮点表示法可以使用。B-float16(或“大脑浮点”)是Google为他们的NPU开发的,是一种16位浮点,很容易在传统浮点之间转换。与较小的定点数一样,它导致较小的乘数和较少的数据存储和移动。还有IEEE-754 16位浮点数,以及NVIDIA的Tensorfloat,”Klein补充道。

  使用其中任何一种都会导致更小、更快、更低功耗的设计。

  此外,Woo说,“如果你有一个通用内核,它真的擅长做很多事情,但它不会做任何事情。只是一般。在您处理工作负载的任何时间点,通用内核中都会有部分正在使用,部分没有使用。拥有这些东西需要面积和能量。人们开始意识到摩尔定律仍然在给我们提供更多的晶体管,所以也许正确的事情是沿着人工智能管道建立这些擅长某些任务的专门核心。有时你会关掉它们,有时你会打开它们。但这比拥有这些通用内核要好,因为在通用内核中,您总是会浪费一些面积和功耗,并且永远不会获得最佳性能。再加上一个愿意付费的市场——一个高利润、高收入的市场——这是一个很好的组合。”

  这在硬件工程界也是一种相对容易理解的方法。Ansys的产品营销总监马克·斯温嫩(Marc Swinnen)说:“你提出第1版,一旦你安装了它,你就会发现哪些可以用,哪些不能用,然后尝试解决这些问题。”。“您运行的应用程序对于理解这些权衡是至关重要的。如果你能让你的硬件与你想要运行的应用程序相匹配,你就能得到比使用现成的东西更有效的设计。你为自己制作的芯片非常适合你想做的事情。”

  这就是为什么一些生成式人工智能开发商正在探索建造自己的硅芯片,这表明在他们看来,即使是目前的半导体也不足以满足他们未来的需求。这是人工智能如何改变处理器设计和周围市场动态的又一个例子。

  人工智能还可能在小芯片领域发挥重要作用,在那里,半定制和定制硬件模块可以被表征并添加到设计中,而无需从头开始创建一切。英特尔和AMD等大型芯片制造商已经在内部这样做了一段时间,但无晶圆厂公司处于劣势。

  “问题是,你的小芯片必须与现有的解决方案竞争,”安迪·海尼格说,他是弗劳恩霍夫二世适应系统工程分部。“如果你目前不关注性能,你就无法竞争。人们关注的是如何让这个生态系统运转起来。但是从我们的角度来看,这是一个先有鸡还是先有蛋的问题。你需要性能,尤其是因为芯片比SoC解决方案更贵。但你目前不能真正专注于性能,因为你必须首先启动并运行这个生态系统。”

  正确的开始

  与过去不同,当时许多芯片都是为一个插座设计的,而人工智能则完全是为了工作负载。

  Expedera的Chole说:“当这些权衡发生时,了解目标是什么是非常重要的。”“如果你只是说,‘我想做所有的事情,支持所有的事情’,那么你并没有真正地为任何事情进行优化。你基本上只是把一个通用的解决方案放在里面,希望它能满足你的功率要求。在我们看来,这很少奏效。边缘设备上的每个神经网络和每个部署案例都是独一无二的。如果你的芯片进入耳机并运行RNN,而不是坐在ADAS芯片中运行变压器,这是一个完全不同的用例。npu、内存系统、配置和功耗完全不同。因此,了解我们想要尝试的重要工作负载集非常重要。这些可以是多个网络。你必须让团队就重要的网络达成一致,并在此基础上进行优化。这是工程团队在考虑npu时所缺少的。他们只是认为他们想得到世界上最好的东西,但是你不可能在没有交换的情况下得到最好的东西。我可以给你最好的,但你最想要哪个领域的?”

  Cadence的Mitra指出,每个人都以类似的方式考虑PPA,但人们会强调他们关心的是功耗、性能、面积/成本(PPAC)的哪一部分。“如果你是一个数据中心的人,你可能会同意牺牲一点点面积,因为你的目标是非常高吞吐量的机器,因为你需要做数十亿次人工智能推理或人工智能事情,这些事情一次就可以交易市场份额,同时运行庞大的模型,产生海量数据。你可以考虑在台式机上运行人工智能模型开发工具进行推理的日子已经一去不复返了,但即使是这些大型语言模型的推理也变得相当棘手。这意味着您需要一个大规模数据集群,并且您需要在超大规模的数据中心规模上进行大规模数据计算。”

  还有其他的考虑。“硬件架构决策推动了这一点,但软件的作用也很关键,”的产品管理总监威廉·鲁比说新思科技EDA团队指出,性能与能效是关键。“需要多少内存?内存子系统将如何分区?软件代码可以针对能效进行优化吗?(可以,可以。)工艺技术的选择也很重要——因为所有PPAC的原因。”

  此外,根据新思科技AI/ML处理器产品经理戈尔登·库勃的说法,如果电源效率不是首要问题,可以使用嵌入式GPU。“它将为您提供最大的编码灵活性,但在功耗和面积效率方面永远不如专用处理器。如果您使用NPU进行设计,那么仍然需要权衡面积和功耗。最小化片内存储器会显著降低总面积预算,但会增加来自外部存储器的数据传输,从而显著增加功耗。增加片内内存将降低外部存储器读写的功耗。”

  结论

  所有这些问题越来越成为系统问题,而不仅仅是芯片问题。

  “人们将人工智能训练部分视为‘哦,哇,这真的是计算量很大。这是大量的数据移动。“一旦你想用所有这些加速硬件,那么系统的其余部分就开始碍事了。出于这个原因,我们越来越多地看到英伟达和其他公司的这些平台,它们拥有复杂的人工智能训练引擎,但它们也可能有英特尔至强芯片。这是因为还有人工智能引擎不太适合做的另一部分计算。它们不是为运行通用代码而设计的,所以这越来越成为一个异构系统的问题。你必须让所有东西都协同工作。”

  难题的另一部分在软件方面,可以通过各种方法(如简化)来提高效率。“这是一种认识,即在人工智能中,有一种算法的特定部分和一种称为简化的特定计算,这是一种将大量数字简化为一个数字或一小组数字的奇特方法,”吴解释说。“可能是把它们加在一起或者类似的事情。传统的做法是,如果你从所有其他处理器获得所有这些数据,通过互连网络将其发送到一个处理器,让那个处理器将所有数据相加。所有这些号码都要通过这个网络,通过交换机到达这个处理器。我们为什么不把它们加到开关里,因为它们都是通过开关的?优点是它类似于在线处理。令人着迷的是,一旦你在交换机中添加完所有东西,你只需要提供一个数字,这意味着网络流量下降了。”

  Woo说,像这样的架构考虑是值得考虑的,因为它们同时解决了几个问题。首先,数据在网络间的移动极其缓慢,这意味着您要尽可能少地移动数据。第二,它消除了将数据传递给处理器的冗余工作,只是让处理器做所有的数学运算,然后将结果传递回来。所有这些都在网络中完成。第三,它非常并行,因此您可以让每个交换机执行部分计算。

  同样,Expedera的Chole表示,人工智能工作负载现在可以通过一个图表来定义。“拥有那个图表不是为了一个小的指令集。我们不做加法。我们一次做几百万次加法,或者一次做一千万次矩阵乘法运算。这改变了你对执行的看法,你对指令的看法,你如何压缩指令,你如何预测和调度指令。在通用CPU中这样做是不实际的。能够做到这一点,成本太大了。然而,作为一个神经网络,同时处于活动状态的MAC数量巨大,您生成指令、创建指令、压缩指令、调度指令的方式在利用率和带宽方面会发生很大变化。这是人工智能对处理器架构的巨大影响。”

审核编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分