第15卷第2期 智能系统学报 Vol.15 No.2 2020年3月 CAAI Transactions on Intelligent Systems Mar.2020 D0:10.11992/tis.201902007 网络出版地址:http:/kns.cnki.net/kcms/detail/23.1538.TP.20191205.1449.006.html 一种高效的稀疏卷积神经网络加速器的设计与实现 余成宇12,李志远2,毛文宇,鲁华祥2 (1.中国科学院半导体研究所,北京100083,2.中国科学院大学,北京100089;3.中国科学院脑科学与智能技 术卓越创新中心,上海200031:4.半导体神经网络智能感知与计算技术北京市重,点实验室,北京100083】 摘要:针对卷积神经网络计算硬件化实现困难的问题,之前大部分卷积神经网络加速器的设计都集中于解决 计算性能和带宽瓶颈,忽视了卷积神经网络稀疏性对加速器设计的重要意义,近来少量的能够利用稀疏性的卷 积神经网络加速器设计也往往难以同时兼顾计算灵活度、并行效率和资源开销。本文首先比较了不同并行展 开方式对利用稀疏性的影响,分析了利用稀疏性的不同方法,然后提出了一种能够利用激活稀疏性加速卷积神 经网络计算的同时,相比于同领域其他设计,并行效率更高、额外资源开销更小的并行展开方法,最后完成了 这种卷积神经网络加速器的设计并在PGA上实现。研究结果表明:运行VGG-16网络,在ImageNet数据集 下,该并行展开方法实现的稀硫卷积神经网络加速器和使用相同器件的稠密网络设计相比,卷积性能提升了 108.8%,整体性能提升了164.6%,具有明显的性能优势。 关键词:卷积神经网络;稀疏性;嵌入式FPGA;R©LU;硬件加速;并行计算;深度学习 中图分类号:TN4文献标志码:A文章编号:1673-4785(2020)02-0323-11 中文引用格式:余成宇,李志远,毛文宇,等.一种高效的稀疏卷积神经网络加速器的设计与实现.智能系统学报,2020, 15(2):323-333. 英文引用格式:YU Chengyu,LI Zhiyuan,MAO Wenyu,.etal.Design and implementation of an efficient accelerator for sparse con volutional neural network Jl.CAAI transactions on intelligent systems,2020,15(2):323-333. Design and implementation of an efficient accelerator for sparse convolutional neural network YU Chengyu2,LI Zhiyuan2,MAO Wenyu',LU Huaxiang'234 (1.Institute of Semiconductors,Chinese Academy of Sciences,Beijing 100083,China;2.University of Chinese Academy of Sci- ences,Beijing 100089,China;3.Center for Excellence in Brain Science and Intelligence Technology,Chinese Academy of Sciences, Shanghai 200031,China;4.Semiconductor Neural Network Intelligent Perception and Computing Technology Beijing Key Lab, Beijing 100083,China) Abstract:To address the difficulty experienced by convolutional neural networks(CNNs)in computing hardware im- plementation,most previous designs of convolutional neural network accelerators have focused on solving the computa- tion performance and bandwidth bottlenecks,while ignoring the importance of CNN sparsity to accelerator design.Re- cently,it has often been difficult to simultaneously achieve computational flexibility,parallel efficiency,and resource overhead using the small number of CNN accelerator designs capable of utilizing sparsity.In this paper,we first ana- lyze the effects of different parallel expansion methods on the use of sparsity,analyze different methods that utilize sparsity,and then propose a parallel expansion method that can accelerate CNNs with activated sparsity to achieve high- er parallelism efficiency and lower additional resource cost,as compared with other designs.Lastly,we complete the design of this CNN accelerator and implemented it on FPGA.The results show that compared with a dense network design using the same device,the acceleration performance of the VGG-16 network was increased by 108.8%and its overall performance was improved by 164.6%,which has obvious performance advantages. Keywords:convolutional neural network;sparsity;embedded FPGA;ReLU;hardware acceleration;parallel computing; deep learning 收稿日期:2019-02-14.网络出版日期:2019-12-06. 基金项目:国家白然科学基金项目(61701473);中国科学院 近年来,由于大数据时代海量数据的获取以 STS计划项目(KFJ-STS-ZDTP-070):中国科学院国 防科技创新基金项目(CXJ小-17-M152:中国科学院 及计算机性能的显著提升,以卷积神经网络为代 战略性先导科技专项(A类)XDA18040400):北京市 表的深度学习算法在许多领域体现出了巨大的优 科技计划项目(Z181100001518006). 通信作者:毛文宇.E-mail:maowenyu(@semi.ac.cn 越性。在计算机视觉方向,深度学习的方法已经
DOI: 10.11992/tis.201902007 网络出版地址: http://kns.cnki.net/kcms/detail/23.1538.TP.20191205.1449.006.html 一种高效的稀疏卷积神经网络加速器的设计与实现 余成宇1,2,李志远1,2,毛文宇1 ,鲁华祥1,2,3,4 (1. 中国科学院 半导体研究所,北京 100083; 2. 中国科学院大学,北京 100089; 3. 中国科学院 脑科学与智能技 术卓越创新中心,上海 200031; 4. 半导体神经网络智能感知与计算技术北京市重点实验室,北京 100083) 摘 要:针对卷积神经网络计算硬件化实现困难的问题,之前大部分卷积神经网络加速器的设计都集中于解决 计算性能和带宽瓶颈,忽视了卷积神经网络稀疏性对加速器设计的重要意义,近来少量的能够利用稀疏性的卷 积神经网络加速器设计也往往难以同时兼顾计算灵活度、并行效率和资源开销。本文首先比较了不同并行展 开方式对利用稀疏性的影响,分析了利用稀疏性的不同方法,然后提出了一种能够利用激活稀疏性加速卷积神 经网络计算的同时,相比于同领域其他设计,并行效率更高、额外资源开销更小的并行展开方法,最后完成了 这种卷积神经网络加速器的设计并在 FPGA 上实现。研究结果表明:运行 VGG-16 网络,在 ImageNet 数据集 下,该并行展开方法实现的稀疏卷积神经网络加速器和使用相同器件的稠密网络设计相比,卷积性能提升了 108.8%,整体性能提升了 164.6%,具有明显的性能优势。 关键词:卷积神经网络;稀疏性;嵌入式 FPGA;ReLU;硬件加速;并行计算;深度学习 中图分类号:TN4 文献标志码:A 文章编号:1673−4785(2020)02−0323−11 中文引用格式:余成宇, 李志远, 毛文宇, 等. 一种高效的稀疏卷积神经网络加速器的设计与实现 [J]. 智能系统学报, 2020, 15(2): 323–333. 英文引用格式:YU Chengyu, LI Zhiyuan, MAO Wenyu, et al. Design and implementation of an efficient accelerator for sparse convolutional neural network[J]. CAAI transactions on intelligent systems, 2020, 15(2): 323–333. Design and implementation of an efficient accelerator for sparse convolutional neural network YU Chengyu1,2 ,LI Zhiyuan1,2 ,MAO Wenyu1 ,LU Huaxiang1,2,3,4 (1. Institute of Semiconductors, Chinese Academy of Sciences, Beijing 100083, China; 2. University of Chinese Academy of Sciences, Beijing 100089, China; 3. Center for Excellence in Brain Science and Intelligence Technology, Chinese Academy of Sciences, Shanghai 200031, China; 4. Semiconductor Neural Network Intelligent Perception and Computing Technology Beijing Key Lab, Beijing 100083, China) Abstract: To address the difficulty experienced by convolutional neural networks (CNNs) in computing hardware implementation, most previous designs of convolutional neural network accelerators have focused on solving the computation performance and bandwidth bottlenecks, while ignoring the importance of CNN sparsity to accelerator design. Recently, it has often been difficult to simultaneously achieve computational flexibility, parallel efficiency, and resource overhead using the small number of CNN accelerator designs capable of utilizing sparsity. In this paper, we first analyze the effects of different parallel expansion methods on the use of sparsity, analyze different methods that utilize sparsity, and then propose a parallel expansion method that can accelerate CNNs with activated sparsity to achieve higher parallelism efficiency and lower additional resource cost, as compared with other designs. Lastly, we complete the design of this CNN accelerator and implemented it on FPGA. The results show that compared with a dense network design using the same device, the acceleration performance of the VGG-16 network was increased by 108.8% and its overall performance was improved by 164.6%, which has obvious performance advantages. Keywords: convolutional neural network; sparsity; embedded FPGA; ReLU; hardware acceleration; parallel computing; deep learning 近年来,由于大数据时代海量数据的获取以 及计算机性能的显著提升,以卷积神经网络为代 表的深度学习算法在许多领域体现出了巨大的优 越性。在计算机视觉方向,深度学习的方法已经 收稿日期:2019−02−14. 网络出版日期:2019−12−06. 基金项目:国家自然科学基金项目 (61701473);中国科学院 STS 计划项目 (KFJ-STS-ZDTP-070);中国科学院国 防科技创新基金项目 (CXJJ-17-M152);中国科学院 战略性先导科技专项 (A 类)(XDA18040400);北京市 科技计划项目 (Z181100001518006). 通信作者:毛文宇. E-mail:maowenyu@semi.ac.cn. 第 15 卷第 2 期 智 能 系 统 学 报 Vol.15 No.2 2020 年 3 月 CAAI Transactions on Intelligent Systems Mar. 2020
·324· 智能系统学报 第15卷 获得了超过人类的认知和分类水平。然而像典 庞大的逻辑和存储空间配套,这不利于大规模并 型的分类网络VGG-16,需要15.5G次乘加操作 行,尤其是在FPGA设备上不能将乘法器资源充 和138M的参数量),巨大的计算量和参数量使 分利用,并且这些设计对于计算量密集的卷积计 得卷积神经网络的实际应用困难重重。 算,最终体现出的加速效果也一般,性价比并不高。 如何加速卷积神经网络计算,近年来一直是 针对这些问题,提出了一种利用稀疏性加速 个活跃的研究领域。文献[3]研究了卷积神经网 计算同时并行效率极高、额外资源开销较小的并 络的加速基本方法,并分析了加速设计的性能瓶 行展开方法,设计并实现了能够高效利用稀疏性 颈。文献[4]比较了各种典型的并行展开方法, 加速计算的卷积神经网络加速器。对于卷积层, 提出了适合实时卷积神经网络计算的数据流结 我们通过使用内核脉动阵列展开与特征图平铺展 构。文献[5]设计了多个卷积层处理器,分别加 开结合的并行展开方式,在有效利用激活稀疏性 速不同的卷积层。文献[6]比较了不同的卷积计 减少计算量加速计算的同时,降低了并行计算负 算展开方式,并提出了有效的数据复用和资源展开 载失衡对加速效果的影响;对于全连接层,我们 方法。 选择使用压缩稀疏列的计算方式,同时利用激活 然而仅从计算性能和带宽瓶颈上入手对加速 稀疏性和参数稀疏性,明显的降低了参数量和计 卷积神经网络计算来说还远远不够,有效利用神 算量。 经网络本身的稀疏性,能够从算法层面大大加快 网络计算速度。卷积神经网络的稀疏性体现在 1卷积神经网络的稀疏性 激活结果和网络参数两个方面。 自然界中的神经系统本身是稀疏的),卷积 文献[8]利用激活稀疏性压缩了激活结果中 神经网络本身也是稀疏的。卷积神经网络的稀疏 的零值,节省了传输带宽开销并降低了计算功 性体现在激活结果和网络参数的两个方面。 耗。文献[9]利用激活稀疏性对卷积计算激活结 卷积神经网络的激活结果是稀疏的。卷积神 果压缩编码,在次层计算中跳过激活输入中的零 经网络使用非线性激活函数模仿了生物中神经元 值降低了卷积神经网络计算量。文献[10]利用参 的放电方式,近年来被广泛使用的ReLU激活 数稀疏性,将激活输入中权重无效的输入别除, 函数将所有负值激活为零,给卷积神经网络的激 降低了卷积神经网络计算量。文献[11]同时利用 活结果带来了显著的稀疏性I。例如AlexNet中 激活稀疏性和参数稀疏性,实时选择激活输入中 卷积层有19%~63%的激活结果是06,而对0进 的有效值广播给所有PE,PE独立索引,将有效的 行乘累加对计算结果没有任何影响,跳过这部分 激活输入和权重的乘积累加到对应位置完成卷积 的无效计算,就能给卷积神经网络加速器带来明 计算,有效降低了网络计算量和参数量。文 显的性能提升。 献[12]同时利用激活稀疏性和参数稀疏性,PE内 卷积神经网络的网络参数是冗余的。卷积神 使用笛卡尔乘积的方法,完成稀疏激活输入与稀 经网络使用了大量的参数来保证网络足够的复杂 疏权重的乘积,再将乘积结果还原到对应位置进 度和表现力,然而大量实验证明,增加参数量并 行累加完成卷积计算,有效降低了网络计算量和 不一定能提升网络效果,甚至会带来网络的过拟 参数量。 合。特别地,虽然卷积神经网络的全连接层占 尽管这些方法都能在一定程度上利用卷积神 用了绝大部分的参数量,却仅贡献了非常小的计 经网络的稀疏性优化计算,但是我们注意到它们 算量。例如VGG-16中全连接层使用了89.4%的 很难兼顾计算灵活性、并行效率和资源开销。文 参数,却仅仅占用了0.8%的计算量。实验证明全 献[8]虽然利用激活稀疏性压缩了激活结果,但 连接层的连接是非常稀疏的,能够在不损失网络 受制于计算方式的规整,实际上并没有将它用于 精度的情况下,通过剪枝移除超过90%的全连接 降低计算量。文献[9-10]、[12]没有对并行计算负 层连接。 载失衡导致的性能损失问题进行优化,进行卷积 如图I所示,实验随机选取了ImageNet数据 计算时平均有20%~40%的性能损失在负载失衡 集中的500张图,直接使用VGG-16网络不做任 上四。文献[1)只对输出特征图方向进行了并行 何优化的原始基础参数,统计了每一层的激活输 展开,在计算输出特征图较少的卷积层时不能完 入稀疏性。实验结果表明,对比VGG-16基准网 全利用计算性能,并行效率受到明显影响。文 络模型,在理想情况下利用激活稀疏性能够降低 献[10-12]为了利用参数稀疏性,每个PE都需要 50.92%的计算量
获得了超过人类的认知和分类水平[1]。然而像典 型的分类网络 VGG-16,需要 15.5 G 次乘加操作 和 138 M 的参数量[2] ,巨大的计算量和参数量使 得卷积神经网络的实际应用困难重重。 如何加速卷积神经网络计算,近年来一直是 个活跃的研究领域。文献 [3] 研究了卷积神经网 络的加速基本方法,并分析了加速设计的性能瓶 颈。文献 [4] 比较了各种典型的并行展开方法, 提出了适合实时卷积神经网络计算的数据流结 构。文献 [5] 设计了多个卷积层处理器,分别加 速不同的卷积层。文献 [6] 比较了不同的卷积计 算展开方式,并提出了有效的数据复用和资源展开 方法。 然而仅从计算性能和带宽瓶颈上入手对加速 卷积神经网络计算来说还远远不够,有效利用神 经网络本身的稀疏性,能够从算法层面大大加快 网络计算速度[7]。卷积神经网络的稀疏性体现在 激活结果和网络参数两个方面。 文献 [8] 利用激活稀疏性压缩了激活结果中 的零值,节省了传输带宽开销并降低了计算功 耗。文献 [9] 利用激活稀疏性对卷积计算激活结 果压缩编码,在次层计算中跳过激活输入中的零 值降低了卷积神经网络计算量。文献 [10] 利用参 数稀疏性,将激活输入中权重无效的输入剔除, 降低了卷积神经网络计算量。文献 [11] 同时利用 激活稀疏性和参数稀疏性,实时选择激活输入中 的有效值广播给所有 PE,PE 独立索引,将有效的 激活输入和权重的乘积累加到对应位置完成卷积 计算,有效降低了网络计算量和参数量。文 献 [12] 同时利用激活稀疏性和参数稀疏性,PE 内 使用笛卡尔乘积的方法,完成稀疏激活输入与稀 疏权重的乘积,再将乘积结果还原到对应位置进 行累加完成卷积计算,有效降低了网络计算量和 参数量。 尽管这些方法都能在一定程度上利用卷积神 经网络的稀疏性优化计算,但是我们注意到它们 很难兼顾计算灵活性、并行效率和资源开销。文 献 [8] 虽然利用激活稀疏性压缩了激活结果,但 受制于计算方式的规整,实际上并没有将它用于 降低计算量。文献 [9-10]、[12] 没有对并行计算负 载失衡导致的性能损失问题进行优化,进行卷积 计算时平均有 20%~40% 的性能损失在负载失衡 上 [12]。文献 [11] 只对输出特征图方向进行了并行 展开,在计算输出特征图较少的卷积层时不能完 全利用计算性能,并行效率受到明显影响。文 献 [10-12] 为了利用参数稀疏性,每个 PE 都需要 庞大的逻辑和存储空间配套,这不利于大规模并 行,尤其是在 FPGA 设备上不能将乘法器资源充 分利用,并且这些设计对于计算量密集的卷积计 算,最终体现出的加速效果也一般,性价比并不高。 针对这些问题,提出了一种利用稀疏性加速 计算同时并行效率极高、额外资源开销较小的并 行展开方法,设计并实现了能够高效利用稀疏性 加速计算的卷积神经网络加速器。对于卷积层, 我们通过使用内核脉动阵列展开与特征图平铺展 开结合的并行展开方式,在有效利用激活稀疏性 减少计算量加速计算的同时,降低了并行计算负 载失衡对加速效果的影响;对于全连接层,我们 选择使用压缩稀疏列的计算方式,同时利用激活 稀疏性和参数稀疏性,明显的降低了参数量和计 算量。 1 卷积神经网络的稀疏性 自然界中的神经系统本身是稀疏的[13] ,卷积 神经网络本身也是稀疏的。卷积神经网络的稀疏 性体现在激活结果和网络参数的两个方面。 卷积神经网络的激活结果是稀疏的。卷积神 经网络使用非线性激活函数模仿了生物中神经元 的放电方式[14] ,近年来被广泛使用的 ReLU 激活 函数将所有负值激活为零,给卷积神经网络的激 活结果带来了显著的稀疏性[15]。例如 AlexNet 中 卷积层有 19%~63% 的激活结果是 0 [16] ,而对 0 进 行乘累加对计算结果没有任何影响,跳过这部分 的无效计算,就能给卷积神经网络加速器带来明 显的性能提升。 卷积神经网络的网络参数是冗余的。卷积神 经网络使用了大量的参数来保证网络足够的复杂 度和表现力,然而大量实验证明,增加参数量并 不一定能提升网络效果,甚至会带来网络的过拟 合 [17]。特别地,虽然卷积神经网络的全连接层占 用了绝大部分的参数量,却仅贡献了非常小的计 算量。例如 VGG-16 中全连接层使用了 89.4% 的 参数,却仅仅占用了 0.8% 的计算量。实验证明全 连接层的连接是非常稀疏的,能够在不损失网络 精度的情况下,通过剪枝移除超过 90% 的全连接 层连接[18]。 如图 1 所示,实验随机选取了 ImageNet 数据 集中的 500 张图,直接使用 VGG-16 网络不做任 何优化的原始基础参数,统计了每一层的激活输 入稀疏性。实验结果表明,对比 VGG-16 基准网 络模型,在理想情况下利用激活稀疏性能够降低 50.92% 的计算量。 ·324· 智 能 系 统 学 报 第 15 卷
第2期 余成字,等:一种高效的稀疏卷积神经网络加速器的设计与实现 ·325· 4.00 3.7元 3.00 2.00 1.00 0.92 1-2 21 2.2 32 3.3 4-14-24-35.15-25-3 FC6 FC7 FC8 层名称 四基准 口利用激活稀疏性 图1利用激话稀疏性前后VGG16网络每层计算量的变化 Fig.1 Changes of the computation amount of VGG-16 network layer before and after utilizing the sparsity of activation 使用动态精度量化的方法叨,将参数与激活 尺寸考虑了边界补零,输入特征图通道深度为, 结果均量化为8bit,并对全连接层进行了剪枝,比 输出特征图的数量为M,内核行方向为K,内核 较了网络剪枝前后的参数量。实验结果如图2所 列方向为K,。进行卷积操作时,N个大小为 示。实验结果表明,全连接层占据了大部分的参 K×K,的窗口同时在输入特征图上滑动,每次获 数量,对全连接层进行稀疏剪枝能够降低 取一个大小为K×K,×N的张量,分别与M个输出 85.23%的参数量。以上两个实验证明了,即使不 特征图的权重卷积。卷积的M个计算结果为输 对网络结构进行任何额外的优化,利用稀疏性对 出特征图上的一个像素点,通过依次滑动窗口, 卷积神经网络计算的提升也非常明显。如何有效 最终获得完整的输出特征图。卷积计算的伪代码 利用稀疏性优化计算是当前的卷积神经网络加速 如算法1中表示。 器设计必须要认真考虑的问题。 CONVI CONV2 FC8 0.03%0.16%C0NV3 2.96% 1.07%CONV4 FC7- 4.26% 12.13% C+K-1 CONV5 ▣CONVI 5.12% 图CONV2 图CONV3 输人特征图 卷积内核 输出特征图 ▣CONV4 日CONV5 图3卷积层计算示意 ▣FC6 日FC7 Fig.3 Schematic diagram of convolution computing FC8 FC6 算法1典型的卷积计算伪代码 74.28% for(m=0:m<M;m++) 1输出特征图 ×10的 120 for(n =0:n<N:n++){ 输入特征图 102.76 for(r=0;r<R;r++) 特征图的行 10o ⑧基准 回剪枝后 for(c=0;c<C:c++) /特征图的列 for(i=0:i<K:i++) 内核行方向 60 for(j=0;j<Ky;j++)( 内核列方向 0 16.78 O侣+=K×n乘累加 4.11 图o.67 4904 }}}} FC6 FC7 FC8 利用稀疏性加速卷积神经网络计算会给硬件 层名称 上带来两个问题:首先,稀疏的卷积计算是不平 图2VGG-16全连接层参数量比重与剪枝前后的变化 衡的,而并行计算时负载失衡会导致计算单元利 Fig.2 Proportion and Changes of the parameters amount 用率下降,损失性能,在并行队列数量较多、队列 of VGG-16 full connected layer before and after 长度不够长时,负载失衡的影响会非常明显;其 pruning 次,对激活输入和权重的判断或选择会增加逻辑 2 算法理论设计 复杂度,可能会带来不能接受的面积开销,影响 并行展开规模。 典型的卷积神经网络卷积计算如图3所示。 用系统并行自由度来表征并行计算的负载失 输出特征图的行数为R、列数为C,输入特征图的 衡。如图4所示,大部分卷积计算是以窗口滑动
0 0.170.17 3.70 3.70 3.70 3.70 3.70 3.70 1.97 1.85 1.85 1.28 1.93 1.90 1.85 1.08 0.92 0.22 0.22 0.18 0.210.08 0.030.01 0.010.01 0.92 0.92 1.29 0.89 1.51 2.44 1.00 1-1 1-2 2-1 2-2 3-1 3-2 3-3 4-1 4-2 4-3 5-1 5-2 5-3 FC6 FC7 FC8 2.00 计算量/(GOP) 层名称 3.00 4.00 基准 利用激活稀疏性 图 1 利用激活稀疏性前后 VGG-16 网络每层计算量的变化 Fig. 1 Changes of the computation amount of VGG-16 network layer before and after utilizing the sparsity of activation 使用动态精度量化的方法[19] ,将参数与激活 结果均量化为 8 bit,并对全连接层进行了剪枝,比 较了网络剪枝前后的参数量。实验结果如图 2 所 示。实验结果表明,全连接层占据了大部分的参 数量,对全连接层进行稀疏剪枝能够降 低 85.23% 的参数量。以上两个实验证明了,即使不 对网络结构进行任何额外的优化,利用稀疏性对 卷积神经网络计算的提升也非常明显。如何有效 利用稀疏性优化计算是当前的卷积神经网络加速 器设计必须要认真考虑的问题。 102.76 16.78 4.11 4.10 0.67 0.94 0 20 40 60 80 100 120 ×106 FC6 FC7 FC8 参数量 层名称 基准 剪枝后 CONV1 0.03% CONV2 0.16% CONV3 1.07% CONV4 4.26% CONV5 5.12% FC6 74.28% FC7 12.13% FC8 2.96% CONV1 CONV2 CONV3 CONV4 CONV5 FC6 FC7 FC8 图 2 VGG-16 全连接层参数量比重与剪枝前后的变化 Fig. 2 Proportion and Changes of the parameters amount of VGG-16 full connected layer before and after pruning 2 算法理论设计 典型的卷积神经网络卷积计算如图 3 所示。 输出特征图的行数为 R、列数为 C,输入特征图的 尺寸考虑了边界补零,输入特征图通道深度为 N, 输出特征图的数量为 M,内核行方向为 Kx,内核 列方向 为 Ky。进行卷积操作时, N 个大小 为 Kx×Ky 的窗口同时在输入特征图上滑动,每次获 取一个大小为 Kx×Ky×N 的张量,分别与 M 个输出 特征图的权重卷积。卷积的 M 个计算结果为输 出特征图上的一个像素点,通过依次滑动窗口, 最终获得完整的输出特征图。卷积计算的伪代码 如算法 1 中表示。 Ky N C+Kx−1 Kx R+Ky−1 Ky Kx N M . . . . . . = C R M 输入特征图 输出特征图 卷积内核 * 图 3 卷积层计算示意 Fig. 3 Schematic diagram of convolution computing 算法1 典型的卷积计算伪代码 for(m = 0;m < M;m+ +){ //输出特征图 for(n = 0;n < N;n+ +){ //输入特征图 for(r = 0;r < R;r + +){ //特征图的行 for(c = 0; c < C; c+ +){ //特征图的列 for(i = 0;i < Kx ;i+ +){ //内核行方向 for( j = 0; j < Ky ; j+ +) { //内核列方向 O (m) (c,r)+ = K (m,n) (i, j) × I (n) (c+i,r+j) ; //乘累加 }}}}}} 利用稀疏性加速卷积神经网络计算会给硬件 上带来两个问题:首先,稀疏的卷积计算是不平 衡的,而并行计算时负载失衡会导致计算单元利 用率下降,损失性能,在并行队列数量较多、队列 长度不够长时,负载失衡的影响会非常明显;其 次,对激活输入和权重的判断或选择会增加逻辑 复杂度,可能会带来不能接受的面积开销,影响 并行展开规模。 用系统并行自由度来表征并行计算的负载失 衡。如图 4 所示,大部分卷积计算是以窗口滑动 第 2 期 余成宇,等:一种高效的稀疏卷积神经网络加速器的设计与实现 ·325·
·326· 智能系统学报 第15卷 为时间基本单位控制时序的,窗口滑动之间需要 是按照这3种并行展开方式的其中的一种或者多 等待所有并行化方向上的计算队列计算完成,所 种展开的。 以系统并行自由度越高,负载失衡造成的性能损 对突触进行并行展开通常使用脉动阵列的 失就越严重。对于完全规则设计的卷积计算模 方式。如图5(a)所示,图中K=K,=3,PE缓存权 型,所有并行计算队列的计算时间是相同的,这 重,按照内核行方向K从左到右级联,每次计算 样的系统的并行自由度为1,而增加对权重K 时PE将乘法运算结果与左边相邻PE输入的值 和对激活输入n的选择会使子队列长度不均 做加法运算送往右边相邻PE,每行最右边PE通 等,增加系统并行自由度。 过一个深度为R的IFO连接到次行,脉动阵列 的输入为0,通过全部9个PE之后计算完成全部 计算队列0 计算队列1 内核方向的计算。这种并行展开方式共享了激活 计算队列2 输入,复用了权重。它利用激活稀疏性的系统并 计算队列3 行自由度为1,利用参数稀疏性的系统并行自由 度为K×K,同时利用两种稀疏性的系统并行自由 ☐计算时间☐等待时间|滑窗操作 度为K×K, 图4并行计算性能损失示意 对神经元进行并行展开通常使用二维映射的 Fig.4 Schematic diagram of parallel computing perform- ance losses 方式,如图5(b)所示,特征图的行方向R和列方 卷积计算硬件化设计的关键在于如何兼顾数 向C被分块为T,与T,图中T,=T=3,计算开始 据共享、复用和计算的灵活性,对于稀疏的卷积 时,T×T的激活输入被初始化到T,×T。个PE上, 计算,需要最大化数据共享来降低并行计算时负 权重K广播到每个PE完成乘累加计算,每个 载失衡导致的性能损失。本文分别从并行展开方 PE分别缓存计算结果,每次计算时PE向左或者 式和利用稀疏性方式进行分析比较,确定并行效 向上将激活输入传递给相邻PE,依次按照内核行 率极高、额外资源开销较小的稀疏卷积神经网络 方向K和列方向K,输入权重并传递激活输入, 加速器设计。 经过K×K,个周期,计算完成,每个PE完成了对 2.1并行展开方式 应神经元的全部内核方向的乘累加计算。这种并 如图5所示,总体来说,卷积神经网络加速器 行展开方式共享了权重,复用了激活输入。它利 设计的卷积计算的并行展开方式可以分为3种: 用激活稀疏性的系统并行自由度为T,×T,利用参 展开突触(K、K,)、展开神经元(R、C)、展开特征 数稀疏性的系统并行自由度为1,同时利用两种 图(M、。大部分卷积神经网络加速器的设计都 稀疏性的系统并行自由度为T,×T。 激活输人0 激话输只 权重参数 第0行 PE EFIFOG第1行 凤同散输入 +回 PE 激活输人 输出结果0 第1行 个 EP激活输入 第0行 E 个PE-FIFO2>第2行 第2行 PE 激活输人 PE PE>输出结果 梦结果1 第0列 第1列 第2列 输出结果x PE 激活输入激活输入激活输入 (a)展开突触(脉动阵列) (b)展开神经元(二维映射) (c)展开特征图(平铺) 图5并行展开方式示意 Fig.5 Schematic diagram of parallel expansion mode 对特征图进行并行展开通常使用平铺的方 数稀疏性的系统并行自由度为Tm,同时利用两种 式。如图5(c)所示,输人特征图N和输出特征图 稀疏性的系统并行自由度为T×Tm。 M被分块为Tn与Tm,图5中T=1,Tm=2,对应相同 假设同时利用权重K您和激活输入n的 输入特征图的乘法器共享激活输入,对应相同输 稀疏性,由上文的分析可以看出,无论从什么方 出特征图的乘法器将计算结果经由一个加法树累 向对计算进行并行化,都会增加系统并行自由 加输出。这种并行展开方式共享了激活输入。它 度,系统并行自由度等于PE展开数量。可以预 利用激活稀疏性的系统并行自由度为T,利用参 见在一个没有经过特殊均衡化处理的网络上,由
K (m,n) (i, j) I (n) (c+i,r+j) 为时间基本单位控制时序的,窗口滑动之间需要 等待所有并行化方向上的计算队列计算完成,所 以系统并行自由度越高,负载失衡造成的性能损 失就越严重。对于完全规则设计的卷积计算模 型,所有并行计算队列的计算时间是相同的,这 样的系统的并行自由度为 1,而增加对权重 和对激活输入 的选择会使子队列长度不均 等,增加系统并行自由度。 计算队列0 计算队列1 计算队列2 计算队列3 计算时间 等待时间 滑窗操作 图 4 并行计算性能损失示意 Fig. 4 Schematic diagram of parallel computing performance losses 卷积计算硬件化设计的关键在于如何兼顾数 据共享、复用和计算的灵活性,对于稀疏的卷积 计算,需要最大化数据共享来降低并行计算时负 载失衡导致的性能损失。本文分别从并行展开方 式和利用稀疏性方式进行分析比较,确定并行效 率极高、额外资源开销较小的稀疏卷积神经网络 加速器设计。 2.1 并行展开方式 如图 5 所示,总体来说,卷积神经网络加速器 设计的卷积计算的并行展开方式可以分为 3 种: 展开突触 (Kx、Ky )、展开神经元 (R、C)、展开特征 图 (M、N)。大部分卷积神经网络加速器的设计都 是按照这 3 种并行展开方式的其中的一种或者多 种展开的[4]。 对突触进行并行展开通常使用脉动阵列[20] 的 方式。如图 5(a) 所示,图中 Kx=Ky=3,PE 缓存权 重,按照内核行方向 Kx 从左到右级联,每次计算 时 PE 将乘法运算结果与左边相邻 PE 输入的值 做加法运算送往右边相邻 PE,每行最右边 PE 通 过一个深度为 R 的 FIFO 连接到次行,脉动阵列 的输入为 0,通过全部 9 个 PE 之后计算完成全部 内核方向的计算。这种并行展开方式共享了激活 输入,复用了权重。它利用激活稀疏性的系统并 行自由度为 1,利用参数稀疏性的系统并行自由 度为 Kx×Ky,同时利用两种稀疏性的系统并行自由 度为 Kx×Ky。 K (m,n) (i, j) 对神经元进行并行展开通常使用二维映射的 方式,如图 5(b) 所示,特征图的行方向 R 和列方 向 C 被分块为 Tr 与 Tc,图中 Tr=Tc=3,计算开始 时,Tr×Tc 的激活输入被初始化到 Tr×Tc 个 PE 上, 权重 广播到每个 PE 完成乘累加计算,每个 PE 分别缓存计算结果,每次计算时 PE 向左或者 向上将激活输入传递给相邻 PE,依次按照内核行 方向 Kx 和列方向 Ky 输入权重并传递激活输入, 经过 Kx×Ky 个周期,计算完成,每个 PE 完成了对 应神经元的全部内核方向的乘累加计算。这种并 行展开方式共享了权重,复用了激活输入。它利 用激活稀疏性的系统并行自由度为 Tr×Tc,利用参 数稀疏性的系统并行自由度为 1,同时利用两种 稀疏性的系统并行自由度为 Tr×Tc。 (a) 展开突触(脉动阵列) (b) 展开神经元(二维映射) (c) 展开特征图(平铺) 输出结果x9 第0行 激活输入 第1行 激活输入 第2行 激活输入 第0列 激活输入 第1列 激活输入 第2列 激活输入 激活输入0 激活输入1 FIFO FIFO PE PE PE PE PE PE PE PE PE 第1行 第0行 第2行 第1行 输出结果 激活输入 A W W W W W W W W W PE PE PE PE PE PE PE PE PE W 权重参数 A A A A A A A A A PE W PE W PE W PE W 输出结果0 输出结果1 A A 图 5 并行展开方式示意 Fig. 5 Schematic diagram of parallel expansion mode 对特征图进行并行展开通常使用平铺的方 式。如图 5(c) 所示,输入特征图 N 和输出特征图 M 被分块为 Tn 与 Tm,图 5 中 Tn=1,Tm=2,对应相同 输入特征图的乘法器共享激活输入,对应相同输 出特征图的乘法器将计算结果经由一个加法树累 加输出。这种并行展开方式共享了激活输入。它 利用激活稀疏性的系统并行自由度为 Tn,利用参 数稀疏性的系统并行自由度为 Tm,同时利用两种 稀疏性的系统并行自由度为 Tn×Tm。 K (m,n) (i, j) I (n) 假设同时利用权重 和激活输入 (c+i,r+j) 的 稀疏性,由上文的分析可以看出,无论从什么方 向对计算进行并行化,都会增加系统并行自由 度,系统并行自由度等于 PE 展开数量。可以预 见在一个没有经过特殊均衡化处理的网络上,由 ·326· 智 能 系 统 学 报 第 15 卷
第2期 余成字,等:一种高效的稀疏卷积神经网络加速器的设计与实现 ·327· 于负载失衡造成的性能损失将是非常严重的。与 使用平铺的方式对输出特征图方向部分并行展开 此同时,只要利用参数稀疏性,这3种并行展开方 了Tm长度,这Tm个PE组成一个共享激活输入的 式目前的数据共享与复用都会遭到不同程度的破 PE组,然后将K×K,个这样的PE组按突触方向 坏,每个PE都需要独立的选择与索引逻辑,这导 使用脉动阵列的方式并行展开。使用这样的并行 致单位PE面积可能会非常巨大,不利于大规模 展开方式,展开了Tm×K×K,个PE,而整个系统仅 并行。尤其是目前看来,对于计算量密集的卷积 使用了1个逻辑单元负责有效激活输入选择,就 计算,通过利用参数稀疏性节省的计算量可能还 完成了利用激活稀疏性加速计算的功能,资源开 不能抵消资源上的开销,这是得不偿失的。 销极小,并且系统并行自由度仅为1,负载失衡造 基于以上这些考虑,在卷积层计算时仅利用 成的性能损失最低。对应的卷积层计算伪代码如 了激活输入n的稀疏性。如图6所示,首先 算法2所示。 激活输入,口回 MAC PE PEPE SFIFO第1行 激活输人 MAC MAC 第0行 PE FIFO>第2行 MAC 第1行 以PE PE 输出结果 T 展开输出特征图(平铺) 展开突触(脉动阵列 PE Core 图6本设计使用的并行展开方式示意 Fig.6 Schematic diagram of parallel expansion mode in our design 算法2卷积层计算伪代码 数密度为4%),计算队列的长度特别长(VGG-16, for(m =0;mM;m+=Tm) 不分块情况下FC-6的激活队列长度为25088), K=load_weight(m); 足以忽略负载失衡造成的性能损失,非常适合利 for(c=0;c<C;c++) 用参数稀疏性进行计算,所以对全连接层计算使 for(r=0;r<R;r++) for(n=0;n<N:n++) 用压缩稀疏列(CSC)方式同时使用了激活稀疏性 if(mn≠0 和参数稀疏性。全连接层计算是简单的矩阵乘 法,使用平铺的方式并行展开输出特征图效率最 for(j=0;j<Ky;j++)( #unroll 高,此时系统并行自由度为Tm。对应的全连接层 for(i=0;i<K;i++) 计算伪代码如算法3所示。 #unroll 算法3全连接层计算伪代码 for(tm m;tm min(m+Tm,M):tm++){ for(m=0;mM;m+=T) #unroll for(n=0:nN:n+=T)( S[+=K×I②: K=load_weight(m,n); 》 for (tn=n;tn min(n+T,N);tn++){ Kv-l Kx-1 #pipeline O=Systoli if(m≠0) =0 册 for (tm m;tm min(m+Tm,M)tm+=Tmm) #parallelism 注意到现代卷积神经网络的卷积核几乎只 for(tmm tm;tmm min(tm+Tmm,M);tmm++) 有3×3和1×1,并且对于大于3×3的卷积核(例如 #pipeline 5×5)可以使用多次3×3卷积替代四。类似的,每 if(Kamm)≠0) 个PE组分别独立计算输出特征图即可以将3×3 Q(tmm)+=K(tmm.in)x (tn). 卷积工作模式转换成1×1卷积工作模式。所以本 }7 文提出的这种并行展开方式展开3×3的卷积核是 2.2利用稀疏性方式 可以适应于大部分卷积神经网络的。 卷积神经网络稀疏性分为激活稀疏性和参数 全连接层参数量巨大,片上片下传输带宽是 稀疏性两种,利用稀疏性的方式直接决定了设计 全连接层计算瓶颈,不做任何算法优化在硬件上 的复杂性和额外的资源开销量,我们分别分析不 完成全连接层计算是效率极低的,并且本身全连 同的利用稀疏性方式。 接层稀疏性非常高(对于VGG-16,FC-6的有效参 利用激活稀疏性主要可以分为压缩编码和多
于负载失衡造成的性能损失将是非常严重的。与 此同时,只要利用参数稀疏性,这 3 种并行展开方 式目前的数据共享与复用都会遭到不同程度的破 坏,每个 PE 都需要独立的选择与索引逻辑,这导 致单位 PE 面积可能会非常巨大,不利于大规模 并行。尤其是目前看来,对于计算量密集的卷积 计算,通过利用参数稀疏性节省的计算量可能还 不能抵消资源上的开销,这是得不偿失的。 I (n) (c+i,r+j) 基于以上这些考虑,在卷积层计算时仅利用 了激活输入 的稀疏性。如图 6 所示,首先 使用平铺的方式对输出特征图方向部分并行展开 了 Tm 长度,这 Tm 个 PE 组成一个共享激活输入的 PE 组,然后将 Kx×Ky 个这样的 PE 组按突触方向 使用脉动阵列的方式并行展开。使用这样的并行 展开方式,展开了 Tm×Kx×Ky 个 PE,而整个系统仅 使用了 1 个逻辑单元负责有效激活输入选择,就 完成了利用激活稀疏性加速计算的功能,资源开 销极小,并且系统并行自由度仅为 1,负载失衡造 成的性能损失最低。对应的卷积层计算伪代码如 算法 2 所示。 W A MAC MAC MAC MAC 激活输入 PE 展开输出特征图(平铺) 展开突触(脉动阵列) 输出结果 FIFO FIFO PE PE PE PE PE PE PE PE PE 第1行 第0行 第2行 第1行 激活输入 A W PE Core 图 6 本设计使用的并行展开方式示意 Fig. 6 Schematic diagram of parallel expansion mode in our design 算法2 卷积层计算伪代码 for(m = 0;m < M;m+ = Tm){ K = load_weight(m); for(c = 0; c < C; c+ +){ for(r = 0;r < R;r + +){ for(n = 0;n < N;n+ +){ if( I (tn) (r,c+j) , 0 ) { for( j = 0; j < Ky ; j+ +) { #unroll for(i = 0;i < Kx ;i+ +){){ #unroll for(tm = m;tm < min(m+Tm, M);tm+ +){ #unroll S (tm) (c,r) [i] [ j ] + = K (tm,n) (i, j) × I (n) (c,r) ; }}}}}} O (tm) (c,r) = Systolic Ky ∑−1 j=0 Kx∑−1 i=0 S (tm) (c+i−Kx,r+j−Ky) [i] [ j ] ; }}} 注意到现代卷积神经网络的卷积核几乎只 有 3×3 和 1×1,并且对于大于 3×3 的卷积核 (例如 5×5) 可以使用多次 3×3 卷积替代[2]。类似的,每 个 PE 组分别独立计算输出特征图即可以将 3×3 卷积工作模式转换成 1×1 卷积工作模式。所以本 文提出的这种并行展开方式展开 3×3 的卷积核是 可以适应于大部分卷积神经网络的。 全连接层参数量巨大,片上片下传输带宽是 全连接层计算瓶颈,不做任何算法优化在硬件上 完成全连接层计算是效率极低的,并且本身全连 接层稀疏性非常高 (对于 VGG-16,FC-6 的有效参 数密度为 4%),计算队列的长度特别长 (VGG-16, 不分块情况下 FC-6 的激活队列长度为 25 088), 足以忽略负载失衡造成的性能损失,非常适合利 用参数稀疏性进行计算,所以对全连接层计算使 用压缩稀疏列 (CSC) 方式同时使用了激活稀疏性 和参数稀疏性。全连接层计算是简单的矩阵乘 法,使用平铺的方式并行展开输出特征图效率最 高,此时系统并行自由度为 Tm。对应的全连接层 计算伪代码如算法 3 所示。 算法3 全连接层计算伪代码 for(m = 0;m < M;m+ = Tm){ for(n = 0;n < N;n+ = Tn){ K = load_weight(m,n); for(tn = n;tn < min(n+Tn,N);tn+ +){ #pipeline if( I (tn) , 0 ) { for(tm = m;tm < min(m+Tm, M);tm+ = Tmm){ #parallelism for(tmm = tm;tmm < min(tm+Tmm, M);tmm+ +){ #pipeline if( K (tmm,tn) , 0 ) { O (tmm)+ = K (tmm,tn) × I (tn) ; }}}}}}} 2.2 利用稀疏性方式 卷积神经网络稀疏性分为激活稀疏性和参数 稀疏性两种,利用稀疏性的方式直接决定了设计 的复杂性和额外的资源开销量,我们分别分析不 同的利用稀疏性方式。 利用激活稀疏性主要可以分为压缩编码和多 第 2 期 余成宇,等:一种高效的稀疏卷积神经网络加速器的设计与实现 ·327·
·328· 智能系统学报 第15卷 路选择两种方式,如图7所示。压缩编码方式将 利用参数稀疏性主要可以分为压缩稀疏行 激活结果分块,按顺序判断激活结果是否有效, CSR和压缩稀疏列CSC两种方式22,如图9所 记录有效激活结果的值和有效激活结果之间的距 示。压缩稀疏行CSR,稀疏矩阵按照输出特征图 离。多路选择方式一次读入多个激活输入,按优 分离成若干个独立计算,每个输出特征图共享输 先级从中选择有效的激活结果,输出激活结果的 入特征图,并分别按照权重的有效性选择激活输 值和位置。压缩编码方式能够降低传输功耗,但 入进行乘累加计算。压缩稀疏列CSC,稀疏矩阵 不适合通道较浅的卷积层;多路选择方式不能降 按权重方向分离成若干个计算队列,每个计算队 低传输功耗,但逻辑更简单,并且适应所有卷积层。 列对应一个激活输入,计算时依次选择有效权重 与激活结果相乘,并将乘积累加到对应输出特征 原始数据 0 0 0 009 图位置。 权重参数值 2☑ 索引 输出特征图 激活输入 压缩数据 压缩编码 压缩稀疏行(CSR 索引 激活输人 激活值 目a+目▣+目a*目a+目▣+月a-目 压缩稀疏列(CSC) 多路选择 图9利用参数稀疏性方式 图7利用激活稀疏性的方式 Fig.9 Method of using parameter sparsity Fig.7 Method of using activate sparsity CSR模式需要完成两个稀疏矩阵的乘法,复 文献[8-9]、[12]使用了压缩编码的方式,文 杂性较高,文献[12]利用笛卡尔乘法在CSR模式 献[11]使用了多路选择的方式。本文在上节中实 完成了稀疏矩阵计算,文献[1O]使用CSR模式仅 际分析了VGG-l6网络在ImageNet下的激活稀疏 利用了参数稀疏性。CSC模式将计算分离成了若 性在50%左右,使用压缩编码的方式能够降低 干个计算队列,选择有效队列就能利用激活稀疏 50%的激活结果数据量,但与此同时对压缩编码 性,更容易实现,文献[11]使用了CSC模式同时 的索引也是需要占用数据量的。几乎所有分类网 利用了激活稀疏性和参数稀疏性。使用CSC模 络经过优化都能使用动态精度量化的方法量化 式完成全连接层计算。 成8bit激活结果与8bit权重2。如图8所示,随 全连接层稀疏计算PE如图10所示。多路选 着激活结果量化程度的不断提高,对激活结果进 择获得的有效激活输入和索引被送入PE,通过一 行压缩编码的收益是在不断下降的。并且我们的 个存储权重指针的逻辑获得这个有效激活输入对 设计充分靠虑了最大化共享激活输入,使用多路 应的有效权重的头地址和长度,然后从权重缓存 选择的方式消耗的激活压缩单元会非常少。基于 中依次读出权重。权重由位置索引和值两部分组 资源开销和普适性的考虑,我们使用了多路选择 成,在乘累加缓存区域获得位置索引对应位置的 的方式利用激活稀疏性。 乘累加值,与新产生的乘积累加,再送回乘累加 缓存区域,使用一个旁路逻辑缓存乘累加结果, 1.04 0.50.0.44 避免相邻周期对同一个位置读写导致的一个周期 05 0.50,0.38 的时间惩罚。 0.50,0254 2.3与其他加速器设计的比较 0.5 我们分别比较了上述几种卷积神经网络加速 0.5 器利用稀疏性的方式和并行展开方式,见表1。 有效激活结果密度 ★一8bit◆一16bit◆一32bit 表1中稀疏性A代表激活稀疏性,稀疏性W代表 参数稀疏性,CSR代表压缩稀疏行,CSC代表压 图8不同量化精度下VGG-16压缩编码实际压缩效率 Fig.8 Actual compression efficiency of VGG-16 compres- 缩稀疏列,展开方式S、N、F分别代表突触(syn- sion code with different quantization precision apse)、神经元(neuron)、特征图(feature map)o
路选择两种方式,如图 7 所示。压缩编码方式将 激活结果分块,按顺序判断激活结果是否有效, 记录有效激活结果的值和有效激活结果之间的距 离。多路选择方式一次读入多个激活输入,按优 先级从中选择有效的激活结果,输出激活结果的 值和位置。压缩编码方式能够降低传输功耗,但 不适合通道较浅的卷积层;多路选择方式不能降 低传输功耗,但逻辑更简单,并且适应所有卷积层。 11 3 9 1 2 2 原始数据 0 11 0 0 3 0 0 9 索引 压缩数据 压缩编码 激活输入 索引 0 11 0 0 多路选择 激活值 M U X 图 7 利用激活稀疏性的方式 Fig. 7 Method of using activate sparsity 文献 [8-9]、[12] 使用了压缩编码的方式,文 献 [11] 使用了多路选择的方式。本文在上节中实 际分析了 VGG-16 网络在 ImageNet 下的激活稀疏 性在 50% 左右,使用压缩编码的方式能够降低 50% 的激活结果数据量,但与此同时对压缩编码 的索引也是需要占用数据量的。几乎所有分类网 络经过优化都能使用动态精度量化的方法量化 成 8 bit 激活结果与 8 bit 权重[21]。如图 8 所示,随 着激活结果量化程度的不断提高,对激活结果进 行压缩编码的收益是在不断下降的。并且我们的 设计充分靠虑了最大化共享激活输入,使用多路 选择的方式消耗的激活压缩单元会非常少。基于 资源开销和普适性的考虑,我们使用了多路选择 的方式利用激活稀疏性。 0.50,0.25 0.50,0.38 0.50,0.44 −0.5 0.5 1.0 0 0.5 1.0 实际激活结果压缩率 有效激活结果密度 8bit 16bit 32bit 图 8 不同量化精度下 VGG-16 压缩编码实际压缩效率 Fig. 8 Actual compression efficiency of VGG-16 compression code with different quantization precision 利用参数稀疏性主要可以分为压缩稀疏行 CSR 和压缩稀疏列 CSC 两种方式[22] ,如图 9 所 示。压缩稀疏行 CSR,稀疏矩阵按照输出特征图 分离成若干个独立计算,每个输出特征图共享输 入特征图,并分别按照权重的有效性选择激活输 入进行乘累加计算。压缩稀疏列 CSC,稀疏矩阵 按权重方向分离成若干个计算队列,每个计算队 列对应一个激活输入,计算时依次选择有效权重 与激活结果相乘,并将乘积累加到对应输出特征 图位置。 输出特征图 × 权重参数值 激活输入 × = × = × = × = 压缩稀疏行(CSR) × + × + × + × + × = + × 压缩稀疏列(CSC) 图 9 利用参数稀疏性方式 Fig. 9 Method of using parameter sparsity CSR 模式需要完成两个稀疏矩阵的乘法,复 杂性较高,文献 [12] 利用笛卡尔乘法在 CSR 模式 完成了稀疏矩阵计算,文献 [10] 使用 CSR 模式仅 利用了参数稀疏性。CSC 模式将计算分离成了若 干个计算队列,选择有效队列就能利用激活稀疏 性,更容易实现,文献 [11] 使用了 CSC 模式同时 利用了激活稀疏性和参数稀疏性。使用 CSC 模 式完成全连接层计算。 全连接层稀疏计算 PE 如图 10 所示。多路选 择获得的有效激活输入和索引被送入 PE,通过一 个存储权重指针的逻辑获得这个有效激活输入对 应的有效权重的头地址和长度,然后从权重缓存 中依次读出权重。权重由位置索引和值两部分组 成,在乘累加缓存区域获得位置索引对应位置的 乘累加值,与新产生的乘积累加,再送回乘累加 缓存区域,使用一个旁路逻辑缓存乘累加结果, 避免相邻周期对同一个位置读写导致的一个周期 的时间惩罚。 2.3 与其他加速器设计的比较 我们分别比较了上述几种卷积神经网络加速 器利用稀疏性的方式和并行展开方式,见表 1。 表 1 中稀疏性 A 代表激活稀疏性,稀疏性 W 代表 参数稀疏性,CSR 代表压缩稀疏行,CSC 代表压 缩稀疏列,展开方式 S、N、F 分别代表突触 (synapse)、神经元 (neuron)、特征图 (feature map)。 ·328· 智 能 系 统 学 报 第 15 卷
第2期 余成宇,等:一种高效的稀疏卷积神经网络加速器的设计与实现 ·329· 乘累加0 乘累加1 一指针回 长度 乘累加结果 索引 指针 权重 索引 乘累加2 缓存 指针[i-1] 头地址 乘累加3 缓存 乘累加15 权重 参数 旁路 激活值 全连接层计算PE 图10全连接层稀疏计算PE示意 Fig.10 Schematic diagram of sparse computing PE for FC layer 表1并行展开方式和利用稀疏性的方式比较 Table 1 Compare of parallel expansion and method of using sparsity 稀疏性加速计算A方式 W方式展开方式 展开规模 并行自由度 单位MAC额外逻辑 yeriss周 否 压缩编码 SNF KxxRxTm R* Cnvlutin例 是 压缩编码 NF T,×T×Tm T,xTe (T) Cambricon-Xo W 冷 CSR NF T,xTexTm (TxTa ElE A+W 是 多路选择 Csc Ti Tn 1 SCNNI2] A+W 是 压缩编码 CSR N*率 T,×TxxF* T,×Te (F) 本文(Conv) A 是 多路选择 SF K×K,×Tm 1 (K.xKxT) 本文(FC) A+W 多路选择 CSC Tn Tot 1 Eyeriss并没有利用稀疏性加速计算,所以系统并行自由度实际并没有影响性能。 *SCNN展开了IxF的乘法器,IxF=4×4,使用笛卡尔乘积方法完成并行展开了突触与特征图进行计算。 从表1中可知,几乎所有利用稀疏性加速卷 者之间通过多种接口互联。PS端即ARM处理器 积神经网络计算的加速器都受到了负载失衡的影 部分,我们运行了Iiux操作系统用于从文件中读 响。文献[1]系统并行自由度仅受到参数稀疏度 取权重和输入、测量时间并控制DMA(direct memory 不平衡性影响,这是因为它只对输出特征图方向 access,直接内存存取)等各个模块进程。PL端 进行了展开,然而这种并行展开是有上限的,当 即FPGA部分,我们使用HLS工具设计了共用端 展开规模大于输出特征图数量时,继续并行展开 口的卷积计算模块与全连接计算P核、可配置工 并不能提升计算性能。不考虑利用参数稀疏性的 作模式的输入网络和输出网络、非线性激活RLU 情况下,和文献[11]相比,在同样负载失衡损失 模块、极大池化模块和数据整合模块,使用SDSoC 条件下实现了K×K,倍的并行展开规模和更小的 工具完成了DMA与PL-PS交互控制设计。PS与 单位乘法器资源开销。和同样仅利用激活稀疏性 PL之间连接有4个高速的HP端口和4个中速的 加速卷积计算的文献[9]相比,本文实现了比它 GP端口用于传输数据。整体架构如图11所示。 更低的负载失衡损失和更少的单位乘法器资源开 激活输入 销。综上所述,本文提出的利用激活稀疏性加速 控制器 输人网绍 卷积神经网络计算,相比于同领域其他设计,并 AXI 端口 行效率更高、额外资源开销更小。 直接内 权重 存存取 缓存 3硬件设计与实现 片下存储 数据 输出 整合 激活 池化 输网 本文使用了具有ARM+FPGA的Zyng系列异 构计算体来设计卷积神经网络加速器。ARM 图11 系统整体架构 处理器部分被称为PS端,FPGA被称为PL端,两 Fig.11 Schematic diagram of the overall architecture
指针 缓存 指针[i] 指针[i−1] − × + 长度 头地址 权重 缓存 索引 权重 参数 索引 激活值 旁路 全连接层计算PE 乘累加结果 乘累加0 乘累加1 乘累加2 乘累加3 乘累加15 ... 图 10 全连接层稀疏计算 PE 示意 Fig. 10 Schematic diagram of sparse computing PE for FC layer 表 1 并行展开方式和利用稀疏性的方式比较 Table 1 Compare of parallel expansion and method of using sparsity 稀疏性 加速计算 A方式 W方式 展开方式 展开规模 并行自由度 单位MAC额外逻辑 Eyeriss[8] A 否 压缩编码 — SNF Kx×R×Tm R* — Cnvlutin[9] A 是 压缩编码 — NF Tr×Tc×Tm Tr×Tc (Tm) −1 Cambricon-X[10] W 是 — CSR NF Tr×Tc×Tm Tm (Tr×Tc ) −1 EIE[11] A+W 是 多路选择 CSC F Tm Tm 1 SCNN[12] A+W 是 压缩编码 CSR N** Tr×Tc×I×F** Tr×Tc (I×F) −1** 本文(Conv) A 是 多路选择 — SF Kx×Ky×Tm 1 (Kx×Ky×Tm) −1 本文(FC) A+W 是 多路选择 CSC F Tm Tm 1 *Eyeriss并没有利用稀疏性加速计算,所以系统并行自由度实际并没有影响性能。 **SCNN展开了I×F的乘法器,I×F=4×4,使用笛卡尔乘积方法完成并行展开了突触与特征图进行计算。 从表 1 中可知,几乎所有利用稀疏性加速卷 积神经网络计算的加速器都受到了负载失衡的影 响。文献 [11] 系统并行自由度仅受到参数稀疏度 不平衡性影响,这是因为它只对输出特征图方向 进行了展开,然而这种并行展开是有上限的,当 展开规模大于输出特征图数量时,继续并行展开 并不能提升计算性能。不考虑利用参数稀疏性的 情况下,和文献 [11] 相比,在同样负载失衡损失 条件下实现了 Kx×Ky 倍的并行展开规模和更小的 单位乘法器资源开销。和同样仅利用激活稀疏性 加速卷积计算的文献 [9] 相比,本文实现了比它 更低的负载失衡损失和更少的单位乘法器资源开 销。综上所述,本文提出的利用激活稀疏性加速 卷积神经网络计算,相比于同领域其他设计,并 行效率更高、额外资源开销更小。 3 硬件设计与实现 本文使用了具有 ARM+FPGA 的 Zynq 系列异 构计算体来设计卷积神经网络加速器。ARM 处理器部分被称为 PS 端,FPGA 被称为 PL 端,两 者之间通过多种接口互联。PS 端即 ARM 处理器 部分,我们运行了 linux 操作系统用于从文件中读 取权重和输入、测量时间并控制 DMA(direct memory access,直接内存存取) 等各个模块进程。PL 端 即 FPGA 部分,我们使用 HLS 工具设计了共用端 口的卷积计算模块与全连接计算 IP 核、可配置工 作模式的输入网络和输出网络、非线性激活 ReLU 模块、极大池化模块和数据整合模块,使用 SDSoC 工具完成了 DMA 与 PL-PS 交互控制设计。PS 与 PL 之间连接有 4 个高速的 HP 端口和 4 个中速的 GP 端口用于传输数据。整体架构如图 11 所示。 激活 输出 激活输入 权重 缓存 输出网络 核心 核心 核心 核心 全连接 核心 输入网络 权重 参数 直接内 存存取 控制器 片下存储 激活 池化 AXI 端口 数据 整合 图 11 系统整体架构 Fig. 11 Schematic diagram of the overall architecture 第 2 期 余成宇,等:一种高效的稀疏卷积神经网络加速器的设计与实现 ·329·
·330· 智能系统学报 第15卷 网络参数和输入图片都被存储在文件系统 如表2所示。工作频率保守的设置为100MHz, 中,在初始化时会读取到片下存储DRAM.再通 AXI总线设置为200MHz。每个卷积核心使用了 过DMA传输到卷积神经网络加速器中。在卷积 32×9=288个乘加器,75%使用DSP实现,剩余的 计算过程,ARM会控制卷积神经网络加速器按照 部分使用LUT实现,有4个这样的卷积核心;全 规定顺序,以分块乒乓操作的形式读取权重并完 连接层计算核心使用了16个乘加器,全部用DSP 成每一层网络的计算。计算完成之后ARM将卷 实现。 积神经网络加速器计算结果与计算时间通过串口 表2FPGA资源使用情况 打印输出。 Table 2 Utilization report of FPGA 平铺展开设计的卷积神经网络加速器往往被 资源种类 使用量 总量 使用率/% 认为对不同卷积层计算效率适应性不高,通过配 LUT 172629 218600 78.97 置输入网络和输出网络的方式实现了多工作模 LUTRAM 19782 70400 28.10 式,这能让卷积神经网络加速器在计算不同卷积 层时利用率更高。如图12所示,(a)代表所有核 FF 220850 437200 50.51 心共享激活输入,同时计算1组输入特征图和 BRAM 474 545 86.97 4组输出特征图,这种计算模式带宽压力最低,并 DSP 880 900 97.78 行效率最高;(b)代表核心同时计算两个输入特 征图两个输出特征图,这种计算模式适合卷积层 生成的linux内核、可执行程序、Bitstream文 输出特征图较少的情况;(c)代表所有核心计算 件最终打包,通过SD卡移植到开发板上实际测 不同的激活输入,这种计算模式适合输入特征图 试。程序中调用了SDSoC提供的高精度时钟计 通道极深的情况;(d)代表核心左右分成两组分 数接口,计算完成后会将计算结果和每层所用时 块计算,这种计算模式适合网络输入层尺寸极大 间打印到串口。 的情况。通过多核心组合多种工作模式的方法, 4性能分析评估与比较 设计的卷积神经网络加速器能够支持最高 2048通道的输入特征图以及最大1024尺寸的网 4.1加速效果与并行展开方式比较 络输入层计算。在计算VGG-16网络时,我们设 影响加速效果的最主要因素是激活输入的不 计的卷积神经网络加速器每一层卷积计算的PE 平衡。局部上,多路选择需要一个周期,如果激 利用率均为100%,没有因为适应性导致性能损失。 活输入极为稀疏也要受到一个周期的时间惩罚: 整体上,计算的整体时间取决于最长的计算时间 装价技心技心的人特 装金裤副核心度心信☆裤 输人特征图0 输出特征图! 队列,如果并行展开存在多个计算队列,负载失 的人棒征闲 编出特征图0 核心核心出特征图 给人棒征闲 衡影响加速效果。基于这两个因素,我们使用 (a) (b) TensorFlow环境,在ImageNet数据集下运行 1输入特征图-4输出特征图 2输入特征图-2输出特征图 VGG-16网络,统计了不同的并行展开方式最终 输人特征图0 给出特心 人营 核心核心 的加速效果,如图13所示。由于我们的设计单个 旋人持用闲核心核心旋人特征闲 核心内部无负载失衡损失(1FM),加速效果均比 输出特征图0 拿出特征图0 左) (c) 输出特征图0 (d) 其他的并行展开方式优秀。相比于稠密卷积计 4输入特征图-1输出特征图 分块模式 算,设计的卷积神经网络加速器理论上能加速 图12多种工作模式示意 1.92倍。 Fig.12 Schematic diagram of multiple working modes aI6IFMa4x4RxCa4IFMm1IFM⑧理论 使用了高级语言硬件设计工具链vivado HLS 和SDSoC进行FPGA上的实现。首先在vivado HLS上完成计算P核的设计与功能时序验证,再 2 修改接口,移植到SDSoC上完成IP核读写接口 Conv 1 Conv 2 Conv 3 Conv_4 Conv_5 Conv_all 与软硬件环境的设计,系统级验证测试带宽影 卷积层 响。所有功能和时序验证通过后使用vivado 图13VGG-16网络不同的并行展开方式加速效果比较 综合实现,得到实际资源报表和比特流Bitstream。 Fig.13 Comparison of acceleration effects of VGG-16 net- 我们设计的卷积神经网络加速器资源使用情况 works with different parallel expansion modes
网络参数和输入图片都被存储在文件系统 中,在初始化时会读取到片下存储 DRAM,再通 过 DMA 传输到卷积神经网络加速器中。在卷积 计算过程,ARM 会控制卷积神经网络加速器按照 规定顺序,以分块乒乓操作的形式读取权重并完 成每一层网络的计算。计算完成之后 ARM 将卷 积神经网络加速器计算结果与计算时间通过串口 打印输出。 平铺展开设计的卷积神经网络加速器往往被 认为对不同卷积层计算效率适应性不高,通过配 置输入网络和输出网络的方式实现了多工作模 式,这能让卷积神经网络加速器在计算不同卷积 层时利用率更高。如图 12 所示,(a)代表所有核 心共享激活输入,同时计算 1 组输入特征图和 4 组输出特征图,这种计算模式带宽压力最低,并 行效率最高;(b)代表核心同时计算两个输入特 征图两个输出特征图,这种计算模式适合卷积层 输出特征图较少的情况;(c)代表所有核心计算 不同的激活输入,这种计算模式适合输入特征图 通道极深的情况;(d)代表核心左右分成两组分 块计算,这种计算模式适合网络输入层尺寸极大 的情况。通过多核心组合多种工作模式的方法, 设计的卷积神经网络加速器能够支持最高 2 048 通道的输入特征图以及最大 1 024 尺寸的网 络输入层计算。在计算 VGG-16 网络时,我们设 计的卷积神经网络加速器每一层卷积计算的 PE 利用率均为 100%,没有因为适应性导致性能损失。 核心 核心 核心 核心 核心 核心 核心 核心 核心 核心 核心 核心 核心 核心 核心 核心 (a) 1输入特征图−4输出特征图 4输入特征图−1输出特征图 输入特征图0 输出特征图0 输入特征图0 输出特征图2 输入特征图0 输出特征图1 输入特征图0 输出特征图3 输入特征图0 输出特征图0 输入特征图1 输出特征图0 输入特征图0 输出特征图1 输入特征图1 输出特征图1 输入特征图0 输出特征图0 输入特征图2 输出特征图0 输入特征图1 输出特征图0 输入特征图3 输出特征图0 (c) (b) 2输入特征图−2输出特征图 (d) 分块模式 输入特征图0 (左) (左) 输出特征图0 输入特征图1 输出特征图0 输入特征图0 (右) (右) 输出特征图0 输入特征图1 输出特征图0 图 12 多种工作模式示意 Fig. 12 Schematic diagram of multiple working modes 使用了高级语言硬件设计工具链 vivado HLS 和 SDSoC 进行 FPGA 上的实现。首先在 vivado HLS 上完成计算 IP 核的设计与功能时序验证,再 修改接口,移植到 SDSoC 上完成 IP 核读写接口 与软硬件环境的设计,系统级验证测试带宽影 响。所有功能和时序验证通过后使用 vivado 综合实现,得到实际资源报表和比特流 Bitstream。 我们设计的卷积神经网络加速器资源使用情况 如表 2 所示。工作频率保守的设置为 100 MHz, AXI 总线设置为 200 MHz。每个卷积核心使用了 32×9=288 个乘加器,75% 使用 DSP 实现,剩余的 部分使用 LUT 实现,有 4 个这样的卷积核心;全 连接层计算核心使用了 16 个乘加器,全部用 DSP 实现。 表 2 FPGA 资源使用情况 Table 2 Utilization report of FPGA 资源种类 使用量 总量 使用率/% LUT 172 629 218 600 78.97 LUTRAM 19 782 70 400 28.10 FF 220 850 437 200 50.51 BRAM 474 545 86.97 DSP 880 900 97.78 生成的 linux 内核、可执行程序、Bitstream 文 件最终打包,通过 SD 卡移植到开发板上实际测 试。程序中调用了 SDSoC 提供的高精度时钟计 数接口,计算完成后会将计算结果和每层所用时 间打印到串口。 4 性能分析评估与比较 4.1 加速效果与并行展开方式比较 影响加速效果的最主要因素是激活输入的不 平衡。局部上,多路选择需要一个周期,如果激 活输入极为稀疏也要受到一个周期的时间惩罚; 整体上,计算的整体时间取决于最长的计算时间 队列,如果并行展开存在多个计算队列,负载失 衡影响加速效果。基于这两个因素,我们使用 TensorFlow 环境,在 ImageNet 数据集下运行 VGG-16 网络,统计了不同的并行展开方式最终 的加速效果,如图 13 所示。由于我们的设计单个 核心内部无负载失衡损失 (1 IFM),加速效果均比 其他的并行展开方式优秀。相比于稠密卷积计 算,设计的卷积神经网络加速器理论上能加速 1.92 倍。 0 1 2 3 4 5 Conv_1 Conv_2 Conv_3 Conv_4 Conv_5 Conv_all 加速效果 卷积层 16 IFM 4x4_RxC 4 IFM 1 IFM 理论 图 13 VGG-16 网络不同的并行展开方式加速效果比较 Fig. 13 Comparison of acceleration effects of VGG-16 networks with different parallel expansion modes ·330· 智 能 系 统 学 报 第 15 卷
第2期 余成字,等:一种高效的稀疏卷积神经网络加速器的设计与实现 ·331· 4.2系统带宽分析 况下(计算加速4倍)系统带宽情况,如图14所 卷积神经网络加速器设计的一个重要考虑因 示,图中IFM代表输入特征图读操作,OFM代表 素就是系统带宽。考虑到我们利用稀疏性加速了 输出特征图写操作,OFMDM代表输出特征图整 卷积计算,计算速度更快,系统带宽压力会比普 合操作,W代表权重读操作。 通设计的加速器的带宽压力要高。分析了极限情 OIFM带宽☑OFM带宽四OFMDM带宽目W带宽圈总带宽 3 1- 1-2 2-1 2-2 3-1 3-2 3-3 4-1 4-2 43 5-1 5.2 5.3 卷积层 图14VGG-16网络极限情况下系统带宽需求 Fig.14 Limit case system bandwidth requirements of VGG-16 network 系统带宽瓶颈来自于两个方面,我们使用的 入密度在大部分区间成正比,当理论激活输入密 DDR3内存带宽上限为读写总共4.2GB/s,对于 度靠近0.25时,受到多路选择单元瓶颈影响(从 PS与PL连接的HP端口,每个端口读带宽1.6GBs、 4路输入中选择一路),即使激活输人密度更低加 写带宽1.2GB/s。本文分配了3个HP端口用于 速效果也基本上不会增加。 权重读取,大部分情况下加速器都没有因为带宽 1.20 瓶颈影响性能,卷积计算各层带宽占用如图14 ¥1.00 所示。本文使用将激活结果量化为了NT8,并且 g080 对需要分块计算的卷积层使用多核心共享激活输 0.60 入的方式降低了带宽压力。 0.20 4.3计算时间与有效激活输入密度关系 0 0.20 0.400.600.80 1.001.20 本文测量了不同卷积层的实际有效激活输入 有效激活密度 密度和对应的计算时间,如图15所示,其中计算 图15VGG-16网络计算时间和有效激活输入密度关系 时间根据各层不加速情况进行了归一化。从 Fig.15 Relationship between computing time and effect- 图15中可以看出,加速器加速效果与有效激活输 ive activation input density of VGG-16 network 表3稀疏卷积神经网络加速器VGG-16各层计算性能 Table3 Sparse convolutional neural network accelerator VGG-16 calculation performance of each layer 层次 理论计算时间/ms稠密计算时间/ms稀疏计算时间/ms计算量/GOP稠密计算性能/GOPs稀疏计算性能/GOPs CONVI 16.81 21.52 12.82 3.87 180.00 302.13 CONV2 24.08 25.65 18.43 5.55 216.32 301.06 CONV3 40.14 44.13 25.67 9.25 209.57 360.33 CONV4 40.14 42.09 17.21 9.25 219.72 537.29 CONV5 12.04 12.52 4.15 2.77 221.68 668.72 CONV Total 133.22 145.90 78.28 30.69 210.37 392.10 FCTotal -- 7.08 0.25 34.92 Total 85.36 30.94 362.48
4.2 系统带宽分析 卷积神经网络加速器设计的一个重要考虑因 素就是系统带宽。考虑到我们利用稀疏性加速了 卷积计算,计算速度更快,系统带宽压力会比普 通设计的加速器的带宽压力要高。分析了极限情 况下 (计算加速 4 倍) 系统带宽情况,如图 14 所 示,图中 IFM 代表输入特征图读操作,OFM 代表 输出特征图写操作,OFMDM 代表输出特征图整 合操作,W 代表权重读操作。 0 1 2 3 4 1-1 1-2 2-1 2-2 3-1 3-2 3-3 4-1 4-2 4-3 5-1 5-2 5-3 带宽需求/GB·s−1 卷积层 IFM带宽 OFM带宽 OFMDM带宽 W带宽 总带宽 图 14 VGG-16 网络极限情况下系统带宽需求 Fig. 14 Limit case system bandwidth requirements of VGG-16 network 系统带宽瓶颈来自于两个方面,我们使用的 DDR3 内存带宽上限为读写总共 4.2 GB/s,对于 PS 与 PL 连接的 HP 端口,每个端口读带宽 1.6 GB/s、 写带宽 1.2 GB/s。本文分配了 3 个 HP 端口用于 权重读取,大部分情况下加速器都没有因为带宽 瓶颈影响性能,卷积计算各层带宽占用如图 14 所示。本文使用将激活结果量化为了 INT8,并且 对需要分块计算的卷积层使用多核心共享激活输 入的方式降低了带宽压力。 4.3 计算时间与有效激活输入密度关系 本文测量了不同卷积层的实际有效激活输入 密度和对应的计算时间,如图 15 所示,其中计算 时间根据各层不加速情况进行了归一化。从 图 15 中可以看出,加速器加速效果与有效激活输 入密度在大部分区间成正比,当理论激活输入密 度靠近 0.25 时,受到多路选择单元瓶颈影响 (从 4 路输入中选择一路),即使激活输入密度更低加 速效果也基本上不会增加。 1-1 1-2 2-1 2-2 3-1 3-2 3-3 4-1 4-2 4-3 5-1 5-2 5-3 0.20 0.40 0.60 0.80 1.00 1.20 0 0.20 0.40 0.60 0.80 1.00 1.20 计算时间/归一化 有效激活密度 图 15 VGG-16 网络计算时间和有效激活输入密度关系 Fig. 15 Relationship between computing time and effective activation input density of VGG-16 network 表 3 稀疏卷积神经网络加速器 VGG-16 各层计算性能 Table 3 Sparse convolutional neural network accelerator VGG-16 calculation performance of each layer 层次 理论计算时间/ms 稠密计算时间/ms 稀疏计算时间/ms 计算量/GOP 稠密计算性能/GOP/s 稀疏计算性能/GOP/s CONV1 16.81 21.52 12.82 3.87 180.00 302.13 CONV2 24.08 25.65 18.43 5.55 216.32 301.06 CONV3 40.14 44.13 25.67 9.25 209.57 360.33 CONV4 40.14 42.09 17.21 9.25 219.72 537.29 CONV5 12.04 12.52 4.15 2.77 221.68 668.72 CONV Total 133.22 145.90 78.28 30.69 210.37 392.10 FC Total — — 7.08 0.25 — 34.92 Total — — 85.36 30.94 — 362.48 第 2 期 余成宇,等:一种高效的稀疏卷积神经网络加速器的设计与实现 ·331·
·332· 智能系统学报 第15卷 表4与其他卷积神经网络加速器的VGG-16运行性能的比较 Table 4 Comparison of VGG-16 performance with other convolution neural network accelerators FPGA'16R31 FPGA'16P周 ICCAD'16251 ICCAD'161251 本设计 使用器件 Zyng XC7Z045 Stratix-V GSD8 Ultrascale KU060 Virtex690t Zyng XC7Z045 量化精度 fixed 16 bit fixed 8-16 bit fixed 16 bit fixed 16 bit fixed 8-8 bit MAC数量 780 1963 1058 2833 1152 工作频率MHz 150 120 200 150 100 Conv性能/GOP-s 187.80 136.50 310 488 392.10 FC性能/GOPs 1.20 173 170 34.92 全网络性能/GOPs 136.97 117.80 266 354 362.48 单位MAC卷积效率/% 80.26 28.97 73.25 57.42 170.18 文献25]中同时对全连接层计算了32个batch.,实际上单张图片FC性能分别为5.41和5.31GOP/s 4.4卷积神经网络加速器性能对比 能362.48G0Ps。和使用同样器件的同领域设 本文完整地测量了卷积神经网络计算时间, 计相比,本文的卷积性能提升了108.8%,整体性 并与同领域FPGA实现的卷积神经网络加速器设 能提升了164.6%,具有明显的性能优势。 计的性能作了比较。本文使用多核心组合多种工 参考文献: 作模式实现了更高的乘加器利用率,并利用稀疏 性减少了卷积计算计算量。从表3中可以看出,在 [1]RUSSAKOVSKY O.DENG Jia.SU Hao,et al.ImageNet VGG-l6网络、ImageNet数据集环境下,本文设计的 large scale visual recognition challenge[J.International 稀疏卷积神经网络加速器平均获得了392.10GOPs journal of computer vision,2014,115(3):211-252. 的卷积计算性能和362.48GOP/s的整体网络性 [2]SIMONYAN K,ZISSERMAN A.Very deep convolution- al networks for large-scale image recognition[C]//The 3rd 能。表4中显而易见的,和同领域FPGA实现的 International Conference on Learning Representations 卷积神经网络加速器相比,本文的设计单位乘加 (ICLR2015).San Diego,CA,2015. 器的卷积效率更高。与同器件实现的典型卷积神 [3]ZHANG Chen,LI Peng,SUN Guangyu,et al.Optimizing 经网络加速器相比,本文设计的稀疏卷积神经网 FPGA-based accelerator design for deep convolutional 络加速器卷积性能提升了108.8%,整体性能提升 neural networks[Cl//Proceedings of 2015 ACM/SIGDA In- 了164.6%,优势显著。 ternational Symposium on Field-programmable Gate Ar- rays.New York,NY,USA,2015. 5结束语 [4]NATALE G,BACIS M,SANTAMBROGIO M D.On how to design dataflow FPGA-based accelerators for con- 卷积层庞大的计算量以及全连接层冗余的参 volutional neural networks[C]//2017 IEEE Computer Soci- 数量为卷积神经网络硬件化实现带来了不小的挑 ety Annual Symposium on VLSI(ISVLSI).Bochum,Ger- 战。本文分析了不同的并行展开方式和利用稀疏 many,2017. 性的方式对并行效率和资源开销的影响,提出了 [5]SHEN Yongming,FERDMAN M,MILDER P.Maximiz- ing CNN accelerator efficiency through resource partition- 相比于同领域其他设计,并行效率更高、额外资 ing[C]//2017 ACM/IEEE 44th Annual International Sym- 源开销更小的能够高效利用稀疏性加速卷积神经 posium on Computer Architecture(ISCA).Toronto,ON, 网络计算的并行展开方式,兼顾了并行效率和计 Canada,2016. 算灵活度。本文设计的稀疏卷积神经网络加速器 [6]MA Yufei,CAO Yu,VRUDHULA S,et al.Optimizing 通过利用激活稀疏性和参数稀疏性的方式,降低 loop operation and dataflow in FPGA acceleration of deep 了VGG-16网络47.9%的计算量和85.23%的参数 convolutional neural networks[C]//ACM/SIGDA Interna- tional Symposium on Field-programmable Gate Arrays. 量,极大地加快了卷积神经网络计算速度。 Monterey,California,USA,2017. 本文使用Zynq XC7Z045器件实现了ImageN- [7]SHI Shaohuai,CHU Xiaowen.Speeding up convolutional et数据集下运行VGG-16网络11.7帧·s的计算 neural networks by exploiting the sparsity of rectifier 性能,平均卷积性能392.10GOPs、整体网络性 units[J].Computer vision and pattern recognition,2017,4:
4.4 卷积神经网络加速器性能对比 本文完整地测量了卷积神经网络计算时间, 并与同领域 FPGA 实现的卷积神经网络加速器设 计的性能作了比较。本文使用多核心组合多种工 作模式实现了更高的乘加器利用率,并利用稀疏 性减少了卷积计算计算量。从表 3 中可以看出,在 VGG-16 网络、ImageNet 数据集环境下,本文设计的 稀疏卷积神经网络加速器平均获得了 392.10 GOP/s 的卷积计算性能和 362.48 GOP/s 的整体网络性 能。表 4 中显而易见的,和同领域 FPGA 实现的 卷积神经网络加速器相比,本文的设计单位乘加 器的卷积效率更高。与同器件实现的典型卷积神 经网络加速器相比,本文设计的稀疏卷积神经网 络加速器卷积性能提升了 108.8%,整体性能提升 了 164.6%,优势显著。 5 结束语 卷积层庞大的计算量以及全连接层冗余的参 数量为卷积神经网络硬件化实现带来了不小的挑 战。本文分析了不同的并行展开方式和利用稀疏 性的方式对并行效率和资源开销的影响,提出了 相比于同领域其他设计,并行效率更高、额外资 源开销更小的能够高效利用稀疏性加速卷积神经 网络计算的并行展开方式,兼顾了并行效率和计 算灵活度。本文设计的稀疏卷积神经网络加速器 通过利用激活稀疏性和参数稀疏性的方式,降低 了 VGG-16 网络 47.9% 的计算量和 85.23% 的参数 量,极大地加快了卷积神经网络计算速度。 本文使用 Zynq XC7Z045 器件实现了 ImageNet 数据集下运行 VGG-16 网络 11.7 帧·s −1 的计算 性能,平均卷积性能 392.10 GOP·s−1、整体网络性 能 362.48 GOP·s−1。和使用同样器件的同领域设 计相比,本文的卷积性能提升了 108.8%,整体性 能提升了 164.6%,具有明显的性能优势。 参考文献: RUSSAKOVSKY O, DENG Jia, SU Hao, et al. ImageNet large scale visual recognition challenge[J]. International journal of computer vision, 2014, 115(3): 211–252. [1] SIMONYAN K, ZISSERMAN A. Very deep convolutional networks for large-scale image recognition[C]// The 3rd International Conference on Learning Representations (ICLR2015).San Diego, CA, 2015. [2] ZHANG Chen, LI Peng, SUN Guangyu, et al. Optimizing FPGA-based accelerator design for deep convolutional neural networks[C]//Proceedings of 2015 ACM/SIGDA International Symposium on Field-programmable Gate Arrays. New York, NY, USA, 2015. [3] NATALE G, BACIS M, SANTAMBROGIO M D. On how to design dataflow FPGA-based accelerators for convolutional neural networks[C]//2017 IEEE Computer Society Annual Symposium on VLSI (ISVLSI). Bochum, Germany, 2017. [4] SHEN Yongming, FERDMAN M, MILDER P. Maximizing CNN accelerator efficiency through resource partitioning[C]//2017 ACM/IEEE 44th Annual International Symposium on Computer Architecture (ISCA). Toronto, ON, Canada, 2016. [5] MA Yufei, CAO Yu, VRUDHULA S, et al. Optimizing loop operation and dataflow in FPGA acceleration of deep convolutional neural networks[C]//ACM/SIGDA International Symposium on Field-programmable Gate Arrays. Monterey, California, USA, 2017. [6] SHI Shaohuai, CHU Xiaowen. Speeding up convolutional neural networks by exploiting the sparsity of rectifier units[J]. Computer vision and pattern recognition, 2017, 4: [7] 表 4 与其他卷积神经网络加速器的 VGG-16 运行性能的比较 Table 4 Comparison of VGG-16 performance with other convolution neural network accelerators FPGA '16[23] FPGA '16[24] ICCAD '16[25] ICCAD '16[25] 本设计 使用器件 Zynq XC7Z045 Stratix-V GSD8 Ultrascale KU060 Virtex690t Zynq XC7Z045 量化精度 fixed 16 bit fixed 8-16 bit fixed 16 bit fixed 16 bit fixed 8-8 bit MAC数量 780 1 963 1 058 2 833 1 152 工作频率/MHz 150 120 200 150 100 Conv性能/GOP·s−1 187.80 136.50 310 488 392.10 FC性能/GOP·s−1 1.20 — 173 170 34.92 全网络性能/GOP·s−1 136.97 117.80 266 354 362.48 单位MAC卷积效率/% 80.26 28.97 73.25 57.42 170.18 *文献[25]中同时对全连接层计算了32个batch,实际上单张图片FC性能分别为5.41和5.31 GOP/s ·332· 智 能 系 统 学 报 第 15 卷