# AI accelerator history
## 1 引言
### 1.1 神经网络简介
神经网路是现代机器学习中常常应用的模型,由于其对生物大脑结构的模仿,也常常被称为人工智能模型。以最简单的全连接前馈神经网络(也称为多层感知机)为例,它的每一层都是一个高维的向量,前一层向量通过仿射变化后再进行一个非线性变换得到下一层的结果,输入经过若干次这样的仿射-非线性变换之后得到最终的输出结果。在研究中常常将一层或多层的输出结果称为输入的特征(feature)或者编码(encode),取决于应用场景。这样的网络也常称为编码器/解码器(encoder/decoder)。神经网络输出的特征或编码可以直接作为任务的结果输出也可以作为后续任务的输入。以一个自然语言理解中命名实体识别的任务为例
图中自上而下分别是嵌入层、卷积层、GRU层、注意力层和条件随机场层,每一层都已前一层的输出为输入并输出特征到下一层,输入数据中应该被任务关注的特征在层层处理中提取出来,而与任务目标无关的数据特征则被省略。
![img](http://cdn.lcx-blog.top/img/clip_image002.png)
随着数据规模的增大、模型结构复杂度的上升,神经网络的训练和推理对计算提出了越来越高的要求。大规模数据的重复处理并不是CPU擅长的,在这个过程中,图形计算单元(Graphics Processing Unit)进入了人们的视野,凭借其出色的并行数据处理能力,GPU广泛地应用在了神经网络的加速应用中,与之相关的软件生态也欣欣向荣。
但是GPU毕竟不是专门为了神经网络加速开发的,所以若需要更进一步,需要针对神经网络的运算需求开发专门的硬件架构并,由此人们提出了基于忆阻器的架构、基于FPGA的神经网络加速器等架构
### 1.2 神经网络的计算特征
了解神经网络模型的计算特征对于神经网络的加速具有十分重要的指导性意义。作为一种广泛应用的机器学习模型,神经网络主要工作在监督学习(supervised learning)模式下,即训练过程中每个输入对应的正确输出已知,神经网络根据正确的输出校准自己的参数。
神经网络的主要有两种工作模式,一种是推理(inference)、另一种是训练(training)。推理即神经网络根据输入的数据进行计算得到最终的输出数据,训练即根据当前输入、推理的输出以及正确的输出,根据某种算法校准参数使得推理的输出接近正确的输出。常见的训练方式为梯度下降法。
不妨将神经网络的每一层看作一个函数,这个函数从前一层获取输入,产生输出到到下一层,通常来说这个函数表现为前文所述的仿射-非线性变换的形式。可以令第*L*层对应的层函数*f*(*L*)为
![image-20220727001959867](http://cdn.lcx-blog.top/img/image-20220727001959867.png)
那么整个神经网络就可以形式化为层函数的复合
![image-20220727002017440](http://cdn.lcx-blog.top/img/image-20220727002017440.png)
存在一些特殊架构的神经网络,如卷积神经网络和循环神经网络等架构,它们的层函数不能够被形式化为如和所示的形式,但是仍然可以通过数学变换的方式将其变换为矩阵相乘和函数有限复合的形式。
为了加速神经网络的运算速度,重点在于解决层函数的运算缓慢的过程。不难发现,由于计算当前层的数据依赖于上一层的数据,所以层与层之间的计算是必须串行的,而计算同一层之间不同单元的数据的过程是可以并行的,这为我们提升神经网络的推理和训练速度提供了指引。。
### 1.3 AI加速器概念
AI 加速器是一类专门的硬件加速器或计算机系统,旨在加速人工智能应用,包括云端的训练过程和边缘的推理过程。它们通常是多核设计,通常专注于低精度算术、新颖的数据流架构或内存计算能力。此类别中的设备存在许多特定于供应商的术语(包括但不限于APU(AMD),BPU(Horizon Robotics),HPU(Microsoft),VPU(Movidius),TPU(Google),NPU&DPU&IPU(通用名词))。总的来说是一种没有主导设计的新兴技术。
## 2 硬件方面
| **体系结构** | **吞吐量** | **延迟** | **功耗** | **灵活性** |
| ------------------ | ---------- | -------- | -------- | ---------- |
| CPU | ~1T | N/A | ~100W | 很高 |
| GPU | ~10T | ~1 ms | ~300W | 高 |
| FPGA (Stratix V) | ~1T | ~1 us | ~30W | 高 |
| FPGA (Stratix 10) | ~10T | ~1 us | ~30W | 高 |
| ASIC | ~10T | ~1us | ~30W | 低 |
### 2.1 CPU
在串行CPU中进行神经网络的推理和训练无疑是非常缓慢的,得益于异构计算技术,即在单个系统甚至单个芯片中集成多个专用处理器,每个处理器都针对特定类型的任务进行优化,CPU在具有中小型并行度的 DNN、稀疏 DNN 和小批量场景也有一定的应用,但总的来说并不是很好的解决方案。
### 2.2 GPU
Nvidia定义了GPU这个概念,作为用于处理图像和计算局部图像属性的专用硬件,GPU需要处理大量涉及矩阵运算的并行任务,这与神经网络的数学基础是相似的,因此近年来GPU被大量的应用于机器学习领域。Nvidia推出了CUDA工具包,为创建高性能 GPU 加速应用程序提供了一个开发环境,同时提供了cuDNN原语库,为标准例程(例如前向和后向卷积、池化、归一化和激活层)提供高度优化的实现同时,支持tensorflow pytorch caffee等大多数深度学习框架,使开发者能够专注于训练神经网络和开发软件应用程序,而不是花时间在低级 GPU 性能调优上,因此在学术界Nvidia占据了主流地位。
### 2.3 ASIC
在工业界的具体应用落地上,通常会对特定的任务进行高度定制化的设计,通过专用集成电路(Application-specific integrated circuit)进行更具体的设计,加速器一般采用减少内存调用(存算一体)和使用较低精度的算法(如使用半精度浮点数)来减少计算延迟,增加计算吞吐量。ASIC作为完全定制化硬件,针对特定的任务,具有较强的专业性,导致体积小、重量轻、功耗低、性能最好,但其可扩展性并不理想,设计和制造周期长。谷歌、高通、亚马逊、苹果、Facebook、AMD 和三星等公司都在设计自己的AI ASIC。
举一些具体的例子。Google的张量处理器(tensor processing unit,TPU)。核心是一个6553个68位的MAC矩阵乘法单元和一个大容量的片上存储单元。组成结构如图2所示。TPU在性能、性价比和能量比等方面都优于CPU和GPU。
![image-20220727001046163](http://cdn.lcx-blog.top/img/image-20220727001046163.png)
寒武纪加速器。2013年,由来自中国科学院计算技术研究所的Chen等人设计了世界上第一个基于asic的深度学习处理器架构DianNao,以加速大规模的深度神经网络和卷积神经网络。该设计可以每1.02ns并行处理496个16位固定点操作。该体系结构主要面向用户终端,用于加速前馈过程,但不加速反馈过程,不能用于网络训练加速,这也是该体系结构的局限性。此后他们还设计了DaDianNao、PuDianNao、ShiDianNao,在性能和功耗上皆有所改善。
下表总结了寒武纪处理器系列和其对应的特性。
| **Name** | **Characteristic** |
| ---------- | ---------------------------------- |
| DianNao | 单核;世界上第一个深度学习处理器。 |
| DaDianNao | 多核;28纳米技术 |
| PuDianNao | 多核;65nm技术 |
| ShiDianNao | 多核;用于实时目标检测 |
### 2.4 FPGA
![img](https://pic2.zhimg.com/80/v2-1ffb204e56f3d02b0cabdcd6f6c3fb34_1440w.jpg?source=1940ef5c)
深度学习框架仍在不断发展,因此很难设计定制硬件。现场可编程门阵列(FPGA)常年来被用作专用芯片(ASIC)的小批量替代品,近年来在微软、百度等公司的数据中心大规模部署,以同时提供强大的计算能力和足够的灵活性。
FPGA主要由可编程的逻辑块组成,每个块都包含执行计算的逻辑门。这些块相互连接,可以通过I/O块发送信号,来改变每个块的逻辑功能。FPGA具有强大的并行处理功能、可重复配置性、更好的灵活性、较短的开发周期以及超低功耗。
FPGA可以进行实时流水线运算操作,增强了卷积神经网络处理的实时性。目前已有许多种用FPGA对CNN进行加速的方法,同时,FPGA的计算性能正在寻求改进和提高。由Cao[10]等人提出的利用FPGA内部DSP资源,通过DSP级联,多通道并行、特征图及卷积核数据的复用等方法,设计了一种基于FPGA的高性能卷积神经网络加速器,其适用于多种网络模型。
其硬件系统设计的结构图如图所示。主要原理为:CPU将CNN的网络信息经由PCIe总线接口发送给FPGA,将其存储到外部存储器DDR中,完成初始化任务。再将待处理的输入图像不断发送给FPGA,并存储到DDR中,启动FPGA内部的CNN加速核(对输入图像的多次卷积运算由CNN加速核完成,再将得到的输出特征值存储到DDR中)。CPU通过查询FPGA的内部状态,通过PCIe总线接口读取运算完成的输出特征值。最后CPU执行Softmax等后处理函数,得到最终的图像处理结果。
![img](http://cdn.lcx-blog.top/img/clip_image002.jpg)
FPGA的可编程特性使其能够灵活地适应不同的DNN模型。而GPU采用固定类型的数据类型,具有永久性,因此与不断变化的DNN模型不兼容。
### 2.5 类脑计算(忆阻器)
近年来不断有研究学者将目光投向类脑计算领域,因为计算与存储分离的“冯·诺依曼”体系在功耗和速率方面已经不能满足人工智能、物联网等新技术的发展需求,存算一体化的类脑计算方案有望解决这一问题,迅速成为研究热点。
## 3 结语
在工业领域,使用ASIC作为协处理器仍是实现神经网络加速的主要方式。华为昇腾,寒武纪,比特大陆,地平线,越来越多的中国企业正在加入ASIC这条赛道,在部分中低端芯片完成了国有化代替。
同时我们也要关注FPGA的巨大潜力,如今FPGA市场规模已达到百亿美元规模,Xilinx和Altera(已被Intel于2015年收购)在此领域耕耘多年,建立了深厚的专利壁垒,二者占据了85%以上的市场份额,中国本土FPGA企业与之仍存在技术代差。这就导致了在中国本土成长起来的FPGA AI领域的独角兽企业——深鉴科技,技术基于Xilinx的FPGA器件,最终选择投入Xilinx的怀抱,于2018年被Xilinx收购。
在笔者写这段文字时,正值2022年5月6日,美国于前一天宣布对中国智能安防领域的龙头企业海康威视进行严厉制裁,于是两天时间股市连续跌停,股价下跌达10%,市值蒸发超400亿。在安防产业的智能芯片领域中,海康虽与华为海思深度合作,但在高端产品上也不得不与英伟达、英特尔等芯片商保持紧密联系。自2019年登上美国实体清单以来,海康一直保持元件高库存并积极参与芯片自研,对这次的冲击有了一定的准备,但可以预见在一段时间内仍会被挤占相当一部分国外市场份额。
由此可见,技术竞争力才是核心竞争力,技术话语权决定商业话语权。在神经网络加速器这一新兴领域中,各方势力纷纷下场角逐,都希望自己的技术和标准能够成为主流。新的架构不断提出,新的记录不断涌现,摩尔定律已显颓态,但所谓”more than Moore”正在进入人们的视野。
## 4 参考
本文由李辰旭、任凯文、袁梓乔、于浩然共同完成,由计算机体系结构课程报告节选而来
> [1] ZHU Y, WANG G. CAN-NER: Convolutional Attention Network for Chinese Named Entity Recognition[C/OL]//Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers). Minneapolis, Minnesota: Association for Computational Linguistics, 2019: 3384-3393[2022-04-22]. https://aclanthology.org/N19-1342.
>
> [2] CHEN Y, XIE Y, SONG L, 等. A Survey of Accelerator Architectures for Deep Neural Networks[J/OL]. Engineering, 2020, 6(3): 264-274. https://doi.org/10.1016/j.eng.2020.01.007.
>
> [3] STRUKOV D B, SNIDER G S, STEWART D R, 等. The missing memristor found[J/OL]. Nature, 2008, 453(7191): 80-83. https://doi.org/10.1038/nature06932.
>
> [4] REUTHER A, MICHALEAS P, JONES M, 等. Survey and Benchmarking of Machine Learning Accelerators[C/OL]//2019 IEEE High Performance Extreme Computing Conference (HPEC). Waltham, MA, USA: IEEE, 2019: 1-9[2022-04-30]. https://ieeexplore.ieee.org/document/8916327/.
>
> [5] SHAFIEE A, NAG A, MURALIMANOHAR N, 等. ISAAC: A Convolutional Neural Network Accelerator with In-Situ Analog Arithmetic in Crossbars[C/OL]//2016 ACM/IEEE 43rd Annual International Symposium on Computer Architecture (ISCA). Seoul, South Korea: IEEE, 2016: 14-26[2022-05-02]. http://ieeexplore.ieee.org/document/7551379/.s
>
> [6] SONG L, QIAN X, LI H, 等. PipeLayer: A Pipelined ReRAM-Based Accelerator for Deep Learning[C/OL]//2017 IEEE International Symposium on High Performance Computer Architecture (HPCA). Austin, TX: IEEE, 2017: 541-552[2022-05-02]. http://ieeexplore.ieee.org/document/7920854/.
>
> [7] MITTAL S. A Survey of ReRAM-Based Architectures for Processing-In-Memory and Neural Networks[J/OL]. Machine Learning and Knowledge Extraction, 2018, 1(1): 75-114. https://doi.org/10.3390/make1010005.
>
> [8] 曹学成,廖湘萍,李盈盈,丁永林,李炜.一种基于FPGA的高性能卷积神经网络加速器的设计与实现[J].智能物联技术,2021,4(05):11-1.
AI芯片浅析