论文部分内容阅读
最近几年,神经网络的应用越来越广泛,在图像、语音、机器翻译等领域都取得了卓越的成绩。为了提升神经网络的效果,神经网络的规模逐年递增,结构日益复杂。这导致神经网络的计算量和访存量急剧增加。为了应对上述挑战,学术界提出了神经网络稀疏化的方法。稀疏后的全连接神经网络权值可以减少10倍。然而现有的通用计算平台CPU、GPU不能很好利用神经网络的稀疏性,过去的神经网络加速器(如DianNao等)甚至不支持稀疏神经网络。 本文从微结构、算法映射和功能验证等方面对稀疏神经网络加速器进行了较为系统的研究,主要取得了以下创新:在微结构方面,我们设计了一种新的稀疏神经网络加速器微结构:Cambricon-Ⅹ。Cambricon-Ⅹ能够充分利用稀疏神经网络的特性,大幅减少神经网络的计算量和访存量。Cambricon-Ⅹ的核心是其索引模块。它能根据连接关系处理输入神经元,并将处理后的数据通过胖树发送给不同的计算单元。不同的计算单元存储了不同的权值,计算不同的输出神经元。在索引模块中,我们提出了两种连接关系的表示方法:直接索引和步长索引的方法。经过比较,步长索引比直接索引的代价更小,我们最终采用了步长索引的方法。在65nm的工艺下,Cambricon-Ⅹ能够达到544GOP/s的性能,面积和功耗只有6.38mm2和954mW。实验结果表明,在一些稀疏神经网络的测试中,我们的加速器能够比DianNao神经网络加速器快7.23倍,同时能耗降低6.43倍。 在算法映射方面,我们提出了各种常见神经网络算法在加速器上的映射方法。在神经网络中,不同的神经网络层具有不同的运算和访存特点。卷积层的计算量很大,卷积层的计算量超过了整个卷积神经网络80%以上的计算量,由于共享权值的特点,卷积层的权值数量很少。全连接层与卷积层恰恰相反,全连接层的计算量很小,权值的数量却很多。池化层和各种归一化层都没有权值,计算量都不大。在将不同的神经网络层映射到加速器时,需要考虑每种层的计算和访存特点。对于卷积层,我们采用复用权值的方法,每个权值只会从内存中读一次,直到所有和这个权值的相关的输出都使用过这个权值之后,这个权值才会被丢弃掉;对于全连接层和其他层,我们采用复用输入或者输出神经元的方法,尽量减少神经元在内存中的读写次数。采用我们的算法映射方法,最大化减少了访存量,加速器在很多层上运算效率在90%以上。 在验证方面,我们提出了一套针对神经网络加速器的验证方法以及一个通用的参考模型。首先,验证采用层次化方法,不同阶段的验证侧重点不同。在模块级验证阶段,采用白盒验证手段,重点验证模块的功能以及内部信号的状态。在子系统级验证阶段,我们将加速器分为IO子系统和运算子系统,不同的子系统分别验证不同的子功能。在系统级验证阶段,我们搭建了两个不同的验证环境。一个是在线比较的验证环境,主要为了验证加速器在随机指令序列激励下的功能;另一个是离线比较的验证环境,主要为了验证加速器在神经网络配置激励下的运算功能。为此,我们开发了一个基于C++的通用参考模型。该参考模型与加速器结构无关,能够支持各种低精度的神经网络运算,并且支持各种常见的神经网络类型。对于不同的加速器结构,参考模型只需要简单的修改层内的计算顺序即可使用。另外,该参考模型支持多线程,因此运算速度相比RTL的仿真速度提高了很多。在验证的不同阶段,我们使用不同的衡量参数来保证验证工作的充分性。 上述工作已部分应用于国际上首个稀疏神经网络处理器芯片上,确保了该芯片的实用性和正确性。