去年诞生的推理芯片公司数量之多,足以让您头晕目眩。由于业内有众多芯片,也不缺少质量不错的测试基准,所以常常会遗忘极其重要的部分:内存子系统。事实上,如果没有很好的内存子系统,那就不可能有优质的推理芯片。因此,如果一家推理芯片公司只谈论TOPS,却很少讨论SRAM、DRAM和内存子系统,那这家公司可能并没有一个很好的解决方案。
一切皆与数据吞吐量相关
优质推理芯片结构合理,可以非常快速地移动数据,意味着芯片处理数据、将数据导入和导出内存的速度非常之快。如果您看一下使用ResNet-50和YOLOv3的模型,将会发现它们不仅在计算方面,而且在各自如何使用内存的方式上都有显著差异。
对于使用ResNet-50的每张图像,需要20亿个乘积累加 (MAC),但是对于YOLOv3,则需要超过2000亿个MAC,增加了100倍。部分原因在于YOLOv3权重更大(6200万的权重,而ResNet-50约为2300万)。然而,最大的区别还在于典型基准的图像大小。ResNet-50使用224×224像素,实际上无人使用该尺寸,而YOLOv3使用200万像素。因此,YOLOv3的计算负载要大得多。
通过上述示例,您可以看到我们有两种不同的工作负载,其中一种的工作量是另一种的100倍。问题显而易见:这样是否意味着YOLOv3运行速度要慢100倍呢?要解答该问题,唯一方法是通过查看内存子系统,因为这告诉您特定的实际吞吐量。
内存子系统
对于推理芯片,我们不仅仅是开发一颗芯片,而是创造一个系统。芯片的MAC相当于引擎,但是如果没有正确的燃料传输系统(内存和互联),引擎就会熄火。
了解一下推理芯片的运行过程,您会发现要先有数据导入,之后须以一定的速度(比如每秒30帧)提供新的图像。图像导入芯片,然后就会输出某种结果。图像大小各异,但大多数应用要处理百万像素级的图像才能达到足够的精度。
在芯片内部,使用神经网络模型处理图像,这需要代码和权重,在每一层的末端还有中间激活函数。所有这些都需要存储在某个地方,然后读写到推理芯片的计算单元中。
应用
AI推理的应用非常多,自动驾驶等边缘应用代表着最大的机遇之一。未来,每辆车都将配有多个推理引擎,可以实时检测到行人、公共汽车和小轿车从而避开他们。这使得处理大尺寸图像(比如在YOLOv3中)非常重要。设想一下用肉眼看图像的情况,也是如此。如果有人给您看了一张小图片,您就会错过很多细节,甚至还可能曲解图片。在自动驾驶汽车和监控摄像头中,小细节才是关键。
边缘和云端的区别在于,在边缘您需要发送即时响应,而在云端通常有大量数据,且需要有足够时间处理。举个例子,如果您在车里,便需要知道行人在哪里,这样才能有效避开他们。但是,数据中心的情况则不同,数据中心中有一些应用(如为图像贴标签)可以在夜间进行大批量处理。这在边缘应用场景中是行不通的,因为这时所有操作都必须快速处理。且延迟很短,这就意味着处理批次= 1。
因此,本质上我们是重新设计芯片,以便在短时间(低延迟)内交付结果,及时进行正确的响应。我们需要立即处理数据并立即返回结果,这意味着内存是其中绝对关键的一部分。
若使用ResNet-50,您会发现有许多芯片的性能在处理批次= 10或100时非常高,但当处理批次= 1时性能就下降很多,某些芯片的性能下降幅度高达75%。这意味着,无论他们从高批次处理率的MAC获得的利用率有多高,当批处理率为1时其利用率只有四分之一。因此,在处理批次=1时(这在边缘应用中很关键),一些芯片的MAC计算能力利用率还不到25%。
架构变化
过去,处理器的内存架构(如今仍在数据中心中进行大量推理)采用DRAM和多层缓存,所有这些都被馈入处理器。内存是集中式单一存储器。而推理芯片的内存是分布式的。一种加快数据处理速度的方法是把MAC分成块,然后用本地化SRAM来分配这些块。这是Flex Logix和Intel等公司所采用的一种方法,将在未来占据主导地位。这样做的理由是,让内存更接近MAC会缩短延迟时间,从而提高MAC分布式并行处理能力。
边缘应用的另一关键要求是要满足成本和功耗预算。用于训练的芯片可以占用整片晶圆大小,而针对汽车和监控摄像头等应用的芯片有相关的成本预算和功耗限制。通常,在满足这些预算的情况下,可用的SRAM数量不足以在芯片上存储所有的权重、代码和中间激活函数。这些芯片需要不断地处理大量的数据,而大多数边缘应用总是处于工作状态。因为所有芯片都会发热,所以其处理量与散热量呈正相关。若能从同等数量的芯片和功耗预算中获得更多的吞吐量,这种芯片架构将会是赢家,因为它们能够花较少的功耗和成本交付更多的结处理结果。
优化功耗和成本
有些捷径可以让公司折中检测目标的精准度。然而,这并非客户想要的方式。客户希望运行的模型可以获得高精度的对象检测和识别,还要在一定的功耗限制范围内。要做到这一点,关键在于内存子系统。
如果使用ResNet-50或YOLOv3,需要存储权重。YOLOv3中的权重约为23MB,而ResNet-50的权重约为62MB。仅是将这些权重存储在芯片上就需要接近100平方毫米的芯片面积,这对大多数应用来说都不可行。这意味着大容量内存需要在芯片之外,也就是使用DRAM。
有一点需要说明,我们经常被问到DRAM的类型是否重要,答案是非常重要。高带宽内存(HBM)极其昂贵,对于成本预算严格的边缘应用不太适用。LPDDR4是一种更好的内存,因为它具有更宽的总线配置,可以从单个DRAM中获得更多的带宽。DRAM对热非常敏感,对于在室外工作的汽车和监控摄像机来说,可能是个问题。因此,考虑到成本和散热问题,最好尽量少用DRAM。
如何设计出最佳的推理芯片
设计者要考虑客户将进行何种类型的处理、它们的负载和应用会是什么、以及它们会在哪里使用,方能设计出最佳的推理芯片。归根结底,客户想要最高的吞吐量——这意味着他们需要高的MAC利用率。获得高MAC利用率的方法就是为MAC提供高带宽,但希望用最少的SRAM和最少的DRAM来实现。
芯片设计者需要知道客户会在哪些应用场景下使用,并采用相应的模型,而且要密切关注其权重、代码大小和激活函数。现在有一些建模工具可以让芯片设计者调整MAC、SRAM和DRAM的数量,能够做出一系列折衷取舍,以便决定如何交付最低价的芯片和最高的吞吐量。
芯片设计者还能用很多方法来组织MAC,让其以更高的频率运行。例如,可以将MAC优化为8位的乘积和累加,比16位的乘法和累加运行得更快。在这种情况下,惟一的折衷是精度稍低一些,但是可以在成本和功耗较低的前提下提供更大的吞吐量。
那么,ResNet-50和YOLOv3在内存使用方面有什么不同呢?虽然权重有2倍的差异,但最大的区别在于激活函数。ResNet-50的每一层都会产生激活函数,其最大激活函数大小为1MB,有些层甚至更小一些。对于YOLOv3,最大层的最大激活函数大小是64MB,这64MB必须存储起来以便进入下一层。如果注意一下片上或DRAM容量需求,您会发现YOLOv3的激活函数实际上比权重需要更多存储容量,这与ResNet-50大不相同。事实上,客户需要谨慎的是,一些公司设计芯片时会在片上储存ResNet-50权重,他们知道其激活函数很小,能让其性能“看起来”更好。然而,在实际应用中,这种芯片的性能会下降得特别厉害。
SRAM和DRAM的折衷
DRAM芯片不便宜,但更贵的是与DRAM芯片的连接。芯片设计公司往往注重裸片尺寸,但芯片封装尺寸也是决定成本的一个重要因素,有时可能比裸片更贵。每增加一个DRAM,至少增加100个球。如今一些芯片有8个DRAM连接,这就需要对1000个球进行封装,导致芯片非常昂贵。虽然公司意识到不能在芯片上配置所有的SRAM,但他们也知道不能通过过多的DRAM来解开成本难题。他们真正需要的是用尽可能少的DRAM和尽可能少的SRAM。要想如此,芯片设计者需要研究激活函数。了解一下64MB的激活函数,就会发现其实只有一个。大多数激活函数还是较小的,所以如果将8MB的SRAM放在芯片上,大多数中间激活函数将可以存储在芯片上,只需要用DRAM来处理最大的激活函数。
这是推理芯片的最佳方案,也是芯片设计者在设计中应该努力追求的目标。如果您是客户,您要问一下有关芯片内存子系统的问题,因为这是决定它在实际应用中性能表现的重要因素。
责任编辑:tzh
-
芯片
+关注
关注
453文章
50301浏览量
421421 -
摄像头
+关注
关注
59文章
4797浏览量
95344 -
AI
+关注
关注
87文章
29928浏览量
268242
发布评论请先 登录
相关推荐
评论