基于深度学习处理框架的神经网络压缩方法研究

2022-03-07 03:38齐勇军汤海林
江西科学 2022年1期
关键词:处理单元加速器神经元

齐勇军,汤海林

(广东白云学院大数据与计算机学院,510450,广州)

1 问题提出

随着人工智能的继续发展需要具有更强的系统观,具备更好的抽象能力将人工智能面临的复杂问题化繁为简,借鉴和使用计算机程序语言、网络和系统等多个领域中的经典方法,并以合理层级框架和有效工具的形式,充分提高人工智能研究和实践的效率和创新能力。人工智能系统涵盖了从专用硬件加速器到新的体系结构,再到语言、框架和编译,最后到分布式系统和网络资源分配、调度和执行管理等多个层次,关注包括可用性、可扩展性、异构性、大规模可伸展性、性能和能耗、可靠性、安全隐私等在内的多个维度。用于图像分类的VGG、GoogleNet、ResNet等神经网络算法接连在ImageNet挑战赛上大放异彩[1]。同时,用于目标检测的R-CNN、YOLOv3、Cascade R-CNN[2]等网络不断演化迭代,促进了现代计算机视觉应用飞速发展。从循环神经网络(RNN)被广泛应用于自然语言处理中,随后逐渐出现了长短期记忆网络(LSTM)、预训练语言模型(BERT)等优化方法,为自然语言理解等应用作出了突出贡献,共同将深度神经网络推向了繁荣发展的黄金时代。

深度神经网络持续增长的算力需求,对硬件处理的性能和能效提出了更高的要求。根据OpenAI发布的AI计算量报告,AI所需的计算量呈现出每年增长10倍的趋势[3]。与之相对应的是随着摩尔定律放缓而下降的处理器发展速度。据《计算机体系结构:量化研究方法》中的数据显示[4-5],当前传统处理器和工艺的算力每两年提升约1倍。因此,通用处理器的算力无法满足深度神经网络的计算需求已经成为公认的结论。根据OpenAI的估算,算力峰值为28 TFLOPS的NVIDIA V100大约需要355 a才能完成GPT-3的训练。为满足深度神经网络对算力持续增长的需求,主要从软件算法和硬件架构2个层面开展。在算法层面,稀疏化、量化和知识蒸馏是常见的神经网络压缩方法。其中,稀疏化方法利用稀疏编码等方式减少网络中节点和节点间连接的数量以提高计算效率,量化方法则通过将神经网络中的浮点运算转换为定点运算以实现硬件加速。文中主要面向这2种压缩方式介绍深度学习处理架构优化方法。知识蒸馏是非常有效的压缩算法,其核心思想是将复杂模型(teacher)中的暗知识(dark knowledge)蒸馏提取并迁移到简单模型(student)中,使后者在实现轻量级的同时保持精确的预测效果。随后通过不同类型的知识和蒸馏方法对知识蒸馏算法做出了拓展和优化,如Liu等人使用集成MT-DNN网络训练单个MT-DNN网络,Tang[6]等人使用BERT网络训练BILSTM网络,Yim[7]等人从ResNet32中蒸馏基于关系的知识训练ResNet14模型。在架构层面,针对深度神经网络的运算及访存特点,在指令集架构、存储层次和运算单元等方面出现了大量定制化架构的工作。在算法和架构优化方法不断涌现的基础上,通过大幅扩展优化空间,采用软硬件协同设计的方式已成为提升深度学习处理性能和能效的重要趋势。

本文将从算法和架构协同的角度,介绍如何为稀疏推理和量化训练等神经网络压缩方法提供相应的硬件架构支持,为构建高能效深度学习处理器提供范例。

2 稀疏推理架构支持

2.1 认识稀疏化方法

早期的稀疏化方法多用于神经网络训练过程[8],如Dropout、稀疏表示、稀疏代价函数等。稀疏化的核心思想是通过赋零值等方式减少神经网络中的参数量,同时保证网络精度,以减少深度学习中冗余矩阵乘法带来的时间和能量消耗。在2016年国际表征学习大会上,由Han[9]等人提出的深度压缩方法使用网络剪枝、共享权重和霍夫曼编码等技术对网络进行稀疏化,该方法可以在不损失精度的前提下,将神经网络的权值数量减少至原来的1/10。稀疏化也被广泛应用到优化神经网络的推理过程[10]。谷歌的研究人员发现,对一个固定容量的稠密网络进行30%的稀疏化,其性能会有适度提升,直到超过70%的稀疏度[11],其精度才会明显下降。基于此,谷歌联合Deep Mind开发了Tensor Flow Lite和XNNPACKML中的新功能和工具库[12],用户可以通过张量重排、量级剪枝等功能在模型大小、推理速度和预测质量之间进行调试,最终得到优化的稀疏化网络模型。

目前,通用的处理器架构在进行稀疏神经网络推理时仍无法使获得的收益最大化,针对稀疏神经网络的加速器微架构亟待优化。传统加速器只能处理规则的矩阵和向量运算[13],对于不规则连接的稀疏神经网络只能按照全连接的矩阵或向量的方式进行运算。虽然CPU和GPU都有其对应的稀疏矩阵运算加速库sparse BLAS和cuSPARSE,但在对AlexNet进行稀疏化后,其在GPU和CPU上的性能提升并不显著,表现差强人意。

因此,由于稀疏神经网络具有拓扑结构和计算不规则带来的缺陷,在其加速器设计中,面积低效、访存低效和并行低效成为目前公认的三大难题。

2.2 基于Cambricon-X:稀疏神经网络加速器架构

针对稀疏神经网络加速器面临的面积低效、访存低效和并行低效三大难题,Zhang等人提出了一种新的加速器Cambricon-X,它不仅可以有效地处理原始的稠密神经网络,还可以高效处理被大量剪枝的稀疏网络。

Cambricon-X加速器的体系结构如图1所示。它包括控制处理器、缓存区控制器、神经元缓存器(包括输入神经元缓存器NBin和输出神经元缓存器NBout)、直接内存存取模块和包含多个处理单元的计算单元。该架构最大的特点是它的多个处理单元和缓存区控制器可以在处理过程中充分利用神经网络模型的稀疏性和不规则性。具体而言,缓存区控制器中集成了一个有T个索引单元(Indexing Module,IM)的模块,每个索引单元对应一个Tn处理单元,基于控制处理器解码后的指令从神经元缓存区的NBin中选择所需的神经元,然后将神经元传输到所连接的处理单元中。在接收到神经元后,处理单元可以使用本地存储的压缩突触执行高效的计算。系统在处理单元中完成计算后,将收集结果以在专用功能单元上进行进一步处理,或直接写回输出模块NBout。此外,为了避免布线拥塞,所有处理单元都以胖树拓扑连接。值得注意的是,加速器在处理稠密的神经网络时可以绕过索引单元,以避免影响稠密神经网络的处理速度。由于突触的不规则分布,多个处理单元以异步方式工作来获得更高的效率。

图1 Cambricon-X 整体架构

研究人员用一些有代表性的稀疏网络对Cambricon-X加速器进行了评估。结果表明,与代表性的神经网络加速器DianNao相比,Cambricon-X加速器平均可实现7.23倍的速度提升和6.43倍的能效提升,其功耗仅为954 mW,面积开销为6.38 mm2。与采用稀疏库(即cuSPARSE)的GPU相比,该加速器平均可实现10.6倍的速度提升和29.43倍的能效提升。与采用稀疏库(即稀疏BLAS)的CPU相比,该加速器平均可达到144.41倍的加速。

2.3 基于Cambricon-S:面向稀疏不规整性的加速器架构

Cambricon-X可以高效处理稀疏神经网络,但由于稀疏所带来的网络不规整性,硬件无法完全利用稀疏性带来的好处。为此,提出了一种软硬件协同的方法来有效解决稀疏网络的不规整性。

2.3.1 在软件方面的架构 研究人员通过观察神经网络中的权值分布发现了其具有局部收敛性,即在训练过程中,绝对值偏大或者偏小的权值往往会聚集成簇。图2给出了全连接层到输出层的权重分布情况。基于此,提出了一种粗粒度修剪算法以减少稀疏突触的非规整性。具体方法是,将权值参数矩阵进行分块,且从网络拓扑中永久删除符合某些特定条件的权值块,同时在训练中迭代使用粗粒度修剪技术,可以在避免精度损失的同时大大降低数据量,实现更好的稀疏性。结果表明,该方法使稀疏网络的不规整性平均降低至原来的约1/20。若与局部量化一起,粗粒度修剪技术将显著降低索引的大小并提高网络压缩率。例如,在AlexNet上索引大小可缩减为原来的1/102,并得到79倍的网络压缩率,且精度几乎无损失。

图2 权重的局部收敛性

2.3.2 在硬件方面的架构 为了进一步提高加速器的结构性能,提出了一款针对粗粒度修剪技术的硬件加速器Cambricon-S,其架构如图3所示。

图3 Cambricon-S 整体架构

该加速器包含具有共享索引的神经元选择模块(加速器的关键组件)以处理静态稀疏性,以及具有多个处理单元的神经功能单元以并行计算不同的输出神经元。其中每个处理单元都包含一个本地突触选择器模块,以处理动态稀疏性。存储模块由神经元缓存区(包括输入神经元缓存器NBin和输出神经元缓存器NBout)和突触索引缓存区组成;控制模块由控制处理器和指令缓存区组成,其中控制处理器将来自指令缓存区的各种指令有效地解码为所有其他模块的详细控制信号。系统通过多个计算单元同时处理一个权值块相关的计算,共享输入数据和稀疏数据索引,可降低稀疏网络的非规整性,从而提高计算单元的利用率和处理效率。同时,通过使用面向粗粒度稀疏的压缩数据表示方法,可大大降低访存总数据量。与Cambricon-X相比,Cambricon-S加速器在性能和能效方面分别提高了1.71倍和1.37倍,频率为1 GHz时,其算力达到了512 GOP/s,且面积仅为6.73 mm2,功耗仅为798.55 mW。

3 量化训练架构支持

3.1 认识量化方法

量化方法的核心思想是用低开销的定点数代替高开销的浮点数(如float32),以减少训练和推理过程中冗余的时间和内存消耗。早期的量化尝试,例如麻省理工学院在模型压缩论文中的聚类量化和英特尔实验室在增量网络量化中使用的移位量化,为后续的量化研究提供了基础[14]。提出了IAO量化方法,针对推理过程进行定点量化,并将该工作应用到Tensor Flow Lite中。

研究表明,低位宽定点数可以在一定程度上准确高效地执行深度神经网络的推理,但对于训练过程来说,使用量化技术可能会导致显著的准确性损失。大多数已有的量化训练研究都对所有网络层使用统一的精度(位宽),如何在每一次训练迭代中都能保证模型的精度成为了目前量化方法的一大挑战。

基于对反向传播中训练精度与计算位宽之间相关性的观察,提出了一种有效的自适应逐层确定位宽的定点训练方法,在不改变超参数和不降低精度的前提下,利用定点训练大规模的深度神经网络。在每一层的训练中,该方法会自动找到权值、激活值和激活梯度的最佳量化分辨率,即最小的比特宽度,同时不显著改变数据的均值。具体而言,首先在量化之前计算数据的均值,之后使用int8量化数据并计算量化误差。如果量化误差比超过一定阈值,就增大量化位宽。循环上述过程直至量化误差比低于阈值为止。

实验结果表明:该自适应定点训练方法可以达到与float32相当的精度,而平均精度损失仅为0.02%(精度损失范围为-1.4%~1.3%)。在Intel Xeon Gold 6154上运行的结果表明,该方法可以在AlexNet的训练中达到高于float 32方法2.52倍的加速效果。

使用自适应定点训练方法,深度学习处理器将不再需要大量昂贵的浮点硬件单元来支持深度学习训练任务,取而代之的是对芯片面积和功耗要求更低的轻量级定点硬件单元。这样一来,在相同的芯片面积或功耗约束下,可以大大提高深度神经网络的训练性能,这对芯片设计者和用户来说无疑是一个好消息。

3.2 基于Cambricon-Q:量化训练加速器架构

为了将以自适应定点训练方法为代表的量化训练方法有效地部署到现有的深度神经网络加速器上,需要在硬件层面对大量数据(例如神经元和权重)进行实时统计量化和高精度的权重更新,为此提出了首款高效量化训练架构Cambricon-Q。Cambricon-Q是一个由ASIC加速核心和近数据处理(Near-Data-Processing,NDP)引擎组成的混合架构,其结构如图4所示。

图4 Cambricon-Q 整体架构

ASIC加速核心用于对切片数据执行基于统计的局部量化,在提高计算效率的同时显著减少数据访问量。它由用于矩阵/矢量计算的PE阵列,用于标量运算的标量功能单元和3个片上缓存区(分别用于输入神经元(NBin),输出神经元(NBout)和突触缓存)等组成。此外,它还包括3个专门设计的量化单元以有效支持对硬件友好的量化技术:一个用于执行实时统计和局部动态量化的统计量化单元,2个与NBin和突触缓存耦合的量化缓存控制器,以管理以不同方式量化的数据的量化缓存控制器参数(例如缩放比例和偏移)。与传统基于统计的量化不同,加速核心可连续地对整个数据的每个分区切片并进行统计分析和重构。

数据处理引擎用于高精度权重更新,它将一个可配置的优化器集成到DRAM中,以减少权重更新中数据传输带来的消耗。引擎由2个专用模块组成:SQU优化器和NDP优化器,可以通过将可配置的优化器集成到DRAM中来实现权重的原位更新。

在各种网络模型上进行了实验,并将实验结果与边缘GPU和TPU进行了比较。结果表明,与边缘GPU(如JetsonTX2)相比,Cambricon-Q加速器训练的能效提高了6.41倍,性能提高了4.2倍。与TPU相比,Cambricon-Q深度神经网络训练的能效提高了1.62倍,性能提高了1.7倍。此外,与GPU上的全精度训练相比,其精度损失小于0.4%。

4 总结

随着深度学习已经蓬勃发展,现如今已渗透到各行各业并取得了良好的效果,未来10年,深度学习将进一步覆盖自动驾驶、智能医疗、智慧制造等更广泛的应用领域。以深度学习框架为核心的开源深度学习平台大大降低了人工智能技术的开发门槛,有效提高了人工智能应用的质量和效率。深度学习能力的持续提升也不断增强了对高性能和高能效深度学习处理架构的需求,面向稀疏化和量化这两类典型的神经网络压缩方法,本文从软硬件协同的角度介绍了如何从硬件架构为其提供专门的支持和优化,旨在为实现更深入的跨层次软硬件协同优化,从而为进一步提升深度学习处理能效的相关研究提供参考。

猜你喜欢
处理单元加速器神经元
莫比斯加速器众创办公空间
知识快餐店 科学加速器
不同生物链组合对黄河下游地区引黄水库富营养化及藻类控制
城市污水处理厂设备能耗及影响因素分析研究
全民小康路上的“加速器”
长填龄渗滤液MBR+NF组合工艺各处理单元的DOM化学多样性
跃动的神经元——波兰Brain Embassy联合办公
电动汽车主控制器双机热备的设计
ERK1/2介导姜黄素抑制STS诱导神经元毒性损伤的作用
毫米波导引头预定回路改进单神经元控制