网上对AI芯片的剖析实在太少,这里对一些论文和大佬的研究做一个总结,希望对读者有所帮助。

AI 芯片的诞生

讲到半导体,不得不从摩尔定律说起。从Intel创始人戈登·摩尔提出摩尔定律到现在已经53年了。过去的53年中,半导体行业一直受着摩尔定律的指导。芯片越做越小,单位面积的晶体管越来越多,功耗越来越低,价格越来越便宜,也使得这个行业过去五十多年来一直保持不错的增长趋势。

但是半导体行业风险高、投资大、回报相对来说又比较低的特点使风投对半导体行业的投资在过去十来年一直不温不火,甚至是持续下降的趋势。尤其是现在到了后智能手机时代或者说后摩尔时代,半导体急需新的技术或者新的应用场景来推动其发展。那么新的技术和新的应用场景是什么呢?

其实戈登·摩尔在五十三年前已经说了“集成电路会带来家用电脑或者至少是和中央电脑所连接的终端设备、自动驾驶、个人便携通讯设备等”。没错,智能手机后下一个推动集成电路发展的新的应用场景是自动驾驶和物联网。

除了新的应用场景外,新的技术革命也必须为半导体发展提供动力,新的技术革命是什么呢,没错,就是人工智能。人工智能的出现可以说让所有行业眼前一亮,刚刚提到的无人驾驶,物联网等等背后也都是因为 AI 的出现才带来这样巨大的,有前景的应用。也就是说 AI 技术的变革才是集成电路新应用场景落地的本质所在。

我们知道上游芯片公司的发展一向是稳中缓进,为什么说 AI 的发展会使芯片再次火热起来?

我们可以把冯诺依曼架构的五大组成部分分为三类,输入输出归类于交互,控制和逻辑归类于计算,存储单独列为一类,也就是交互、计算和存储三部分。而传统的计算力无法满足深度学习大量数据的运算,深度学习对这三方面都提出了非常多的创新要求,故新的计算架构需要为 AI 算法提供支撑。

ai模型的系统架构 ai模块工作原理_Memory

下面我们从以上三点阐述下目前比较主流的深度学习在芯片层面实现加速的方法。

AI 芯片的加速原理

  • 乘加运算硬件加速,脉冲阵列

脉动阵列并不是一个新鲜的词汇,在计算机体系架构里面已经存在很长时间。大家可以回忆下冯诺依曼架构,很多时候数据一定是存储在memory里面的,当要运算的时候需要从memory里面传输到Buffer或者Cache里面去。当我们使用computing的功能来运算的时候,往往computing消耗的时间并不是瓶颈,更多的瓶颈在于memory的存和取。所以脉动阵列的逻辑也很简单,既然memory读取一次需要消耗更多的时间,脉动阵列尽力在一次memory读取的过程中可以运行更多的计算,来平衡存储和计算之间的时间消耗。

下面说下脉冲阵列的基本原理:

首先,图中上半部分是传统的计算系统的模型。一个处理单元(PE)从存储器(memory)读取数据,进行处理,然后再写回到存储器。这个系统的最大问题是:数据存取的速度往往大大低于数据处理的速度。因此,整个系统的处理能力(MOPS,每秒完成的操作)很大程度受限于访存的能力。这个问题也是多年来计算机体系结构研究的重要课题之一,可以说是推动处理器和存储器设计的一大动力。而脉动架构用了一个很简单的方法:让数据尽量在处理单元中多流动一会儿

正如上图的下半部分所描述的,第一个数据首先进入第一个PE,经过处理以后被传递到下一个PE,同时第二个数据进入第一个PE。以此类推,当第一个数据到达最后一个PE,它已经被处理了多次。所以,脉动架构实际上是多次重用了输入数据。因此,它可以在消耗较小的memory带宽的情况下实现较高的运算吞吐率

上面这张图非常直观的从一维数据流展示了脉动阵列的简单逻辑。当然,对于CNN等神经网络来说,很多时候是二维的矩阵。所以,脉动阵列从一维到二维也能够非常契合CNN的矩阵乘加的架构。

  • 优化 Memory 读取

ai模型的系统架构 ai模块工作原理_Memory_02

还可以从体系架构上对整个的Memory读取来做进一步的优化。这里摘取的是寒武纪展示的一些科研成果。其实比较主流的方式就是尽量做Data Reuse,减少片上Memory和片外Memory的信息读取次数,增加片上memory,因为片上数据读取会更快一点,这种方式也能够尽量降低Memory读取所消耗的时间,从而达到运算的加速。

  • 剪枝 Pruning

ai模型的系统架构 ai模块工作原理_Memory_03

对于神经网络来说,其实很多的连接并不是一定要存在的,也就是说我去掉一些连接,可能压缩后的网络精度相比压缩之前并没有太大的变化。基于这样的理念,很多剪枝的方案也被提了出来,也确实从压缩的角度带来了很大效果提升。

 

需要特别提出的是,大家从图中可以看到,深度学习神经网络包括卷积层和全连接层两大块,剪枝对全连接层的压缩效率是最大的。下面柱状图的蓝色部分就是压缩之后的系数占比,从中可以看到剪枝对全连接层的压缩是最大的,而对卷积层的压缩效果相比全连接层则差了很多。

 

所以这也是为什么,在语音的加速上很容易用到剪枝的一些方案,但是在机器视觉等需要大量卷积层的应用中剪枝效果并不理想。

  • 权重系数压缩

ai模型的系统架构 ai模块工作原理_ai模型的系统架构_04

对于整个Deep Learning网络来说,每个权重系数是不是一定要浮点的,定点是否就能满足?定点是不是一定要32位的?很多人提出8位甚至1位的定点系数也能达到很不错的效果,这样的话从系数压缩来看就会有非常大的效果。从下面三张人脸识别的红点和绿点的对比,就可以看到其实8位定点系数在很多情况下已经非常适用了,和32位定点系数相比并没有太大的变化。所以,从这个角度来说,权重系数的压缩也会带来网络模型的压缩,从而带来计算的加速。

当然,一个不能回避的问题是计算和存储之间的存储墙到现在为止依然存在,仍然有大量的时间消耗在和存储相关的操作上。

一个很简单直观的技术解决方式,就是堆叠更多更快速更高效的存储,HBM孕育而生,也即在运算芯片的周围堆叠出大量的3D Memory,通过通孔来连接,不需要与片外的接口进行交互,从而大大降低存储墙的限制。

更有甚者提出说,存储一定要和计算分离吗,存储和运算是不是可以融合在一起,PIM(Processing in Memory)的概念应运而生。

  • 新接口

ai模型的系统架构 ai模块工作原理_Memory_05

除了前面说到存储内置,以及存储与运算的融合,有没有一个更快的接口能够加速和片外Memory的交互也是一个很好的方向。其实上面这个概念是NVIDIA提出来的interface(接口),叫做NVLink。下面的表展示的是NVLink和PCIe Gen3的对比。大家平时看到跟存储相关的的PCIe卡可能是PCIe Gen3 by  4,只有4个lanes和Memory对接,但是NVLink与有16个PCIe的lanes的PCIe Gen3对比,速度也有很大的提升,可以看到NVLink在速度层面是一个非常好的interface。

上面讲了一些比较经典的加速方法。下面分享几个已经存在的AI加速芯片的例子,相信这样会更加直观。

AI 芯片实例

  • TPU

ai模型的系统架构 ai模块工作原理_数据_06

这是Google的TPU。从上边的芯片框图可以看到,有一个64K的乘加MAC阵列对乘加运算进行加速。从论文中可以看到里面已经用到了脉动阵列的架构方法来对运算进行加速,另外也有我们前面提到的大量的片上Memory 这样的路径。上面蓝色框图中大家可以看到有一个24MiB的片上Memory,而且有两个高速DDR3接口能够与片外的DDR做交互。

  • TPUv2

ai模型的系统架构 ai模块工作原理_Memory_07

上图展示的第二代TPU。从图中可以很直观的看到,它用到了我们前面所说到的HBM Memory。从其论文披露的信息也可以看到,二代TPU在第一代的基础上增加了我们前面说到的剪枝,权重压缩等方面做了很多尝试,也是一个非常经典的云端AI加速芯片的例子。

接下来跟大家分享几个终端做Inference的例子。

  • Rokid 

ai模型的系统架构 ai模块工作原理_ai模型的系统架构_08

这一个是Rokid和杭州国芯共同打造的一颗针对智能音箱的SoC,AI加速只是里面的一个功能。通过上面右边的框图可以看到里面集成了Cadence的DSP,还有自己设计的语音加速硬件IP——NPU。这款芯片还集成了一些实现智能音箱必要的interface,最值得一提的是在SiP层面封装了Embedded DRAM,可以更好的在系统层面实现数据的交互,实现存储和运算的加速,也实现了AI加速的功能。

  • HiSilicon Hi3559A

ai模型的系统架构 ai模块工作原理_ai模型的系统架构_09

这是一款华为海思最新的IP  Camera芯片——3559A,从集成度以及整个设计的均衡性来说,都令人眼前一亮。可以看下右上角几个蓝色的标准模块,里面集成的是海思自主研发的做推理的IP——NNIE,同时还集成了Tensilica  DSP,在灵活性和扩展度上做了一个非常好的补充。