晶羽科技-解读点评影视小说作品

微信
手机版

寒武纪大致剧情,寒武纪 zoran

2023-12-15 04:40 作者:岑岑 围观:

DaDianNao

寒武纪的DaDianNao的诞生稍晚于DianNao,同样也是在2014年。

如果把DianNao看作是嵌入式终端使用的处理器,那么DaDianNao就是服务器上用的大规模高性能处理器。

DaDianNao其实就是采用的DianNao的NFU作为内核,然后在一块芯片上同时放置了16个NFU,于是乎,性能也就是DianNao的16倍。

文章说,在DaDianNao的设计过程中,首先想到的是,直接将DianNao中NFU的逻辑资源扩大成原来的16倍即可简单实现性能16倍的提升。但是这里就要考虑芯片上实际的晶体管布局及布线。发现,如果单纯扩大NFU规模,那么最终布线所占用的芯片面积远远超过NFU逻辑模块,貌似并不高效,如下图中的Figure4所示。

于是乎,就想到了多核并行的架构。

将上面的大NFU拆分成16个小NFU(DianNao),通过合理布局布线,能够大幅缩小布线需要的面积,最终面积的减小28.5%,而性能与上面的设计相同。

芯片上,那可真的是寸土寸金。

没说的,选第二种,也就是下图中的Figure5。

到目前为止(2018年),国内的人工智能公司,大部分还是局限在算法领域,并不关注底层硬件。少数几个大体量的AI独角兽,如寒武纪/商汤/深鉴/地平线/比特大陆等公司,都对芯片有不同程度的涉足。这其中,大部分公司的芯片都只是涉及到终端的推断(inference),而没有涉足训练(training),所以芯片设计比较简单。

相反,国外的科技巨头,比如谷歌/intel/NviDia/facebook等,都有涉足training的深度学习处理器的研发。

寒武纪是少数已经涉足training的中国企业。

DaDianNao就是可以用于服务器上进行大规模training的专用芯片。

PuDianNao

之前介绍了寒武纪的DianNao和DaDianNao,其实内部处理逻辑可以说是一样的。

这种架构,只能适用特定的算法类型,比如深度学习(CNN,DNN,RNN)等。

但是,深度学习只是机器学习中的某一类,整个机器学习,有很多其他种类的算法,和深度学习的不太一样,甚至经常用到除法等计算类型。这些算法,目前的应用范围也很广。

为了加快常用机器学习算法的运算,寒武纪又设计出专门针对这些算法的处理器方案:PuDianNao.

PuDianNao,内部实现了7种常用的机器学习算法:k-means, k-nearest neighbors , naive bayes , support vector machine , linear regression , and DNN.

PuDianNao的结构如下图所示。

可以看出整体结构和DianNao比较像。

三个buffer存储数据,一个存储输出,2个存储输入。

核心是中间的运算逻辑。

PuDianNao的运算逻辑,可以看成由许多组相同的FU(Function Unit)并联组成。每个FU中包含一个MLU和一个ALU。

MLU结构如下图所示。

MLU

可以看出,MLU(Machine Learning Unit)的整体结构与DianNao的NFU比较像。

与NFU相比,PuDianNao在NFU-1的前面增加了2层逻辑Counter和Adder。

Counter用于累加,结果直接输出。Counter用于naive bayes 和 classification tree需要的。

Adder 用于大部分的机器学习算法,计算结果要么直接输出,要么作为下一级的输入。

Multiplier相当于DianNao的NFU-1.这里就不再赘述。

Adder tree相当于DianNao的NFU-2。

Acc,用于当计算的size大于硬件资源,比如需要累加30个输入,但是一次只能累加16个,所以需要连续累加2次,那么第一次的前16个的累加结果就暂时存在Acc中,等后面14个累加结果到了,再累加起来,形成30个输入的累加结果,直接输出或作为下一级的输入。这里与DianNao是有区别的。DianNao对这个问题的处理,选择将前16个输入的中间累加结果暂时存入NBout中,与剩下的14个输入一同完成累加,形成最终结果。二种方案的具体优劣,无从评判,但是个人感觉,PuDianNao增加了一级Acc,仅以很少的资源,比如一个累加器,几个控制信号,就能实现大size的计算,而DianNao的方案则需要将结果写入NBout,读写存储是很消耗功耗的,并且需要的布线资源也不少,信号传输需要时间,可能综合来看,个人觉得还是PuDianNao的方案更加高效。当然,这个判断并没有经过实际仿真验证,仅仅是一点直觉。当不得准。

Misc,相当于DianNao的NFU-3。

可以看出,MLU中的逻辑,只能执行乘法/加法/激活等操作,但是某些机器学习算法需要用到除法等不常用的计算类型。于是,必须增加对这些计算类型的支持。

ALU

PuDianNao选择在MLU之外,额外增加一个ALU(Arithmetic Logic Unit).

ALU中包含一个加法器,一个乘法器,一个除法器,一个converter。

增加ALU也很合理,毕竟有些机器学习算法,需要特殊的计算,不得不准备专门的逻辑资源,以保证算法功能得到正确执行。

ShiDianNao

ShiDianNao的出现是寒武纪在深度学习处理器上细分领域的更加深入。

前面介绍的DianNao针对的是大部分的深度学习神经网络算法,包括CNN和RNN等。

目前比较火而且应用面非常广的领域是计算机视觉,若在这个领域的算法精度实现巨大突破,那么,就将开启广阔的应用领域,能够真正明显地改变世界。比如自动驾驶/安防等等,利润丰厚的领域。

图像识别,这类算法主要采用CNN结构。

于是乎,开发专门针对CNN的ASIC就变得可行且有商业价值。

寒武纪为何在已经有了DianNao的基础上,还要设计ShiDianNao?

先来分析下,目前DianNao存在的缺陷。

众所周知,深度学习类的算法都是计算密集型和存储密集型。

这就造成了不低的功耗。

当这类芯片应用到终端嵌入式设备上有许多限制,比如智能手机,对芯片功耗有着严苛的要求。

因为DianNao中的数据会存储在DRAM中,而DRAM的读写会消耗非常大的功耗。

如果能够避免用DRAM存储数据,那么就能很大程度上降低功耗。

是的,就是基于这个想法,ShiDianNao诞生了。

ShiDianNao的想法就是,在实际应用时,将用于图像识别的人工智能处理器在物理位置上比较靠近图像来源(CMOS/CCD传感器),这样就避免了图像数据需要DRAM的存储。

另外,对于CNN算法,其中常用的一类CNN是共享权值的,这样权值的数量就不大,可以完整存放在片上SRAM中,从而使得权值也能避免存储在DRAM中。

这样处理后,整个系统就不需要DRAM做存储,从而大幅降低功耗。

上图将Acc(人工智能处理器)放置在离传感器很近的位置,直接从传感器获取图像数据,避免了DRAM的使用。

ShiDianNao架构

ShiDianNao的架构如下图所示。

整个架构与DianNao一脉相承。三个buffer分别存储权值/输入数据/输出数据。

核心逻辑是右边的NFU,也就是PE阵列。PE(processing elements),是最小的处理单元。

NFU的内部结构如下图所示。

从上图可以看出,权重是同时广播到所有的PE,输出也是同时传递到output,而输入数据则配合每个PE内部的两个fifo,有不同的输入规律,有时一次给所有PE提供输入,有时又只给一列提供输入其余列靠相邻右边的fifo提供,有时又给一列提供输入其余列靠相邻下方的PE的fifo提供。

单个PE结构如下图所示。

ShiDianNao与TPU1对比

与TPU的脉动矩阵相对比,发现二者都共用了权重和输入数据。但是细细分析,还是觉得TPU的脉动矩阵更加优秀高效。

比如,二者都共用了权值,ShiDianNao是统一获取权值,然后同一周期广播到所有PE。受限于信号在导线中传递速度,信号完整性以及时序同步的问题,ShiDianNao的PE阵列无法做到比较大的规模,且规模越大,需要的传输布线长度约长,传输时间越久,因此频率也无法做到很高。而且,每个PE都是单独出结果,也就是说,在PE阵列中央的PE也要直接给输出传递数据,这就意味着需要不菲的布线资源。所以,ShiDianNao的缺点还是比较明显的。

再比如,二者都共用了输入数据。ShiDianNao是在PE内部有两个FIFO来存储多个输入数据。而且因为输入数据共享的方式有几种不同的情况,所以就造成了为了共享数据,不同时刻,数据的传递方向是不同的,比如,可能是按列,从右往左传递,也可能是按行,从下往上传递。而反观谷歌的TPU,采用了脉动阵列,于是,输入数据只需要从阵列的左侧进入,然后所有输入数据都从左往右依次传递,传递方式非常简单,也不需要在PE中内置FIFO。

几种不同的输入数据传递方式,见下图所示。

另外,脉动阵列只有最下面一行的PE会输出计算结果,只有最左边的一列会接受输入数据,整体来说,所需要的布线资源就少很多。另外,因为PE所需的输入数据/权重相关信息/中间计算结果,都来自邻近的PE,不需要很长的走线,且能够轻易做到相邻PE的距离相同,那么相邻PE之间的信号传递时间就完全一致,可以保持整个脉动阵列工作在非常高的频率。

总体来看,个人认为还是谷歌TPU的脉动阵列更加高效。

计算卷积

下面看看ShiDianNao是怎么计算的。

以卷积为例。

Figure13(a)显示了一个2X2的PE阵列。所以可以同时计算4个输出。所需输入数据如图右侧的4个不同颜色方框所示。中间则表示了从cycle0开始,每个cycle,给每个PE的输入数据。可以看出,其中有部分数据可以反复利用。于是,这就给增加FIFO来实现数据复用提供了可能。

Figure13(b)则配合图(a),给出了每个cycle,每个PE中的FIFO应该如何存储输入数据,以及输出数据复用。

这种方式有个缺点,一般而言,图像数据存储在RAM中,都是按照一张图的数据集中存储在一起,那么,取同一张图像上的某些像素点作为输入数据时,每个周期的像素地址并未对齐,无法在一个周期中获取该周期需要的所有有效数据,难以满足PE阵列的需求,会降低计算速度。

状态机

整个ShiDianNao的运行,会因为算法中的不同计算而有不同的控制方式,这就需要用到状态机,如下图所示。

引入状态机控制ShiDianNao工作,就可以采用指令集的方式,描述需要的操作,然后由状态机执行。

这一点,比较赞。

猜测寒武纪的一系列芯片应该都采用了这样的状态机进行控制。

Cambricon-X

Cambricon-X是针对稀疏系数的矩阵计算架构。

深鉴科技的韩松等人的研究发现,可以将传统的深度学习网络模型的许多权重系数去掉,甚至能去掉90%以上,而并不影响模型的计算精度。如下图所示。

目前的深度学习模型的权重系数太多,造成需要的乘法计算非常多,计算时间长,速度慢。

相信,未来的模型会更加复杂,需要的计算更多,时间更久。

未来把模型进行系数删减,就成了必然。

但是,删减了大量权值系数后,模型网络所需要的乘法计算次数明显变少,但是因为系数的稀疏带有不可控的随机性,不同filter的有效权重可能是不同位置的,所以,这就造成了大量权重并行计算时,无法做到同步,导致目前现有的处理器设计都并不能充分利用系数稀疏带来的加速效果。

Cambricon-X就是寒武纪在这个方面的一个探索。

Cambricon-X架构

下图为Cambricon-X的架构。

可以看出,整个架构还是和DianNao很像。

当然还是有不同的。

最大的不同是,为了利用到稀疏系数带来的加速效果,首先就需要将系数为0的权重所对应的输入数据去掉。这个,由Fig4中的Buffer Controller来实现。

Buffer Controller的具体结构见Fig5,主要由indexing实现数据的筛选。

Indexing从输入神经元数据(input neurons)中挑选出非0权重对应的输入数据,按顺序排列好,然后传输给对应的PE。然后,由PE去执行乘法/加法等操作。

PE结构如下图所示。

可以看到,PE中有个小SB,用于存放有效的权重。

权重的存储方式如下图所示。

假设每个地址。

相关文章