一年一度的ISSCC终于结束,矽说也如约和大家来盘点今年的ISSCC。按惯例,第一波总是AI。关于ISSCC 2019上AI 论文的设置与热点预览,请见,这里不多赘述。今天小编更多地是想和大家谈谈AI处理器设置两年以来开始遇到的瓶颈——如何寻找在专用与灵活度间的落脚点?这是一个To Be or Not to Be 的问题,如果一旦闪失,可能就酿成了哈姆雷特的悲剧。
在进入这个问题之前,首先我们要明确AI处理器本身就是一类专用处理器。AI处理器的出现主要是类似CPU的通用处理器无法满足深度学习的高算力。注意,这里的无法满足,指的是做不到,而不是没有足够多的钱做。通用CPU的单位面积的能效太低,即使跑出单位面积火箭发射的热量来,也无法支持如此大规模的计算。能实现AI处理的GPU/TPU都是面向张量()计算优化的专用处理器,简而言之,他们在处理矩阵计算时的效率是CPU的100倍以上。但问题是,一旦落实到具体算法后,总有比矩阵运算更优化的方案。越专用,效率越高。不过,却有一条横亘在更加专用的设计面前的终极天堑——
所以过于定制的设计很可能在芯片出世后已无用武之地,比如大家还记得去年的这个时候,DNN守护者曾经提出过一个叫做的算法么?两者间的折衷点,是定义一颗芯片的核心问题。
那些年,我们一起追过特定算法
ISSCC 2019的 处理器,基本可以分为两个流派。第一个流派是体系结构级,主要体现在 7。其中的一个重要特点是,大部分设计(特别是学校出的)都是为了某一个应用场景而定制。
比如清华大学刘勇攀教授组的论文7.5:A 65nm 0.39-140.3 TOPS/W 1-to-12b NN 。相比于传统的AI处理器,主要面向以数据复用和矩阵乘为核心的优化途径,这篇论文独辟蹊径,找到了基于的专用加速体系结构:
是发表在两年前体系结构顶会上的一种将无规律的系数网络变为有规律的块循环的办法,主要手段是基于FFT变化:
该方法的特点是,系数和计算的在FFT转换后都迅速减少,无论从网络结构和计算性能上都带来明显的优势,从下图可见,该算法可以带来超过100倍的片上存储空间的优势。
由此,论文7.5基于该算法的特殊性,提出了精度可变的FFT和2维数据复用的MAC阵列,并优化了片上存储器的读写模式以提高吞吐率。但是,究竟可以适用多少实际网络,仍然值得继续关注。
另一个例子是来在密歇根大学的论文7.3,是一款面向双目SLAM导航而实现的专用处理器,但是在庞杂的SLAM体系中,该芯片仅考虑了如何提取特征以及如何通过跟踪特征来计算距离。换言之,其仅仅实现了SLAM前端的专用芯片。
该芯片的核心包括,基于CNN-SLAM()的算法,检测特征。在电路实现上接近经典的CNN加速器
除了特征点提取,在SLAM中的特征点跟踪这一核心功能里,该芯片设计了为-n-Point (PnP)算法优化的专用硬件,核心就是在解各种线性方程:
由于两者都极度专用,因此,该芯片的性能,相比于NV TX系列等瓦级功耗要小的多,仅用240mW,就可以实时处理80帧每秒的数据。
此外,AI 常客的KAIST Yoo教授组,针对强化学习( )中,存储带宽的高要求,在论文7.4提出了专用的浮点压缩硬件,根据数据的出现频率,对高频数据进行压缩,类似 ,以解决其中的带宽,存储空间的问题:
但,可以吐槽的是,强化学习不仅带宽、存储空间要求高,并且需要实时的高精度训练,但是论文7.4对此并无涉及。
有多少模拟计算可以重来?
的另一个流派就是电路,主要包括 14和 24 存内计算的部分。而讲到电路,实际上数字部分能做的事情毕竟非常有限,高性能乘法加法的坑已经被挖完了。所以这一部分全部被模拟计算电路占据了,而且模拟计算在低精度上的高能效也是有目共睹的。(不过更多的时候,大家喜欢把模拟计算披上存算一体非冯的外衣。)
首先,介绍由东南大学杨军教授和清华大学尹首一教授合作的论文24.4。其是基于脉冲宽度调制的二进制系数网络的存内计算实现。二进制系数网络,即其系数只有+/- 1和0三种可能,此时乘加单元就会退化为加减或者不操作单元。这类操作在时间域上,就是将一个脉冲的宽度增加或者减少,如下所示:
很显然,相比于传统数字电路设计,该方法的能效会高很多。不过,该方法如其名称,仅支持系数为一位精度的网络,对于高性能网络,该电路过于专用,并不合适。
另一个设计来自佐治亚理工大学,论文14.1。采用数字与混合信号时域混合的方法实现高性能计算。这个组在去年的ISSCC上提出了时间域的混合信号方法,就是将一个频率和一个脉冲作与即可得到乘法结果,
但是,该方法能功耗与计算结果强相关,乘积接近0时功耗很低,乘积越大功耗越高,甚至远远超过数字电路的计算。为此,他们将该方法作为高位宽计算的LSB乘法电路,而高位采用标准数字计算,实现数字混合信号的混合乘法。
下图比较了纯时域方法和混合方法,随着位数的升高,计算能量的幅度变化缩小了很多。
但是,基于时间域的乘法计算,线性度非常“感人”,并不适用与一般网络,但是针对能自校准的系统使用而言却是不错的低功耗选择。该电路应用在一个仅有全链接网络的多层感知机中,由联合强化学习的方法可以自校准。可见,这个精度上的创新,仍然停留在专用的领域。
还有台湾清华大学与电子科大合作的基于开关电容的多比特乘法,应用于存内计算中:
但与上述计算一样,模拟计算的精度限制很难超过4位,因此智能适用与相对低精度的应用需求中。不过,模拟计算到底能不能被工业界买单,体系结构和算法大佬们总有点不太看好:大佬级的观点不仅有Bill Dally,现在的英伟达首席科学家,
本次开会邀请的Lecun Yann大佬也在怒怼了一波,(也是个神奇的英语单词,字典上的翻译是具有异国情调的。)
他自狠来他自恶,我自通用冲销量
相比于漫天遍地的专用AI设计,仍然有不少灵活性强的通用AI设计,虽然也是为了特定场景定制,但是其专用性仍然仅仅限制到了某个程度。而此类设计,多来自于真正要卖钱的大公司,比如如下这款Intel的面向机器人的专用处理器芯片。
与上述的CNN-SLAM类似,该芯片也专注于机器人的导航,然后其目标更加明确,要完整覆盖整个SLAM算法和运动,从里程计,到多传感器融合的扩展卡尔曼滤波器,到路径规划等等一系列计算:
然而纵观其系统架构,除了路径规划Path 和运动控制外,其他的SLAM都是基于的DSP实现,神经网络加速器也是标准的CNN架构,不做过多优化。
类似的策略也出现在的车规级自动驾驶芯片中,整个芯片可以说是中规中矩,即使新设计的DNN加速器,也涵盖了可能的各种DNN操作,比如已经很久没看到的Sum/层:
另外,在灵活的电路层面上,密歇根大学的论文14.2提出了一种存内计算的电路结构,通过bit 的串型微指令操作,可以实现任意精度的整点和浮点MAC等一系列的ALU计算。其在每个存储器entry的行中设计了一个串行的计算逻辑小单元,计算其中A和B的常见逻辑结果。通过每个bit的操作,实现对应的乘法、加法或其他运算。
该设计中,传统的指令集并不作用于每个数据,而且单独地作用在每个bit上,bit和bit之间相互作用由微指令。通过微指令间不同的整合方式,实现不同位宽的操作。下表体现了该设计在不同精度情况下的算力:
但是,可以从测试结果看出,支持不同精度的灵活性会导致其计算性能的下降。该设计用28nm,但是8位乘法的能效值仅有0./W,甚至低于一般的综合结果。当然,这个损失是可以理解的。(相比于其他电路上的革新,未来几年,个人认为bit 是会优先被大公司采纳的DNN计算电路新技术,因为这可能是目前唯一个灵活支持不同精度计算的硬件方法。只有bit 的硬件,才会使这两年来漫天发展的低精度DNN算法真正硬件落地。第一篇和DNN搭上关系的bit seria硬件计算l是ISSCC 2018的UNPU。)
更专用,还是更灵活
纵观ISSCC 2019的AI处理器paper,简而言之,就是追求极端性能的都是都是专用设计,无论从体系结构还是从电路上,针对专用场景的优化总是能带来性能上的提升。ISSCC这种唯性能论的会议,对学校来说做专用总是更有希望一点。
然而能落地的最终还是更通用的方案,从到今天,data flow已经成为AI处理器的标准技能,然而大量商用的设计仍然只考虑矩阵运算加速就可见一斑。一颗能赚钱的芯片可是要出货千万的,即使以性能为代价,高灵活度仍然是芯片定义的第一原则。
向左走,还是向右走,To be or not to be,总是一个问题。
矽说旨在为大家提供半导体行业深度解读和各种福利