摘要—为了探索在其他商业芯片而不是GPU上训练复杂深度神经网络(DNNs)的潜力,我们报告了我们在swDNN上的工作,SWDNN是一个高效的库,用于在新宣布的世界领先的超级计算机Sunway TaihuLight上加速深度学习应用。针对SW26010处理器,我们推导出一个性能模型,指导我们确定最合适的方法,将卷积神经网络(CNNs)映射到芯片内的260个内核上。通过执行系统优化,探索主要因素,如卷积循环的组织、阻塞技术、寄存器数据通信方案以及两条指令流水线的重新排序策略,我们成功实现了卷积内核1.6倍以上的双精度性能,达到理论峰值的54%。与配备cuDNNv5的特斯拉K40m相比,swDNN在超过100种参数配置的评估中,性能提升了1.91-9.75倍。
Keywords-Deep Neural Network, Convolutional Neural Network, Deep learning, Many-core Architecture
介绍:源于20世纪80年代提出的最初概念,各种深度神经网络(DNN)已经在许多应用领域证明了它们的有效性。从自动识别图像开始,和音频,最近的技术创新进一步将领域扩展到了一些更具挑战性的领域,如电视游戏[6],围棋[7],无人驾驶汽车[8]。随着涉及更复杂场景的问题和对更高精度的需求,DNNs的复杂性和深度都在不断增加,从早期竞争对手ImageNet中的几十层到目前的数百层。参数数量和深度的增加导致了我们在训练过程中需要探索的参数空间的组合爆炸,从而要求更多的计算能力来训练更好的基于机器的智能。
DNNs日益增加的复杂性和随之而来的对计算能力日益增长的需求的一个直接结果是,在相应领域的几乎所有领先公司都越来越多地采用大规模GPU集群。虽然将一个巨大网络的训练过程扩展到具有数千个图形处理器的整个集群仍然存在算法困难,但是图形处理器上的高密度算术单元在各种DNN的训练过程中确实有很大帮助。因此,就架构而言,NVIDIA的GPU卡似乎仍然是当前市场上唯一的商业选择。尽管已经有许多替代架构展示了它们的潜力,无论是作为高知名度的研究论文(DianNao [11].DaDianNao [12], PuDianNao [13], ShiDianNao [14]),还是作为当前主导玩家的秘密武器(谷歌TPU),我们仍然没有在DNN硬件领域看到任何强大的现成竞争对手。
Sunway TaihuLight是一款超级计算机,拥有超过100 Pflops的计算能力,在世界上排名第一[15],采用了新的SW26010多核处理器。SW26010以仅300瓦的功耗提供了3.06 Tflops的最高双精度性能,使TaihuLight不仅是世界上最快的超级计算机,也是最绿色的超级计算机。除了其卓越的性能和能效之外,SW26010还引入了许多独特的功能,这些功能可能有助于DNNs的培训过程,例如管理内核和计算内核集群的片上融合,支持用户控制的256个计算内核的快速缓冲区,硬件支持的跨不同内核的寄存器通信方案,以及由四个内核组共享的统一内存空间(每个内核组包括65个内核)。为了给并行的DNN培训提供一个替代平台,并探索各种可能导致不同效率的DNN设计的体系结构特征,我们构建了这个名为swDNN的库,以加速Sunway TaihuLight上的深度学习应用程序(尤其侧重于培训部分)。我们目前的工作重点是卷积神经网络(CNN),这是在各种应用场景中使用最广泛的DNN之一,并将在稍后阶段扩展到其他形式的DNN。我们在这项工作中的主要贡献包括:
1)基于对DNN算法和SW26010体系结构的分析,我们导出了一个性能模型,该模型不仅展示了可能提高或限制最终性能的主要因素,还指导我们针对不同的问题场景将算法映射到体系结构的一些最合适的映射;
2)定制的寄存器通信方案,其目标是最大化卷积核中的数据重用,这将存储器带宽需求降低了几乎一个数量级,并将性能推向下一个水平;
3)精心设计最合适的指令流水线,通过最大化内存操作指令和计算指令的重叠来减少计算单元的空闲时间,从而最大化SW26010的整体训练性能。
经过对SW26010所有这些独特硬件特性的系统探索,我们优化的swDNN框架在当前阶段可以为卷积内核提供超过1.6 Tflops的双精度性能,达到理论峰值的50%以上。通过仔细利用SW26010s架构特性和系统优化过程实现的显著性能改进表明,这些独特的特性和相应的优化方案是未来DNN架构以及DNN特定编译工具的潜在候选。我们的源代码可在[16]获得。
相关工作:训练深度神经网络通常需要大量的计算资源,并且非常耗时耗力。学术界和工业界的研究人员已经做出了许多努力,以基于高性能计算平台(例如具有GPU、FPGAs甚至定制ASICs等异构加速器的平台)来加速从核心计算内核到整个培训过程的培训任务。图形处理器目前在高性能计算平台的DNN培训竞争中占据主导地位。NVIDIA cuDNN [9]库为深度学习工作负载提供了灵活的API,并巧妙地集成到广泛使用的深度学习框架中,如Caffe [17]、Tensorflow [18]等。其他作品如maxDNN [19],Caffe con Troll (CcT) [20],fbfft [21]和Winograd的最小滤波算法[22]为CNN专注于特定GPU架构或特定算法设计,在某些情况下可以获得更好的性能。基于FPGA的加速器也可以提供高性能和高能效的解决方案。工作于[23],[24]提出了卷积核的优化设计,用单个FPGA实现了可观的性能。为了探索高性能,在[25]和[26]中工作,将设计扩展到多FPGA平台。然而,即使可以实现更高的功率效率,FPGAs的整体性能也受到硬件计算资源总量的限制。除了通用可编程加速器之外,用于机器学习和深度学习算法的定制专用集成电路是另一个研究热点,在分类和训练任务上表现出诱人的性能和能效。dianao[11]强调了内存、性能和能量的影响,为大规模CNN和DNN设计了加速器,在低功耗的小区域内实现了452 GOPS的吞吐量。dadianao[12]介绍了一种用于机器学习的多芯片架构,比单个GPU快460.65倍。除了深度神经网络之外,普迪安瑙[13]还采用了其他六种有代表性的机器学习技术。专注于视觉识别,加速ShiDianNao[14]性能比高端GPU快30倍。
虽然我们认为基于FPGA和定制专用集成电路的DNN解决方案在性能和能效方面都有很大的潜力,但GPU仍然是唯一一个提供万亿次/芯片级培训性能的商业选择。**为了研究在其他现成的众核芯片上运行和训练神经元网络的性能潜力,在这项工作中,我们探索了在新发布的SW26010处理器上支持DNN应用程序(特别关注神经元网络)的可能性。在一个简洁的性能模型的指导下,我们设法识别出最合适的循环组织、数据项块和两条指令流水线的顺序,卷积核的性能达到1.6倍精度。**结果证明了SW26010执行DNN相关计算的强大能力,以及SW26010独特的架构特性带来的优势。
III. M APPING CNN TO SW26010: A P ERFORMANCE MODEL:
core groups(CGs)、management processing element(MPE)、computing processor element(CPEs)
神经网络通常包含多个计算层,这些层可以根据其不同的功能分为提取器和分类器。提取器层,如卷积层和子采样层,将高维输入图像过滤成各种特征。分类器层,例如完全连接的人工神经网络和SVM,使用这些低维特征来决定输入图像所属的类别,或者计算每个可能类别的可能性。在神经网络中,利用大数据对连通权值和滤波器进行训练,对训练好的网络进行前向处理,得到对新数据的识别结果。因此,由于其计算需求大,训练是更适合超级计算机的场景。
为方便陈述,表一中收集了卷积层的相应参数,输入为大小为Ci×Ri的Ni的images,输出包含大小为Co×Ro的No 的images。对于每幅输入图像和每幅输出图像,它们通过一个Kc× Kr 大小的卷积滤波器 W 相连。卷积层的伪代码可以写成清单1所示。在大多数神经网络中,卷积算子占用了大部分计算时间(超过90%)。本文将重点讨论卷积算子的实现。
B. The SW26010 Many-Core Processor:
core groups(CGs)、 Computing Processor Element (CPEs)、management processing element (MPE)
如上所述,Sunway TaihuLight的世界领先性能和效率主要是由中国国产SW26010多核处理器实现的[15]。如图1所示,每个处理器由四个核心组组成。每个核心组包括65个核心: management processing element (MPE)一个管理处理元件(MPE)和64个计算处理器元件(CPE)Computing Processor Element (CPEs),组成一个8×8网格。MPE和CPE都是完整的64位RISC内核,但在计算过程中发挥不同的作用。**MPE支持完整的中断功能、内存管理、超标量和无序发布/执行,擅长处理管理、任务调度和数据通信。CPE旨在最大化聚合计算吞吐量,同时最小化微体系结构的复杂性。**先看看架构图:
每个CG都通过内存控制器(MC)连接到自己的8GB DDR3内存,由MPE和CPE网格共享。片上网络通过系统接口连接四个计算单元。四个*处理器的存储器也通过NoC连接。用户可以明确设置每个CG的私有内存空间的大小,以及四个CG之间共享的内存空间的大小。与其他多核或众核处理器相比,SW26010的设计展示了许多不同的功能:(1)在内存层次结构方面,MPE采用了更传统的缓存层次结构(32kb的L1指令缓存、32kb的L1数据缓存和256 KB的L2指令和数据缓存),每个CPE仅提供16kb的L1指令缓存,并依赖64KB的本地指令内存(LDM)(也称为暂存内存(SPM))作为用户控制的快速缓冲区。这种用户控制的“高速缓存”虽然增加了高效利用快速缓冲区的编程挑战,但提供了实现定制缓冲方案的选项,在某些情况下可以显著提高整体性能。(二)在每个CPE网格内,我们有一个控制网络、一个数据传输网络(将CPE连接到内存接口)、8条列通信总线和8条行通信总线。8列和8行通信总线支持8×8 CPE网格上的快速寄存器通信通道,在CPE级别提供了重要的数据共享能力。(三)每个*处理器包括两条用于指令解码、发布和执行的流水线(P0和P1)。P0用于浮点运算,以及浮点和整数向量运算。P1负责记忆相关的操作。P0和P1都支持整数标量运算。因此,识别指令级并行的正确形式可以潜在地解决指令序列中的依赖性,并进一步提高计算吞吐量。
C. The challenges for mapping CNN to SW26010:
根据基本卷积的定义,实现多通道卷积运算主要有两种方法。一种是基于空间域的方法,该方法直接将输入图像像素值与相应的滤波器元件的乘积相加,以获得输出像素值[22]。此外,通过将卷积降低到矩阵乘法[9],[19],求和操作可以组织成一般矩阵乘法(GEMM)。另一种是基于频域的方法,在用快速傅立叶变换算子将输入图像和滤波器核从空间域变换到频域后,可以用点积运算来完成[21]。由于基于频域的方法中使用的快速傅立叶变换对内存带宽有更高的要求,并且涉及来自不同处理线程的全局通信,因此基于空间域的方法似乎更适合SW26010多核架构。因此,在这项工作中,我们设计了基于空间域方法的中枢神经系统卷积运算的内存访问和计算模式。
根据以上对算法和架构的分析,我们可以确定以下可能限制CNN在SW26010上性能的主要因素:
(1)相对较低的内存带宽,尤其是与高计算性能相比。DDR3内存接口为每个CG (64个CPU)提供36 GB/s的峰值带宽,整个处理器的总带宽为144 GB/s。NVIDIA K80 GPU,类似的双精度性能为2.91 Tflops,对应的总带宽有480GB/s。相比之下,SW26010的内存带宽几乎无法匹配3.06 Tflops的双精度性能,并且很容易陷入内存受限的情况。虽然每个CPE的LDM为手动缓存优化提供了一个选项,但DDR3接口通常需要对齐的内存访问模式(以128字节的块为单位)来实现接近最佳的带宽。因此,尽管CNN通常被认为是计算密集型内核,但我们仍然需要一个谨慎的内存访问方案来缓解内存带宽限制。
(二)CNN的算法涉及输入、滤波器内核和输出之间的所有连接。因此,并行CNN设计通常需要不同处理元件之间频繁的数据通信。然而,在SW26010中,CPE没有用于如此频繁的数据通信的共享缓冲区。因此,我们必须依靠基于CPE网格中行和列通信总线的细粒度数据共享方案。
D. Performance model:
requirement memory bandwidth (denoted as RBW) \ (REG-LDM-MEM) \
measured memory bandwidth (denoted as MBW)
基于以上对CNN算法和Sunway处理器架构的分析,我们可以很容易地看到,在我们识别CNN到SW26010的最佳映射的过程中,内存带宽成为主要限制。为了进一步量化存储器层次结构不同层次的限制因素,我们导出了三级(寄存器(REG)、本地数据存储器(LDM)、存储器(MEM))性能模型,以指导我们在众核架构中设计卷积实现的最合适方式,如图2所示。在不同的场景中,CPE网格可以直接从全局内存或者从三级(REG-LDM-MEM)内存层次访问数据项。在这两种情况下,我们通过屋顶模型[27]来估计支持每个重心的峰值浮点吞吐量所需的最小内存带宽(表示为RBW)。因为在卷积运算中,计算量随着输入数据的平方而增加,所以实际的计算性能可以基于不同级别的RBW和实际测量的存储器带宽(表示为M BW)之间的比率的平方来估计。如果RBW小于相应级别的测量的带宽,则内存带宽不再是性能界限。
在第一种情况下,CPE网格可以通过使用gload指令直接访问来自MEM的数据项(在图2的中间列中估计性能)。**这种直接内存访问模式没有利用任何可能的数据共享.因此在这种情况下需要最大带宽RBWdirectM EM= 139.20 GB/s。此外,gload的实际接口仅提供8 GB/s的物理带宽,导致浮点计算能力的利用率极低(8/139.2)2=0.32%)。**在第二种情况下,CPE网格通过MEM-LDM-REG层次结构(在图2的右栏中估计的性能)访问数据项,即我们首先应用直接存储器存取操作来将数据加载到LDM,然后执行加载和存储指令来将数据移动到寄存器文件中,以便随后进行计算。通过对LDM和寄存器进行额外的两级控制,我们可以实现有效的数据共享,从而减少我们需要从全局内存中进行的实际数据访问。同样,在每一层,我们估计支持计算最大吞吐量所需的带宽,并将所需带宽与实际提供的物理带宽进行比较,从而得出CNN内核的估计性能。在这两种情况下,我们还引入了执行效率(EE)的概念,以解决CPE没有提供最大水平的浮点吞吐量的情况(由于浮点操作流水线停滞或流水线被非计算指令和非矢量化操作占用)。
全局内存和LDM内存之间的MBW mem→ldm不是一个常量值,而是一个连续内存访问块大小的变量。测量了有效的DMA带宽的值,如下表所示:
我们可以看到,DMA加载和存储的有效带宽在4 GB/s到36 GB/s之间。一般来说,当使用大于256字节并以128字节对齐的块时,可以获得更高的带宽。因此,在设计卷积运算时,我们应该安排数据布局的前导块大小来满足这些约束。就是说使用对应的数据填充的方式让每次输入的数据满足当前的内存的大小限制的值,让对应的内存带宽的值达到最快。
需要考虑的另一个设计问题是如何在四个CGs之间扩展培训过程。通过支持在一个SW26010中跨四个CGs的私有内存空间和共享内存空间之间进行分区,我们可以将输出图像沿行划分为四个部分,并分配每个CG处理四分之一的输出图像。我们的实验表明,这种分区方案通常可以在一个处理器中的四个计算单元之间实现近似线性的缩放。
LDM相关的优化:
因为直接访问的方式的内存带宽很低,然后使用三层的访问方式来提高对应的访问速度。如第三节所述,当使用这种内存访问模式时,应首先使用直接内存存取请求将数据显式加载到LDM。即在访问之前需要首先将之前的数据优先放到对应的LDM之中来之后在进行处理。
采用LDM分块策略将输入/输出图像和滤波器核分割成更小的块。这种分块策略有助于将卷积数据保存在快速缓冲区中,以供将来数据重用。如List 1所示,卷积的一个简单实现是7个循环(B,Ni,No,Kr,Kc,Co,Ro)。循环调度和循环阻塞可以应用于这7个循环。以下见解将引导我们走向更高效的设计。