痴笑作者

不以非冯为目的AI存储器都是耍流氓?

横空出世

ML Computation in Memory

接着昨天矽说针对MIT“跨越性”AI芯片解密:真的是颠覆性创新吗?的介绍,我们继续聊聊最近持续热门的AI存储器这一话题,顺带总结下ISSCC 2018 AI相关论文的思路。

随着新年钟声的敲响,ISSCC 2018的大幕已然拉上。 回顾ISSCC 2018,众所瞩目的焦点中,不可忽视的压轴大戏——Machine Learning in Memory session。怀着无比瞻仰的心态,小编挤进了大厅期待这一场Computing in memory (CIM)的盛宴。

Source: ISSCC 2018 31.5 slides,By 台湾清华大学

Machine Learning为什么要CIM?请回顾矽说专栏之——脑芯编·五 | 分手?摆脱冯诺依曼的深度学习硬件,简而言之,就是逻辑计算的并行度不断扩张时,所需的数据传输带宽(从存储器到计算单元)的大小限制了计算速度,史称冯诺依曼瓶颈。并且,随着摩尔定律的发展,计算单元的功耗越来越低,而与之对应的存储器读写功耗不断上升,导致AI算力的功耗瓶颈。

所谓CIM(存储器内的计算)就是为了克服这一冯诺依曼瓶颈,即只要将数据扔到存储器中,再读出时的数据为计算完成时的结果。注意,此处的CIM和CS领域的in-memory computing是两个概念。(划重点)CIM令人向往的潜力主要包括——1)数据传输带宽需求下降,(2)用于数据传输的功耗下降

Source: ISSCC 2018 31.1 slides,By MIT

无论在器件还是在电路设计领域,面向具有计算能力的存储单元设计一直是一个热门话题,比如具有记忆能力的电阻——ReRAM / memoristor。

又一件皇帝的新衣?

然而,似乎,好像,有什么不对劲的地方。首先是上述的两个潜力:(1)数据传输的需求下降。(2)用于神经网络层间内部的功耗减少。

在目前的深度学习处理器中,大部分深度学习处理器与主控的通信模式都是基于类似总线外挂的存储器接口,而数据的内部调度是不会体现在外部的传输带宽上的。比如今年Machine Learning处理器 session中的旗舰设计 13.2:

Source: ISSCC 2018 13.2 slides,By 北海道大学

其层与层间的数据通信,基本建立在了使用电感耦合堆叠在主芯片下方的SRAM中。在类似的情况下,CIM对于外部带宽的需求并没有实质提升。而实际的情况可能更糟糕,在CIM session所有发表的内容中,大部分设计均需要将CIM输出回传给host再调度以便于下一层计算,仅有13.5实现了两级全链接网络的互传。但CNN间的层间互传与重新排序比全链接复杂的多,CIM并未实质解决该问题。

Source: ISSCC 2018 31.5 slides,By 台湾清华大学

除此之外,CIM还带来了一个噩梦的芯问题——失配。在所有RAM制造过程中,面积(密度)是第一考量因素,而晶体管尺寸在能够保持功能的情况下,以更小为优化方向。换言之,RAM cell在实际制造过程中具有极高的不匹配性。由于这些失配特征,在完成多比特MAC计算时往往需要额外的抗失调与失配补偿电路。

为了缓解这一问题,MIT的“跨越性”设计提出了在global bit line上用脉冲长度调制的DAC代替原有的电流DAC,以解决IDAC的失配问题。

Source: ISSCC 2018 31.1 slides,By MIT

类似的做法,亦可以在ISSCC 2018 7.4 的设计中看到,将数字码调制成脉宽与振荡器信号叠加,实现时域上的乘法:

Source: ISSCC 2018 7.4 slides,By 佐治亚理工学院

该方法的逻辑运算复杂度低、功耗低,但是其对MAC计算速度的影响也是显而易见的。

所以,CIM for Machine Learning渴望解决的冯诺伊瓶颈并没有在今年的session被很好地诠释。而其性能上的提升,基本都来自于因为采用低精度的(二进制binary或ternary)网络导致的低位宽需求。讲白了,就是借着CIM的大名行二进制高能效模拟运算之实。然而,这一优势又在machine learning session被stanford团队用传统开关电容的方式打脸——

Source: ISSCC 2018 13.5 slides,By Stanford

该文章采用传统的SAR ADC电荷重分配原理,将基于开关电容的神经元计算能效推进到772 TOPS/W (你没有看错,这么令人恐怖的数字),已经在CIM能效的的10倍以上。

春天在哪里?

然而,CIM并非一无是处。处理器单元与存储器共享的低功耗架构,在always-on的near sensor系统有着巨大的性能优势。ISSCC 2018正好提供了两个不错的例证:首先是面向机器人增强训练(reinforcement learning)的混合型号神经模态加速器,

Source: ISSCC 2018 7.4 slides,By 佐治亚理工学院

其二是面向音频识别的模拟前端与深度学习后端处理系统:

Source: ISSCC 2018 21.2 slides,By 哥伦比亚大学

这两个例子都具有信号流与神经网络的间流水线链接模式,并不存在基于总线的host调度,同时,又是低功耗的应用场景,层间互联的需求也很明显。小编相信在这些应用中,CIM的优势将逐渐展现出来。

矽说
矽说

入门神经网络深度学习机器学习
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

机器人技术技术

机器人学(Robotics)研究的是「机器人的设计、制造、运作和应用,以及控制它们的计算机系统、传感反馈和信息处理」 [25] 。 机器人可以分成两大类:固定机器人和移动机器人。固定机器人通常被用于工业生产(比如用于装配线)。常见的移动机器人应用有货运机器人、空中机器人和自动载具。机器人需要不同部件和系统的协作才能实现最优的作业。其中在硬件上包含传感器、反应器和控制器;另外还有能够实现感知能力的软件,比如定位、地图测绘和目标识别。之前章节中提及的技术都可以在机器人上得到应用和集成,这也是人工智能领域最早的终极目标之一。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

摩尔定律技术

摩尔定律是由英特尔创始人之一戈登·摩尔提出来的。其内容为:积体电路上可容纳的电晶体数目,约每隔两年便会增加一倍;经常被引用的“18个月”,是由英特尔首席执行官大卫·豪斯所说:预计18个月会将芯片的性能提高一倍。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

推荐文章
暂无评论
暂无评论~