ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

模拟内存计算如何解决边缘人工智能推理的功耗挑战

2020-07-11 18:42:42  阅读:275  来源: 互联网

标签:功耗 模型 MAC 人工智能 神经网络 内存 计算 单元


模拟内存计算如何解决边缘人工智能推理的功耗挑战

How analog in-memory computing can solve power challenges of edge AI inference

机器学习和深度学习已经成为我们生活中不可或缺的一部分。人工智能(AI)应用通过自然语言处理(NLP)、图像分类和目标检测深深地嵌入到我们使用的许多设备中。大多数人工智能应用程序都是通过基于云的引擎提供服务的,这些引擎对它们的用途很好,比如在Gmail中输入电子邮件响应时,可以得到单词预测。             

虽然我们很享受这些人工智能应用的好处,但这种方法带来了隐私、功耗、延迟和成本挑战。如果有一个本地处理引擎能够在数据本身的原点执行部分或全部计算(推断),那么这些挑战就可以得到解决。这在传统的数字神经网络实现中很难做到,在传统的数字神经网络中,内存成为一个耗电的瓶颈。这个问题可以通过多级存储器和使用模拟内存计算方法来解决,这种方法使处理引擎能够满足在网络边缘执行人工智能推理所需的低得多的毫瓦到微瓦的功率要求。

云计算的挑战             

当人工智能应用程序通过基于云的引擎提供服务时,用户必须(自愿或不情愿地)上传一些数据到云,在那里计算引擎处理数据,提供预测,并将预测发送到下游用户消费。

图1:从边缘到云的数据传输。             

与此过程相关的挑战概述如下:             

隐私和安全问题:对于始终在线、随时感知的设备,人们担心个人数据(和/或机密信息)在上传过程中或在数据中心的有效期内被滥用。             

不必要的功耗:如果每一个数据位都将被云化,那么它将消耗来自硬件、无线电、传输以及可能在云中不需要的计算中消耗的能量。             

小批量推断的延迟:如果数据源于边缘,有时可能需要一秒钟或更长时间才能从基于云的系统获得响应。对于人类的感官来说,任何超过100毫秒(ms)的延迟都是显而易见的,并且可能是令人讨厌的。             

数据经济需要有意义:传感器无处不在,而且价格低廉;然而,它们产生了大量数据。将每一位数据上传到云端并进行处理是不经济的。             

为了使用本地处理引擎解决这些挑战,执行推理操作的神经网络模型必须首先使用给定的数据集针对所需的用例进行训练。通常,这需要高计算(和内存)资源和浮点运算。因此,机器学习解决方案的训练部分仍然需要在公共或私有云(或本地GPU、CPU、FPGA场)上使用数据集来生成最优的神经网络模型。一旦神经网络模型准备好了,由于神经网络模型不需要反向传播来进行推理操作,因此可以用小型计算引擎进一步优化模型。推理机通常需要大量的乘法累加(MAC)引擎,然后是一个激活层,如整流线性单元(ReLU)、sigmoid或tanh,这取决于神经网络模型的复杂度,以及层与层之间的池层。             

大多数神经网络模型需要大量的MAC操作。例如,即使是一个相对较小的“1.0 MobileNet-224”模型也有420万个参数(权重),并且需要5.69亿个MAC操作来执行推理。由于大多数模型都是由MAC操作控制的,这里的重点将放在机器学习计算的这一部分,并探索创建更好解决方案的机会。一个简单的,完全连接的两层网络如下图2所示。

图2:完全连接的两层神经网络。             

输入神经元(数据)用第一层权值进行处理。第一层的输出神经元然后用第二层权重进行处理,并提供预测(比如,模型是否能够在给定的图像中找到猫的脸)。这些神经网络模型使用“a点积”来计算每一层中的每个神经元,如下式所示(为了简化,省略方程中的“偏差”项):

数字计算中的存储瓶颈             

在数字神经网络实现中,权值和输入数据存储在DRAM/SRAM中。权重和输入数据需要转移到MAC引擎进行推理。如下面的图3所示,这种方法在获取模型参数和将数据输入到发生实际MAC操作的ALU时会消耗掉大部分的能量。

图3:机器学习计算中的内存瓶颈。(来源:Y.-H.Chen、J.Emer和V.Sze,“Eyeriss:卷积神经网络节能数据流的空间架构”,ISCA,2016年)             

从能量的角度来看,一个典型的使用数字逻辑门的MAC操作消耗大约250飞秒焦耳(fJ,或10-15焦耳)的能量,但在数据传输过程中消耗的能量比计算本身多出两个数量级,并且在50微微焦耳(pJ,或10-12焦耳)到100pJ的范围内。公平地说,有许多设计技术可以最大限度地减少从内存到ALU的数据传输;但是,整个数字方案仍然受到Von Neumann架构的限制,因此这为减少功耗提供了很大的机会。如果执行MAC操作的能量可以从~100pJ减少到pJ的一小部分呢?             

用模拟内存计算消除内存瓶颈             

当内存本身可用于减少计算所需的功耗时,在边缘执行推理操作变得省电。使用内存计算方法可以最大限度地减少必须移动的数据量。这反过来又消除了数据传输过程中的能量浪费。能量消耗被进一步最小化使用闪光灯电池,它可以以超低的活动功耗工作,并且在待机模式下几乎没有能量消耗。             

这种方法的一个例子就是memBrain™ 技术来自硅存储技术公司,一家微芯片技术公司。基于SST的SuperFlash®内存技术,该解决方案包括内存计算架构,可在存储推理模型权重的位置进行计算。这消除了MAC计算中的内存瓶颈,因为权重没有数据移动,只有输入数据需要从输入传感器(如摄像机或麦克风)移动到内存阵列。             

这种存储器的概念基于两个基本原理:(a)晶体管的模拟电流响应基于其阈值电压(Vt)和输入数据,以及(b)基尔霍夫电流定律,即在一个点上相遇的导体网络中电流的代数和为零。             

同样重要的是要了解基本的非易失性存储器(NVM)位单元,它在这种多级存储器体系结构中使用。下图(图4)是带有共享擦除门(EG)和源线(SL)的两个ESF3(嵌入式超级闪存第三代)位单元的横截面。每个位单元有五个终端:控制门(CG)、工作线(WL)、擦除门(EG)、源线(SL)和位线(BL)。位单元上的擦除操作是通过在例如上施加高压来完成的。编程操作是通过在WL、CG、BL和SL上施加高/低压偏置信号来完成的。读取操作是通过在WL、CG、BL和SL上施加低压偏置信号来完成的。

图4:SuperFlash ESF3单元。             

利用这种存储器结构,用户可以通过细粒度编程操作在不同的Vt级别上对存储器位单元进行编程。该存储技术利用一种智能算法来调整存储单元的浮栅(FG)Vt,以实现输入电压的特定电流响应。根据终端应用的要求,电池可编程为线性或亚阈值工作区。             

图5演示了在内存单元上存储和读取多个级别的能力。假设我们试图在内存单元中存储2位整数值。对于这个场景,我们需要用2位整数值(00、01、10、11)中的四个可能值之一对内存数组中的每个单元进行编程。下面的四条曲线是四种可能状态中的每一种的IV曲线,电池的电流响应取决于施加在CG上的电压。

图5:ESF3单元中的Vt电平编程。             

带内存计算的乘法累加运算             

每个ESF3细胞都可以被建模为可变电导(gm)。ESF3电池的电导取决于编程单元的浮栅电压。将训练模型的权值编程为存储单元的浮栅Vt,因此,单元的gm表示训练模型的权重。当输入电压(Vin)施加在ESF3电池上时,输出电流(Iout)将由方程式Iout=gm*Vin给出,这是输入电压与存储在ESF3电池上的重量之间的乘法运算。             

在下面的图中,从阵列i2(例如)中,通过累加(i)列的方式(例如,i 2)将从阵列中进行的乘法运算(i 2)被连接到一个小的阵列中(例如)进行乘法运算(i 2)。根据应用,激活功能可以在ADC块内执行,也可以在存储器块外部用数字实现来实现。

图6:使用ESF3数组(2×2)进行乘法累加运算。

为了在更高的层次上进一步说明这一概念,来自训练模型的单个权重被编程为存储单元的浮栅Vt,因此来自训练模型每一层的所有权重(假设一个完全连接的层)都可以被编程到一个物理上看起来像权重矩阵的内存阵列上,如图7所示。

图7:用于推理的权重矩阵内存数组。

对于推理操作,首先使用数模转换器(DAC)将数字输入(比如图像像素)转换为模拟信号并应用于存储器阵列。然后,该阵列对给定的输入向量并行执行数千个MAC操作,并产生输出,这些输出可以进入各个神经元的激活阶段,然后可以使用模数转换器(ADC)将其转换回数字信号。然后,数字信号在进入下一层之前被处理为池。             

这种类型的内存结构非常模块化和灵活。许多memBrain瓦片可以缝合在一起,用权重矩阵和神经元混合构建各种大模型,如图8所示。在这个例子中,一个3×4的磁贴配置被缝合在一起,并且数据可以通过共享总线从一个磁贴移动到另一个磁贴。

图8:memBrain™ 是模块化的。

到目前为止,我们主要讨论了这种架构的硅实现。软件开发工具包(SDK)(图9)的可用性有助于解决方案的部署。除了硅之外,SDK还有助于推理引擎的部署。            

SDK流与培训框架无关。用户可以在任何可用的框架中创建神经网络模型,如TensorFlow、Pythorch或其他框架,根据需要使用浮点计算。一旦建立了一个模型,SDK将帮助量化训练过的神经网络模型,并将其映射到内存阵列中,在那里可以使用来自传感器或计算机的输入向量执行向量矩阵乘法。            

结论             

这种多级内存方法及其内存计算能力的优点包括:             

极低功耗:该技术专为低功耗应用而设计。第一级功耗优势来自于这样一个事实,即解决方案是内存计算,因此在计算过程中,SRAM/DRAM的数据和权重传输不会浪费能量。第二个能量优势源于这样一个事实:闪光电池在亚阈值模式下工作,电流值非常低,所以有源功耗非常低。第三个优点是,在待机模式下几乎没有能量消耗,因为非易失性存储单元不需要任何电源来保存数据,以备永远在线。该方法也非常适合于利用权重和输入数据的稀疏性。如果输入数据或权重为零,则内存位单元不会被激活。             

较低的封装尺寸:该技术使用分离门(1.5T)单元架构,而数字实现中的SRAM单元基于6T架构。此外,与6T SRAM单元相比,该单元是更小的比特单元。另外,一个单元单元可以存储整个4位整数值,而SRAM单元需要4×6=24个晶体管来存储。这提供了一个大大更小的片上占用空间。             

较低的开发成本:由于内存性能瓶颈和von Neumann架构的限制,许多专用设备(如Nvidia的Jetsen或Google的TPU)倾向于使用更小的几何结构来获得每瓦的性能,这是解决边缘人工智能计算挑战的一种昂贵方法。随着使用模拟内存计算方法的多级存储器方法,计算在闪存单元中在芯片上进行,因此可以使用更大的几何结构,并减少掩模成本和交付周期。             

边缘计算应用前景广阔。然而,在边缘计算能够起飞之前,还需要解决电力和成本方面的挑战。一个主要的障碍可以通过使用在flash单元中执行片上计算的存储器方法来消除。这种方法利用了一种经过生产验证、事实上是标准类型的多级内存技术解决方案,该解决方案针对机器学习应用程序进行了优化。

标签:功耗,模型,MAC,人工智能,神经网络,内存,计算,单元
来源: https://www.cnblogs.com/wujianming-110117/p/13284868.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有