南风娱乐网致力于优质软件,活动线报,游戏辅助,绿色工具等资源共享,好货不私藏!
精品资源,免费分享

内存计算是什么(内存存储容量计算方式)

作者:南风

来源:半导体行业观察(ID: IC Bank)从“eejournal”和Bryon Moyer汇编的内容。谢谢你。

内存计算是什么(内存存储容量计算方式)

内存可以看作是“通路”,然后成为产品功能。将权重存储在内存中并使用激活作为输入可以节省数据移动和功耗。而且实现的方式有很多种,比如可以用RRAM、闪存或者SRAM进行运算,还有一种方法涉及DRAM,但这是完全不同的。

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

几周前我们见过一些。他们采用了新的推理架构,专注于内存带宽和局部性,试图以更快的速度和更低的功耗移动更少的数据。然而,我们有意推迟讨论解决这个问题的另一种方法:内存计算。

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

内存计算利用了一个相当方便的内存事实。因此,如果权重存储在内存中,您可以通过激活来访问内存,以获得乘法和累加。与实际内存唯一不同的是,内存中的计算一次合并所有字线,而不是通过解码输入只得到一条字线。

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

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

用RRAM来做吧

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

正如研究替代品的人所说,在商业化之前,RRAM仍需要进行开发工作。并且编程电阻器和编程电阻器之间的关系是非线性的,这需要做更多的工作来制造商业上可行的RRAM存储器内计算电路。换句话说,“这是一个好主意,但请让我们知道你什么时候准备好了。”我不了解任何商业发展(相对于商业前的研究),但如果你坚信这是可以实现的,请发表你的看法。

在这种情况下,如果我们不准备使用电阻阵列来做,我们该怎么办?

在闪存中完成

我听说的下一种方法是用闪存代替RRAM。具体地,NOR闪存具有更传统的字线/位线结构。当初我被这个评论吸引,这个用电容代替电阻的方法。在使用欧姆定律以外的其他方法时,乘积算法是否同样有效?

实际上,它既有电阻性又有电容性。通常,存储单元是导通或截止的晶体管。但是,如果它是部分导电的,它可以用作电阻,电阻取决于存储单元(电容器)的浮栅上的电荷量。在任何时候,电池都将传导到其最大容量。在这个过程中,完全不导电,但可以进行一些局部编程。Microchip提供了下图来说明编程状态之间电阻的线性特性。

(图片来自微芯片技术)

内存计算是什么(内存存储容量计算方式)

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

好吧,原则上,对于“无限级单位”,扩展到“ILC”并不难(容我冒昧)。换句话说,它是一个连续的范围,而不是4或8个离散的级别。需要说明的是,没有人使用或提议使用ILC名称。希望你能理解。此外,事实上,存储单元中的级数可能不会比TLC单元中使用的级数多很多。因此,整个连续体可以帮助我们理解正在发生的事情,但当前的现实仍然是有限的。

当然,如果我们研究基础物理,就不可能做出一个无限连续的单位。这是因为栅极值是离散的:它由浮栅(或电荷陷阱)中的电子数决定。不能有分数电子,可以有效量化细胞电阻的范围。但是,事实上,有很多电子——而且在编程过程中没有计算电子,所以它们的数量是正的和负的。

如果人们想要使用一个小的、尖端的闪存单元,电子的数量将变得很重要。然而,使用较旧的技术,并且可能比通常的电池更大以容纳更多的电子(因为存储密度不是这里的主要目标),你仍然可以处理大量的电子(正负)。

这就成为了这种方法的一个挑战——你无法精确控制电子的数量。而且,对任何数字的响应都会随着工艺和温度以及引起变化的所有变量而变化。而像上面这样漂亮干净的图形,在实践中会变得更加混乱。

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

启动时(甚至测试时)校准是一回事,但随着时间的推移,闪光单元也会失去电子。这就是为什么闪存具有数据保持特性。电子会跑来跑去,这就带来了一个有趣的话题:在这种类型的存储器阵列上,数据保持和数据持久性的意义是什么?

从应用角度看,要看是要用在云计算还是边缘推理引擎。在边缘,它可能在设备的整个生命周期中执行一些固定的推理功能。所以,如果有足够多的数组,那么你会在第一时间加载权重,而且由于闪存是非易失性的,你不需要重新编程(除非你现场更新)。虽然您仍然需要移动激活,但您不需要移动权重,它们将永久存储在数组中。

在极端条件下,这将表明耐久性(与累积损伤将电子泄漏加速到不可接受的程度之前器件可以被编程的次数无关),它只能被编程一次。

相比之下,在云应用程序中,设备可能会作为通用计算资源共享,因此需要为每个新应用程序重新编程。这意味着在云中,耐力变得更加重要。Mythic声称有一个10K写周期,并观察到即使你每天重新编程,它也会持续10年以上。微芯片预计还能承受1k-10k次循环。

然后是一般的数据保留。的标准闪存单元表明,数字器件提供的抗干扰性能优于模拟器件。在一个简单的单位中,你可以失去(或获得)一些电子,这无关紧要。该单元仍将读取相同的内容。但这样下去,就没有尽头了。

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

校准电路还可以处理一些老化问题。然而,对于数据保留,Mythic说他们确实执行了“...定期更新存储在闪存中的重量值”。这将使持久性而不是数据保留成为主要的磨损机制。微芯片说它的数据保持时间是TBD,但是设备很可能每季度或每年被重新编程以恢复该单元。

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

微芯片的完整阵列结构如下所示。

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

内存计算是什么(内存存储容量计算方式)

我在这里简单介绍一下我的想法,想知道其他的细胞技术是否也可以这样使用。如果你能熔化/结晶PCRAM单元,它能工作吗?鉴于磁畴的严格磁极方向,MRAM听起来好像行不通,但事实并非如此简单。编程的性质取决于对齐偶极子的数量和角度,可能不是100%平行或反平行。因此,理想情况下,它也可以采用模拟值。我和一位MRAM工业专家进行了简短的交谈。他说理论上是可以的,但是还没有被证明是可行的。具体来说,我还没有听说过涉及这些技术的**。

用SRAM来做。

下一个想法来自普林斯顿大学在Hot Chips的讲座。他们使用SRAM阵列。这似乎非常…令人惊讶,因为它们是可变的。根据定义,SRAM是一种双稳态单元。因此,它不能处于中间状态。我该怎么处理这个?

普林斯顿团队一直被我们一直在讨论的这些相同的SNR问题所激励。鉴于上图,他们对变更对存储单元的可能影响有自己的看法。他们声称这很难处理,需要为此进行校正的DAC和ADC最终会在面积和功耗上压倒阵列。

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

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

内存计算是什么(内存存储容量计算方式)

它们使用一个以上的位线进行计算。由于该单元仍然是一个数字值,它需要几个位线来进行计算。位线可以被分割,且不同组可以执行不同的乘法。下图显示了这一点。

它们一次输入八个输入,因此输入向量是时间切片的,并且执行几个连续的乘法操作以获得最终结果。

内存计算是什么(内存存储容量计算方式)

位电荷沉积在电容器上;准备读取时,该电荷被读出并发送至ADC,以便转换回数字域。

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

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

内存计算是什么(内存存储容量计算方式)

你用吗...…DRAM?

内存计算是什么(内存存储容量计算方式)

对于最后的讨论,我们转向一个与HotMEMs上推出的UPMEM完全不同的解决方案。从DRAM芯片的角度来看,这可以算是内存中计算。但从内存数组的角度来看,其实是近内存计算。

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

UPMEM就是这么做的。他们使用DRAM技术在DRAM芯片上构建了一个简单的处理器,这并不是他们想要的。他们必须在架构上做出一些让步——它不会与至强芯片竞争,但话说回来,它不需要特定于他们正在做的事情。他们把架构和芯片称为& # 8220;内存处理在& # 8221;或者PIM。

他们不是将数据带入计算,而是将计算带入数据。运行时由主CPU执行,并在DRAM芯片本身中本地执行。然后,不需要将数据移动到DRAM芯片之外的任何地方,只需将计算结果发送回主机系统即可。而且,由于ML计算通常涉及大量的归约,结果应该是用于计算的数据较少。

内存计算是什么(内存存储容量计算方式)

尽管这确实需要对DRAM设计本身进行一些小的改动,但它们并没有改变制造工艺。现在,一个标准的DRAM模块将为分布式计算提供许多机会。

这样有什么坏处吗?用这个函数写一个完整的程序会很复杂。他们的工具套件和流程就是为了解决这个问题而设计的。因此,除了“不是正常的完成方式”(假设已经正确执行并且可以可靠地提供),我没有看到任何危险信号。

内存计算是什么(内存存储容量计算方式)

他们希望使用PIM offload的服务器消耗的功率是连接到没有PIM的DRAM模块的标准服务器的两倍。然而,在20倍的吞吐量下,它仍然为他们提供了10倍的能效优势。再比如“多花本地,少花全球”。

内存计算是什么(内存存储容量计算方式)

他们还建议,这种方法可以帮助抵御侧信道安全攻击。这是由于最初包含在一个或多个CPU中的一组计算线程流向DRAM。现在,您需要攻击所有DRAM,并以某种方式找出哪个线程要去哪里,以便从攻击数据中获得任何意义。他们预计这将是一项艰巨的任务。

免责声明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

最新评论