Conv-SRAM与MAV具体实现
Conv-SRAM的具体实现如下图所示:权重(1-bit)储存在SRAM中,输入数据(7-bit数字信号)经过DAC成为模拟信号,而根据SRAM中的对应权重,DAC的输出在模拟域被乘以1或者-1,然后在模拟域做平均,最后由ADC读出成为数字信号,这个操作即MAV。
这么做能实现几个特点:首先,这里不再有明显的“读写内存”的动作,因为根据当前内存的内容(即权重)直接对输入数据进行操作,避免了之前的“从内存读数据——从内存读权重——权重与数据相乘——结果存回内存”的冯诺伊曼式计算过程。当然,不用读写内存这件事从另一个角度看是因为计算全部是在模拟域完成,做模拟信号处理的时候不使用冯诺伊曼式的处理模型本来就很常见。第二个特点是,因为CNN中输入数据是被带不同权重的卷积核复用的,因此一组输入数据可以广播给多组不同卷积核做并行处理。
而接下来的MAV则是Conv-RAM的核心操作。熟悉混合信号电路的朋友们对于这一些操作应当相当熟悉,因为在经典的ADC和DAC中经常会用这些。具体来说,由于乘法的权重是1-bit(1或-1),因此可以简单地用一个开关加差分线来控制,如果是权重是1就让差分线一边的电容充电到DAC输出值,反之则让差分线另一边充
到这个值。平均也很简单,几条差分线简单地连到一起就是在电荷域做了平均了。
于是,使用Conv-SRAM和MAV,最终实现了在LeNET网络对MNIST数据集分类这个benchmark上60倍以的能效比提升,而分类精度降低了约2%。
产品化之困
看到这里,可以说这是一篇非常高质量的学术论文,首先它占了几个时下非常热门的关键词,包括“人工智能加速”,“内存内计算”,“非冯诺伊曼架构”等等,其次工作的质量也很不错,在ISSCC上发表也属名至实归。
然而,这样的结果想要真正实用化,还有许多的路要走。从论文的实测情况来看也是如此,芯片的benchmark是LeNET+MNIST,这样的benchmark可以说是仅仅验证了概念。具体地,我们认为该技术离实用化还需要克服的问题包括:
-1-bit权重的网络模型性能问题。目前低精度网络确实是深度学习领域最热门的研究方向之一,但是1-bit权重的网络模型到底在哪些地方可以使用却还没有定论可言。论文引用了之前的结果,1-bit权重的AlexNet可以实现准确率损失在1%左右,但是AlexNet是一个相对简单的网络并且在目前已经使用不多,而一些更复杂的主流网络如ResNet在深度较深之后,1-bit权重造成的计算精度损失经过多级网络层之间的层层传播累积最后可能会造成很大的误差。这一点如何克服我们尚未看到明确方向。
-如何规模化的问题。论文中的核心操作MAV全部是在模拟领域实现,因此每一路输入输出都需要精度较高的DAC和ADC模块。这些模块其实占据的芯片面积不小,因此规模化的成本代价不小;另外,模拟电路的本质注定了在规模化的时候会遇到设计流程上的困难,包括输入失调,模块间的参数失配等等,因此规模化的难度会远远大于数字电路。
-如果1-bit流行,真的需要这样的专用加速器吗?这其实也是个很重要的问题:假设我们能解决1-bit权重网络的精度问题,那么网络可能可以直接使用SoC上的ARM核直接运算,为何还要另外添加这样一个复杂的模块呢。
总结
《Conv-RAM:An Energy-Efficient SRAM with Embedded Convolution Computationfor Low-Power CNN-Based Machine Learning Applications》是一篇相当成功的论文,一方面概念非常新颖,另一方面在设计方面也属扎实。然而,其中的内存内计算方法想要实用化还有不少距离。