龙空技术网

一文看懂内存内计算的几条路线

半导体行业观察 1019

前言:

如今同学们对“内存如何计算”大概比较注重,姐妹们都想要学习一些“内存如何计算”的相关内容。那么小编也在网上汇集了一些对于“内存如何计算””的相关知识,希望看官们能喜欢,你们快快来了解一下吧!

来源:内容由半导体行业观察(ID:icbank)编译自「eejournal」和,作者:Bryon Moyer。谢谢。

存储器可以视为是“存取”而后成为乘积函数。将权重(weights)存储在存储器中并将激activation用作输入,可节省数据移动和功耗。而且实现这个有多种方法,例如可以使用RRAM,闪存或SRAM进行操作,另外还有一种涉及到DRAM的方法,但这是完全不同的。

在赢得人工智能(AI)的争夺战中,许多公司都在尝试创建最好的机器学习(ML)引擎。这意味着要以最低的功耗进行最快的推理,而最低的功耗则意味着弄清楚如何规避“撞上存储墙”。换句话说,大量的精力被花费在移动所有必要的数据上。这里,我们讨论的是移动数十亿条数据的方法。

我们在几周前就看到了其中的一部分,他们采用了新的推理体系结构,该体系结构着重于内存带宽和局部性(locality),试图以更快的速度和更低的功耗移动更少的数据。但是我们有意推迟讨论解决此问题的另一种方法:内存内计算。

在更传统的体系结构中,有一些用于张量数学(tensor math)的乘累加(MAC)电路,特别是矩阵乘法(其首字母缩写为GEMM,用于“通用矩阵乘法”)。这些体系结构试图以适应将权重和activations移到适当位置的方式来安排MAC。activations是由先前的神经网络层(第一层使用实际的网络输入作为“activations”)来计算的,而权重则存储在某处。乘法通常涉及activations和权重,因此必须将两者都移动到将它们相乘的引擎上。这就是问题的症结所在。

内存内计算利用了一个相当方便的内存事实,因此,如果将权重存储在内存中,则可以通过activations来访问内存,从而获得乘法累加。与实际存储器的唯一区别在于,内存内计算一次接合了所有word lines ,而不是通过解码输入而只能得到一个word lines。

我们在这里正在做的事情是进入模拟域(analog domain),将存储单元视为模拟单元而不是数字单元,以降低功耗。我们已经看到了一种在推理引擎前端使用模拟的方法。内存内计算在内存中使用它。因此,我们获取数字数据,使用DAC将其转换为模拟值,使用这些模拟值驱动具有模拟内容的存储器,以获取模拟位线输出,然后使用ADC将结果转换回数字格式。

我们将深入研究不同技术的细节,但是鉴于所要讨论的所有内容,为此我们将省略许多细节。

用RRAM来做

我们在今年早些时候大体讨论了这一点,然后我们更具体地研究了如何在RRAM(或ReRAM)存储器或使用铁电FET(FeFET)来实现这一点。尽管RRAM是执行此操作最常用的方法,部分原因是通过将欧姆定律应用于一系列电阻很容易理解,但这仍然存在依赖RRAM的问题。

正如研究替代方案的人所说,RRAM仍需要进行开发工作才能将其商业化。编程和电阻之间的关系是非线性的,这就要求必须要做更多的工作来制造商业上可行的RRAM内存内计算电路。换句话说,“这是个好主意,但准备就绪时请再告知我们。”我不知道任何商业发展(与商业前研究相对)的状况,但你们如果坚信这可以实现,请发表你们的观点。

既然如此,如果我们还不准备使用电阻器阵列来做,那我们该怎么办?

用Flash做

我听说过的下一种方法是使用闪存而不是RRAM。具体地说,NOR闪存拥有更传统的word-line/bit-line结构。一开始,我就被这种评论吸引住了,这种使用电容而不是电阻的方法。使用欧姆定律以外的其他方法,乘积算法是否同样有效?

好吧,实际上,它兼具了电阻性和电容性。通常,存储单元是导通或截止的晶体管。但是,如果它是部分导通的,则它可以用作为电阻器,电阻取决于存储单元(电容器)浮栅上的电荷量。一直运行时,cell将传导至其最大容量。这个过程中,它根本不导电,但可以进行一些部分编程。Microchip提供了下图来说明在编程状态之间的电阻的线性特性。

( 图片来自于Microchip Technology)

对于熟悉Flash的人来说,这听起来可能与您之前所见类似。这就像闪存上的MLC或TLC存储单元。您可能还记得,这是在单个闪存位中存储更多信息的两种方法。MLC或“多层单元”可以存储2 bits。这意味着编程可以采用四个不同的级别,包括全开和全关。TLC表示“三层单元”,它使用八个层存储3 bits 。

好吧,原则上,对于“无限级单元”,将其扩展到“ ILC”并不困难(如果我可能这么大胆的话)。换句话说,它是一个连续范围,而不是4或8个离散级。明确地说,没有人使用或提议使用ILC名称,希望您能理解。而且,实际上,存储单元中的级别数可能不会比TLC单元中使用的级别数多得多。因此,整个连续事物可以帮助我们了解正在发生的事情,但是目前的现实情况还比较有限。

当然,如果我们学习基础物理学,我们将无法做一个无限连续的单元。这是因为栅极值是离散的:它由浮置栅极(或电荷陷阱)中的电子数量决定。您不能拥有分数电子,因此可以有效地量化cell电阻值的范围。但是,实际上,有很多电子-并且在编程过程中没有计算电子,因此它们的数目是正负的。

如果人们要利用一个小型的,前沿的闪存单元,那么电子的数量就会变得重要。但是,使用较旧的技术,以及潜在地使用比通常更大的cell来容纳更多的电子(由于存储密度不是此处的主要目标),您仍然可以处理大量的电子(正负)。

这成为使了用此方法面临的一个挑战——您无法精确控制电子数。而且,对任何数量的响应都将随过程和温度以及所有导致变化的变量而变化。而像上面这样漂亮干净的图形则会在实践中变得更加混乱。

有两家公司走这条路。Microchip拥有他们的memBrain数组(您必须承认一个非常聪明的名字),这要归功于他们对SST收购,而Mythic是一家致力于推理引擎的初创公司,该引擎采用带有闪存的内存内计算。(Mythic的闪存来自于其他授权,但他们拒绝透露来自谁。)两家公司都表示,他们正在使用广泛的校准技术(我不敢透露其细节)来应对这种变化。

在启动时(甚至在测试时)进行校准是一回事,但是闪存cell也会随着时间的流逝失去电子。这就是为什么闪存具有数据保留特性。电子会跑来跑去,这带来了一个有趣的话题:在这种类型的存储器阵列上,数据保留,数据耐久性的含义是什么?

从应用程序的角度来看,这取决于它是要在云计算还是边缘推理引擎中使用。在边缘,它可能会在设备的整个生命周期内执行某些固定的推理功能。因此,如果这些阵列足够多,那么您将在第一次加载权重,并且由于闪存是非易失性的,因此您无需再对其进行编程(除非您进行了现场更新)。尽管您仍然需要移动activations,但无需移动权重,它们将被永久地存储在数组中。

在极限条件下,这将表明耐久性(与设备在累积损坏将电子泄漏加速到无法接受的水平之前可以编程的次数)无关紧要,它只能编程一次。

相比之下,在云应用程序中,该设备很可能作为通用计算资源共享,因此这需要为每个新的应用程序重新编程。这意味着在云中,续航变得更加重要。Mythic声称有10K的写入周期,并且观察到,即使您每天重新编程,它也将持续10年以上。Microchip还预计可承受1K – 10K个周期。

然后是一般的数据保留。标准的闪存cell很好地说明了数字设备提供的抗干扰性优于模拟设备。您可以在一个简单的一个单元中失去(或获得)一些电子,这无关紧要。该单元格仍将读取相同的内容。但这样持续下去,就会永无止境。

如果我们为之设定一个模拟值,在cell中使用一个模拟值,那么从理论上讲,每个电子都很重要。但是,如果有足够的电子迁移,则您需要刷新存储单元,或者…您需要以某种方式补偿单元变化的行为,因为今天相同的模拟输入将产生与一年前不同的结果。

校准电路还可以处理一些老化(aging)问题。但是,对于数据保留,Mythic说他们确实执行“……定期更新闪存中存储的权重值”。这将使持久性成为主要的磨损机制(wear-out mechanism),而不是数据保留。Microchip表示其数据保留时间为TBD,但很可能会每季度或每年对设备进行重新编程以恢复单元。

这些家伙还在DAC和ADC上花费了大量精力。他们需要大量的ADC和DAC(官方称他们有27,000个ADC),且必须是高质量的,以将信噪比(SNR)保持在可促进准确推理的范围内,而这正是许多设计工作的重点。Mythic声称他们提供了一种新颖的ADC;Microchip可以共享其ADC以减少所需的数量。虽然ADC确实消耗能量,但它们都声称它们的使用大大降低了整体系统功耗。

Microchip的完整阵列结构如下所示。

Microchip将其memBrain技术作为IP出售,以供他人集成到其推理芯片中。另一方面,Mythic也在自己的SoC中使用它们。他们使用的术语稍有不同-内存内计算和模拟计算-但这是同一回事。今天,我们对它们的关注将止步于存储阵列;我们将在以后的文章中介绍它们的完整架构。

我将在这里简要介绍一下自己的想法,想知道是否可以以此方式使用其他cell技术。如果您可以使PCRAM单元部分melting/crystallization,那行得通吗?鉴于磁域的严格磁极方向,MRAM听起来像是行不通的,但事实并非如此简单。编程的性质取决于对准偶极子(aligned dipoles)的数量和角度,偶极子的数量和角度可能不是100%,也可能不是平行或反平行。因此,理想情况下,它也可以采用模拟值。我与MRAM行业专家进行了简短的交谈,他说从理论上讲这是可能的,但尚未证明是可行的。明确地说,我没听说任何一个涉及这些技术的项目。

用SRAM来做

下一个想法来自普林斯顿大学在Hot Chips的演讲。他们使用了SRAM阵列。这似乎很……令人惊讶,因为它们易变。并且,根据定义,SRAM是双稳态单元。因此,它无法处于中间状态。这应该怎么处理?

普林斯顿团队一直受到我们一直在讨论的这些相同的SNR问题的激励。针对上图,他们有自己的观点,说明变化可能对存储单元产生的影响。他们声称这很难处理,并且为此需要校正的DAC和ADC最终在面积和功耗上都压倒了阵列。

鉴于与闪存在这个问题上的讨论,尚不清楚事情是否像普林斯顿大学团队所建议的那样可怕,但我没有可以论证的论点,来证明如果闪存方法比SRAM单元使用更多的功率或更大的面积,则全部使用。

普林斯顿大学的工作归结为如何去模拟的问题。到目前为止,我们采用的方法是在内存之前进行模拟,然后在内存之后进行数字处理。那不是普林斯顿大学的工作。它们保持数字状态直到位线读数。这有一些含义:

他们不只使用一条bit line进行计算。由于单元仍然是数字值,因此需要几条bit line才能进行一次计算。bit line可以拆分,不同的组进行不同的乘法。在下面的更高级别的图像中对此进行了说明。

它们一次输入8个输入,因此对输入向量进行时间切片,并进行几次连续的乘法运算以获得最终结果。

bit line电荷沉积到电容器上;当准备好读取时,该电荷被读出并发送到ADC,以转换回数字域。

它们的基本单元结构如下所示:

这些电容器可能会引起芯片尺寸的问题,但他们表示可以使用cell上方的金属。当然,完整的单元现在比标准的6T SRAM单元(即使没有电容器)大80%(与闪存相比已经很大),但是他们说,它们的整体电路仍然比标准数字实现所需的电路小得多。且没有完整模拟实施的挑战。由于它们的基本阵列操作仍为数字形式,因此对噪声和变化的敏感性更低,这意味着它们的ADC可以更简单,功耗更低。

用…DRAM做吗?

对于最后的讨论,我们转向与HotMEMs上介绍的UPMEM完全不同的解决方案。从DRAM芯片的角度来看,这可以被视为内存内计算。但是从内存阵列的角度来看,它其实是近内存计算。

这个想法是这样的:如果不使用大量的功率来获取DRAM内容并以某种方式将其掺入CPU或其他计算结构中,直接在DRAM die上进行计算呢?

这就是UPMEM所做的。他们使用DRAM工艺在DRAM裸片上构建了一个简单的处理器,而该工艺原本不是想要的。他们必须在架构上做出一些让步——这不会与Xeon芯片竞争,但是话又说回来,它并不需要针对他们正在做的事情。他们将架构和芯片称为``内存中处理''或PIM。

他们不是将数据带到计算中,而是将计算带到数据中。例程(runtime)由主CPU进行,并在DRAM芯片本身中本地执行。然后,无需将数据移动到DRAM芯片之外的任何位置,只需将计算结果传回主机系统即可。而且,由于ML计算通常涉及大量的减少(reduction),因此结果应该是用于计算的数据更少。

尽管这样做确实需要对DRAM设计本身进行一些小的更改,但他们并没有改变制程。现在,一个标准的DRAM模块将为分布式计算提供多种机会。

这有不利之处吗?利用此功能编写完整的程序会很复杂。他们的工具套件和流程旨在解决此问题。因此,除了“不是正常完成方式”之外,我没有看到任何危险信号(假设它们已经正确执行并且可以可靠地提供)。

他们希望使用PIM offload的服务器将比连接到无PIM的DRAM模块的标准服务器消耗两倍的功耗。但是,吞吐量为20倍,它仍然为他们提供10倍的能源效率优势。另一个例子是“在本地花费更多而在全局花费更少”。

他们还建议,这种方法可以帮助抵御侧信道安全攻击。这是由于这样的事实,原本包含在一个或多个CPU中的一组计算线程流向了DRAM。现在,您需要对所有DRAM进行攻击,并以某种方式弄清楚哪个线程在向何处去,以便从攻击数据中获得任何意义。他们期望这将是一项艰巨的任务。

您可以在下面的链接中找到更多详细信息。

Microchip/SST memBrain

Mythic

Princeton SRAM paper

UPMEM

*免责声明:本文由作者原创。文章内容系作者个人观点,半导体行业观察转载仅为了传达一种不同的观点,不代表半导体行业观察对该观点赞同或支持,如果有任何异议,欢迎联系半导体行业观察。

今天是《半导体行业观察》为您分享的第2135期内容,欢迎关注。

半导体行业观察

『半导体第一垂直媒体』

实时 专业 原创 深度

标签: #内存如何计算