网站首页

产品中心

智能终端处理器 智能云服务器 软件开发环境

新闻中心

关于星空体育

公司概况 核心优势 核心团队 发展历程

联系星空体育

官方微信 官方微博
主页 > 新闻中心

AI星空体育专用芯片

发布时间:2024-04-27 14:27浏览次数: 来源于:网络

  当前人工智能(AI)计算主要是指以深度学习为代表的神经网络算法为主,传统的CPU、GPU都可以用来做AI算法的运算,但其并不是针对深度学习特性设计和优化的,所以在速度和性能上都无法完全适配AI算法特性,通常来说,AI芯片指的是针对人工智能算法特性做特殊设计的ASIC(专用芯片)。

  当前深度学习算法在图像识别、语音识别、自然语言处理等领域都有非常广泛的应用,常见的深度学习网络包括CNN,RNN以及Transformer等,他们本质上都是大量矩阵或向量的乘法、加法的组合。比如主流的图像目标检测算法YOLO-V3,其主要由大量的卷积、残差、全连接等类型的计算组成,其本质是大量的乘法和加法操作。以运算神经网络算法为代表的AI专用芯片,需要硬件具有高效的线性代数运算能力,其特点为:单个任务简单、并行运算量大、数据读写操作量大,逻辑控制要求低星空体育等。所以其对芯片的并行运算、片上存储、高带宽、低延时等有更高的要求。

  当前GPU是较为成熟的用于深度学习训练和推理的芯片之一,谷歌、 微软和百度等公司都在使用GPU做深度学习相关的模型训练和推理计算。GPU提供了高效并行计算的能力,且核心数非常多,可以支撑大量数据的并行计算,NVIDIA还开发了专用加速库cuDNN和推理工具TensorRT以加速深度学习在GPU上计算效率。尽管GPU在深度学习中有非常广泛的应用,但由于GPU设计初衷并非专门针对深度学习,而是为图形计算设计的,因而其在性能和功耗等方面也存在一定的局限性:一是GPU注重的是低维数据结构,对深度学习的高维数据处理相对低效;二是图形计算需要较高的精度,而深度学习推理则可以在更低的精度下有效运行;三是GPU数据放在外部存储上,使用共享存储进行核心间通讯,这会造成带宽和延迟的瓶颈。ASIC则可以更有针对性地进行硬件设计和优化,所以为了获得更好的性能和功耗比,在深度学习算法稳定后,往往还需要采用全定制化人工智能芯片在性能、功耗和面积等指标上做进一步的优化。

  设计和部署一款专用芯片需要平衡各种指标,不同的场景下关注的指标不一样,其芯片设计的思路也会存在差异,常见的芯片设计指标包括:

  从计算能力上看,芯片中参与计算的内核数量越多对数据传输的带宽要求越高,以GPU为例,其中包含几百到几千个计算Core,当这些Core同时读写数据时对数据带宽的占用是相当高的。其次,从计算粒度上看,只有当峰值计算能力小于等于最大带宽时,才能达到最佳的计算效率,虽然片上存储能提供极高的带宽和读写性能,但其会占用有限的芯片面积,所以需要在性能和带宽上进行平衡。再次,从通用性上看,可编程能力越强,能使用的应用场景越多,但为了兼容更多的应用,则在架构设计上会存在一定的平衡和冗余,这往往会导致其在单一任务中的性能存在一定程度的下降,所以需要在定制化实现极致产品性能和软件可编程扩大场景范围上进行平衡。

  深度神经网络包含大量的网络层,每一层的又包含大量的参数以及中间特征数据,数据访问量和计算量都很大。例如,卷积层包含大量多维卷积核,在计算上滑窗式的卷积运算使得卷积核参数需要多次重复参与运算,由于卷积核参数量一般要远大于缓存的容量,所以大多时候参数需要反复从主存中访问。比如,早期AlexNet拥有6000万参数量,最新的基于Transformer架构的ChatGPT则达到了1750亿参数量,如此巨大的参数量不仅需要占用巨大的存储空间,如何进行高效运算对访存带宽、内存管理以及计算都有很高要求。

  通常在芯片设计中可以通过增加计算核心的数量来提高系统的并行度,当并行度提高后,数据的读写就会成为瓶颈,即遇到“内存墙”。内存访问可以通过以下几个方面来解决:

  由于深度学习前一层计算结果在下一层计算会被接着用上,模型参数在不同时钟周期中也反复使用。第一种方案通过增加片上存储减少了数据被重复写回和加载的开销。第二种方案直接把复用的数据放在片上Buffer实现数据复用,复用方式和粒度更加精细可控。第三种方案则是让前一周期计算的结果流动到其他计算核心上,在下一周期不用发生访存操作的情况下就可以直接参与计算,Google TPU采用的脉动阵列和流行的DataFlow数据流架构,都是采用的这一思路设计的。

  深度学习由于参数量过于庞大,而片上存储空间有限无法全部存储,绝大部分数据被存放在主存中,这必然会造成频繁的存储器访问,大多数深度学习任务中数据访存造成的功耗要高于计算造成的功耗,其中,最靠近计算单元的寄存器功耗最小,而最远的片外DRAM的功耗则其的200倍。所以如何让数据尽可能多地在片上存储中停留和复用可以有效减少数据访存的功耗,但片上存储又受到成本和面积的约束,不可能无限的增大,如何解决大规模数据访存带来的功耗问题是低功耗AI芯片需要重点解决难点。

  稀疏性(Sparsity),是指深度学习网络模型具有非常大的参数和特征容量,在计算中包含大量对0的乘法和加法的操作。在计算中0乘上任何数都是0,0加上任何数都是原来的数,对0参与的乘加过程如果可以不使用计算单元直接输出结果0,这样可以节省运算产生的功耗,如果可以不需要到内存读写数据,则可以减少了数据搬移的开销。

  在深度学习中稀疏化主要包括两种:模型稀疏和短暂稀疏。模型稀疏与模型参数有关,一方面模型参数中本身包含大量0或者非常小的值,另一方面在训练的过程中增加一些正则化和门控函数(gating functions)增加模型参数的稀疏化。短暂稀疏与模型的运算过程有关,它与输入数据和模型参数都有关,比如Dropout和ReLU等算子的输出数据就是高度稀疏的数据。统计表明,AlexNet、VGG、ResNet等经典网络的稀疏性可以达到 90%左右,如果能有效利用网络的稀疏性可以显著提高网络的运算效率。

  由于神经网络本身具有一定的冗余性,在经过精心的设计和调优后,低精度的神经网络也可以实现整体准确率不变或者只有很小的准确率损失,而使用低精度计算则可以极大地减少计算和存储负担并降低功耗。实验表明,使用16位浮点乘法和32位浮点加法在AlexNet、VGG、ResNet等网络上进行训练的精度损失可以忽略不计,使用8位定点乘法和16位定点加法进行推理,精度损失几乎没有。

  低精度计算已经成为AI芯片的一个趋势,尤其在推理芯片中更加明显。低精度计算不仅需要在算法上能够实现低精度训练和模型量化,还需要在指令架构设计和硬件计算单元上能够支持低精度运算,它是一个软硬件结合的整体解决方案。随着AI对低功耗和高性能需求不断提高,神经网络也从32bit浮点运算逐步向16bit、8bit、4bit 甚至二值化网络等多种低精度运算扩展。

  当前深度学习网络层数越来越深、网络层更加丰富、拓扑结构也更加复杂。神经网络深度已经从早前的VGG十几层网络发展到ResNet的几百层,甚至上千层的网络,不仅包含卷积层、深度可分离卷积、全连接层、循环层、上下采样、尺度变换以及激活函数层等大量不同功能的网络层,还包括残差连接、长短记忆网络、Transformer等复杂的多层连接拓扑结构。由于不同网络层的计算和访存特性都存在较大的差异,因而与之匹配的最佳硬件架构也存在较大的不同,例如,针对卷积网络特性设计的硬件在运行长短记忆网络(Long Short-Term Memory, LSTM)时只能发挥其不到20%的性能。

  AI专用芯片的性能跟通用性是一个相互平衡的过程,一个芯片在某些特定网络结构上的性能越强、功耗越低,那么它往往就越不灵活、通用性越差。例如,Google TPU可以轻松做到远高于GPU的性能和能效比,但这是以牺牲芯片的可编程性和通用性为代价的。目前在语音、文字、图像、视频等不同应用场景下使用的网络架构还无法做到完全统一,在同一领域下的不用场景和任务上深度学习的网络也存在一定的差异,新的深度学习算法和网络结构还在不断的演变中,可能AI芯片还未投产上市,当前的网络架构已经淘汰,被其他更优的网络架构替代了。

  目前AI芯片企业采用的技术方案和策略各不相同,一类最激进的企业,采用算法固化方案,这一做法芯片研发周期最短、单一算法的性能与功耗比可以做到极致,但其限制了芯片的通用性和灵活性,比如第一代Google TPU;一类是升级现有可编程处理器,使其在性能与芯片通用性上达到较好的平衡,成本也相对可控,目前这一类中GPU依然是主流。还有一类是设计全新的芯片架构,这一做法能够在性能与通用性上达到更好的平衡,但芯片研发投入成本大且需要较长的研发周期,比如寒武纪NPU和Google TPU。

  当前AI芯片的发展还处于初级阶段,市场上主要以定制化的专用AI芯片和具备一定的灵活性的弱编程AI芯片为主,随着算法和芯片制造工艺的不断发展和完善,支持潜在的新网络架构特性且具备足够弹性和拓展性的AI高性能芯片会逐渐到来。参考GPU的发展历史,早期的GPU是专门用来做图形加速计算的,由于生产工艺和制程的限制,必须采用定制化的专用硬件设计方案才能满足图形渲染对性能和功耗的要求。随着图像加速行业的发展和算法的快速迭代更新,以及芯片生成工艺的提升,逐渐出现了具有弱编程特性的GPGPU,再到后来的CUDA使得GPU具备了更强的可编程能力并极大的拓展其应用领域,使GPU不仅能加速视频渲染、还能做科学分析、天文计算和AI加速等更通用的并行计算任务。

  AI芯片最简单直接设计思路就是将神经元直接映射到硬件芯片上,如图所示,全硬件实现方案(Full-Hardware Implementation)将每个神经元映射为一个逻辑计算单元,每个突触映射为一个数据存储单元,这种架构设计可以实现一个高性能且低功耗的AI芯片,比如Intel ETANN芯片。在全硬件实现方案中上一层输出数据和权重相乘,相乘的结果再相加,然后再经过一个激活函数输出到下一层计算。这种架构设计将计算和存储紧密的耦合在一起,使得芯片在进行高速计算的同时由能避免大规模的数据访存,在提高整体计算性能的同时也降低了功耗。

  全硬件实现方案具有设计简单、计算性能高、功耗低等特定,但它仅适用于小规模的神经网络计算,对于大型神经网络的计算存在明显的硬件限制。如图所示,当网络层的节点为16 x 16时,芯片面积只需要0.71mm^{2},但当网络层的节点为32 x 32时,芯片面积则需要2.66mm^{2},当网络层包含的节点进一步增大时所需要的芯片面积和能耗将大幅提升,所以直接映射方案已经不能满足当前规模越来越大的深度学习算法发展。

  ASIC芯片的设计基本都是针对领域计算特性,围绕访存、能耗、吞吐率、成本、灵活性等指标进行优化和设计。随着深度学习算法发展,神经网络深度和规模越来越大,网络结构也从CNN为主的网络架构设计逐渐演变到Transformer为主的网络架构设计,算法对芯片需求也从计算密集性过度到存算密集性,AI芯片的设计也从偏计算走向存算一体的混合计算模式。具体体现在:

  时域计算指采用定制化指令集的专用处理器,其通过指令流水线对逻辑计算单元(Arithmetic Logic Unit, ALU)和存储系统进行统一管理和调度,ALU流水线从存储系统中读取数据,经过多级流水线处理后将最终运算结果写回存储系统。深度学习神经网络模型主要是大量的线性代数运算,而控制流程则相对简单,所以,AI芯片通常采用高度并行的计算架构设计,为了提高处理器并行计算能力,需要让一条指令同时针对多个数据元素执行相同的操作。基于深度学习的计算流程相对固定的特点,多个固定步骤的计算可以通过多个ALU流水线设计来实现高效计算,比如矩阵运算中的多数据乘累加计算。

  中国科学院计算技术研究所的DianNao系列架构设计是一种典型的时域计算架构设计。DianNao系列的芯片主要包含三部分:神经功能单元(Neural Functional Unit, NFU)、三个不同功能片上存储区和控制器。NFU和存储通过控制器的指令进行调度,运算核心NFU按照卷积运算流程划分为乘法功能段NFU1、加法功能段NFU2以及非线性激活函数功能段NFU3的三级流水线设计。DianNao针对深度学习的计算特性进行定制设计,使其在AI计算上能够获得比通用处理器更高的能效。

  与时域计算不同,空域计算中每个计算单元PE都具有独立的控制单元和存储单元。空域计算架构通常由一维或二维PE阵列构成,每个PE内部自带控制器和缓存,PE之间可以直接传递数据。除此之外,还有片上全局缓存、片外DRAM等不同层次存储构成的多级存储系统。空域计算架构利用大量PE阵列完成高效的并行计算,通过PE之间的数据流动减少处理器与主存之间的通信次数。

  Google TPU (Tensor Processing Unit)是空域计算架构的典型代表之一,它包含一个256x256个MAC组成二维矩阵乘法阵列,此外其内部还集成了归一化/池化单元和非线性激活单元等。TPU的二维矩阵乘法阵列按照脉动阵列(Systolic Array)方式互连,PE计算的数据来自前一个时钟周期中相邻PE的计算结果,PE在当前时钟周期计算得到的结果则按同样的方式流入相邻的PE在下一个时钟周期参与计算,由于数据在阵列中不同PE之间的流动像血液在血管中脉动传输一样按照规定的节奏进行传递和计算,所以称之为脉动阵列架构。

  数据复用指在计算过程中对同一数据进行重复使用以减少对存储器访问次数。深度学习中的数据复用通常包括:输入数据复用、输出数据复用和权重数据复用。例如,在DianNao架构中SB和NBin分别用来存储权重和数据神经元数据,NFU单元用来进行点乘和累加的运算,输出数据存储在NBout中,在计算过程中输出数据会先输出到缓存器中直到完成所有的部分和的累加后才会被写回。

  通过增加片上存储容量让数据更靠近计算单元,减少数据在计算单元和内存之间的搬运成本。

  使用高密度片上存储技术,例如eDRAM存储单元由晶体管和电容构成,相比于SRAM具有更高的存储密度。

  使用三维集成(3D Integration)存储器技术将多块存储器在垂直方向上堆叠起来,以获得更大存储容量。

  直接在存储器内部实现计算,即存内计算,目前受限制造工艺和计算精度等问题,其应用范围还比较有限。

  DianNao是AI芯片设计中开创性研究,是为了实现处理大规模深度学习网络运算而设计的专用芯片。如图所示,芯片采用彼此分离的模块化设计,主要包含控制模块(Control Processor, CP)、计算模块(Neural Functional Unit, NFU)和片上存储模块三部分。其中,片上存储模块又分为用于存储输入数据的NBin、用于存储输出数据的NBout以及用于存储神经网络模型权重参数的SB,这三块存储均为片上存储,以实现低延时和低功耗。

  目前深度学习网络参数量都非常的大,片上缓存区容量大小一般都远小于参数量,无法将整个网络的参数全部放入片上存储。所以DianNao架构设计采用了分时复用方法,每次只加载和执行网络一部分,模型参数会分批次的加载到SB中,每个网络层的输入数据也会分批次的加载到NBin中,每层计算结果则写入到NBout中。NFU (Neural Functional Unit)是由三级流水线组成计算单元,主要负责完成神经网络的核心计算逻辑,比如乘法操作、加法操作和非线性函数变换等。

  拆分成不同的模块的设计可以在功耗和性能上找到更佳的设计平衡点,其中,输入存储(NBin),权值存储(SB),输出存储(NBout)各自单独实现,一方面可以根据不同数据访问特性设置不同传输带宽,另一方面还可以实现类似Cache的功能,即处理器在对当前一组数据进行计算的同时,可以通过DMA启动下一组数据或参数的加载。如图所示,每个存储单元配备有一个DMA和一个指令缓存FIFO,通过将计算过程和数据传输过程解耦实现数据高效预取,只要前一条指令使用完了数据,后一条指令就可以开始数据传输,而不需要等待前一条指令的计算完成。

  计算单元NFU包括三个阶段并以流水线形式执行,是神经网络的核心计算模块。NFU-1是一个16x16的并行乘法单元,即一个周期可以同时执行256个乘法操作,NFU-2包含16个加法树,每个加法数包含15个加法器,加法器按照8-4-2-1的结构排列,NFU-3包含16个激活函数单元。从整体看,NFU的所有资源被划分成16份,NFU-1中每一份包含16个乘法器,同时执行得到16个乘法结果,然后送入NFU-2中加法树,每个加法树中先由8个加法器对16个数执行加法操作得到8个结果,再依此由4-2-1个加法器对前面的结果进行加法操作,最终得到一个累加的结果之后再送入NFU-3的激活单元进行计算。

  DaDianNao针对主流神经网络模型提出了一种可以承载较大尺寸模型的芯片架构,主要针对服务器端的AI高性能训练和推理计算任务。DianNao架构虽然在性能和功耗上相比CPU取得了比较明显的改善,但其也存在一些问题和限制。DianNao主要通过三个片上buffer (NBin, SB, NBout)进行数据进行分块处理,将不同类型的数据块存放在不同的片上存储中,其可以根据不同类型数据特性和复用进行针对性优化,使芯片与主存之间的数据搬运次数和效率达到最优,进而实现提高芯片整体性能和降低功耗的目的。DaDianNao则是为了处理大规模神经网络模型而设计的AI芯片架构,其采用了基于tile和node的多芯片组设计来解决大模型的参数在芯片和内存通讯而带来带宽和功耗的问题。

  如图所示,每个tile包含一个NFU,四个eDRAM Bank和一个与中央eDRAM相连接的I/O接口,模型参数存放在离NFU更近的eDRAM存储区域中,输入输出数据则需要通过访存操作完成数据加载。tile使用eDRAM代替SRAM存储模型参数,使其在存储密度、访存延迟和功耗之间针对大模型的资源需求上得到了更好的平衡。

  当模型的参数远远大于输入/输出数据时,将大尺寸模型参数布署在离计算部件更近的eDRAM中,以减少计算过程中的访存延时,而将尺寸较小的输入/输出通过访存操作进行加载、可以减少有效访存开销,将SB拆分放置以减少数据访问冲突,进一步减少访存延迟。

  DaDianNao的NFU相比于DianNao更复杂,并增加了针对模型训练而设计的功能模块。改进后的NFU计算单元如图所示,在每个tile中计算的中间值会放在tile的本地eDRAM中,计算完毕后再将其输出。

  在多芯片组中一个芯片为一个node,如图所示,一个node包含16个tile和两个中央的eDRAM Bank,他们之间通过Fat-tree相互连接。这两个中央eDRAM存储区一个用于将输入数据广播到每个tile,一个用于收集所有tile的输出结果。

  在多芯片系统中,每个芯片的四周集成了四组HyperTransport 2.0的通信通道,用于芯片与四周的芯片相连组成一个多芯片系统。相比与DianNao,在实现相同算力的条件下,其芯片面积减少了28.5%,将参数储存在片上的eDRAM中降低了片外访存的带宽需求,参数存储单元放在离NFU更近区域,并进行分块存放,不仅减少了数据访问的冲突也提高了数据传输速度。

  ShiDianNao是基于CNN模型实时采集图像进行计算处理的专用AI处理器,芯片与图像传感器直接相连接,图像数据不需要经过DRAM存储器就可直接输入到芯片的处理单元进行处理。如图所示,ShiDianNao中的存储部件与DianNao类似,分为NBin、NBout和SB,分别用于存储神经网络的输入数据、输出数据和权重参数。运算单元包括神经网络专用计算单元NFU和通用逻辑运算单元ALU。ShiDianNao在存储单元和计算单元中间引入了一个缓存区域Buffer Controller,用于缓存输入数据和汇总NFU的计算结果以提高处理器的并行度。

  ShiDianNao中的NFU由Px*Py的二维PE (Processing Elements)阵列组成,支持数据在PE之间流动,NFU读取参数和输入数据后分发给不同PE处理,之后NFU会收集汇总处理后的结果,计算结果会输出给一个ALU单元,ALU里包含了一些非线性激活函数的硬件实现,ALU的计算结果再通过Buffer Controller最终写入到NBout里。

  每个PE单元还有内部的存储结构,以支持PE之间的数据传输。如图所示,每个PE内部由一个乘法器、一个加法器、若干个寄存器、两组用于数据交互的FIFO等部件组成,其中FIFO-H用于存储水平方向数据,FIFO-V用于存储竖直方向数据。每个PE有三个输入接口,一个是用于接收控制信号operand,一个用于接收权重参数Kernel,还有一个用于接收输入数据,其来源可能是右边PE的输出、下边PE的输出或者NBin。每个PE有两个输出,一个用于将计算结果写到NBout,另一个则用于传输给邻居PE以实现不同PE之间的数据传输。由于卷积运算的相邻滑动窗口之间有着大量的重复数据,通过FIFO-H和FIFO-V两个模块接收相邻PE的数据,实现PE间数据传输和复用,可以极大的减少存储带宽的需求,Kernel数据以广播的形式发送到每个PE参与计算。

  PuDianNao在分析了各类机器学习算法在访存行为、计算模式上的差异后从更细粒度的数据重用和计算操作上进行了重新设计,使其能能够支持包括KNN、DNN、SVM、Classification Tree等七种经典机器学习算法的AI处理器。

  Cambricon-X主要是针对于神经网络中的稀疏性的特点,进行设计的芯片架构。神经网络中的稀疏性主要分为两种,一种是权重参数的稀疏化,另一种是特征向量的稀疏化。Cambricon-X实现的是权重的稀疏化在硬件实现上的支持,特征向量稀疏化由于随输入数据动态变化,使得其管理和控制的逻辑更为复杂,所以Cambricon-X在硬件上没有这一方面进行支持。

  神经网络中的稀疏性一方面可以通过稀疏化训练(比如在训练过程中增加正则化和门控函数等)增加模型参数的稀疏性,另一方面还可以通过剪枝算法进一步提升模型的稀疏性。韩松等人的研究证明,通过剪枝技术可以在基本不影响模型计算精度的情况下将深度学习网络模型权重系数去掉90%以上。虽然算法上可以实现模型的高度稀疏化,但这种稀疏化常常是不规则的稀疏,目前的主流的CPU和GPU等硬件平台都无法对不规则的稀疏进行有效的运算加速,所以性能上仍然受到比较大的限制。

  Cambricon-X提出了一种针对稀疏神经网络高效运算的硬件实现方案。如图所示,Cambricon-X的架构设计与DianNao系列的设计由很多相似之处,主要包括控制处理器CP,缓冲区控制器Buffer Controller,两个数据缓冲区NBin和NBout,内存访问模块DMA和计算单元Computation Unit,其中计算单元由多个处理元素(Processing Elements, PE)组成。其主要的区别在于中间Buffer Controller模块,这个模块是针对稀疏加速器特别引入的模块,也实现稀疏访存和计算的核心。

  为了实现网络参数的稀疏化计算,需要将数值为0的数从权重参数中剔除,并记录参数中非0数据的位置,在计算时先从输入数据中挑选出非0权重对应位置的数据,重新排列后的数据与非0参数一并传给对应的PE执行计算操作。在Buffer Controller主要由Indexing Module (IM)和一个专用功能单元BCFU组成,稀疏数据的筛选主要是由IM来完成的,BCFU主要用于存储待IM筛选的数据。

  IM模块的引入实现了仅将索引后的数据传给PE完成后续的计算操作,一方面索引后的数据量在稀疏网络中占比很小,可以极大的减少BC区与PE之间的带宽需求,另一方面索引后的数据在BC区域完成了数据的重排,在PE上也仅需要执行较少的并行计算操作。

  PE是神经网络计算单元,如图所示,SB为参数缓冲区,用于缓存网络的权重参数,虽然片上存储空间有限无法将所有权重参数加载进来,但是权重有更强的重复访问特性,所以SB设计依然可以极大的减少数据访存带来的开销。PEFU是计算逻辑的硬件实现,其本质是神经网络计算所需的一组乘加器的组合连接。

  综上所述,从Diannao系列和Cambricon-X来看,针对AI计算同时具有数据密集型和计算密集型的特性,NPU主要通过增加更多的并行计算单元来实现更高效率的计算,同时将计算靠近存储的方式来解决数据高效访存的问题。根据不用的应用场景和算法特性通过软硬件协同设计的思路来设计特定领域的AI芯片,并在性能、功耗、面积等指标之间找到最佳的平衡点。

  自Google在2016年推出第一代自研人工智能芯片Tensor Processing Unit, TPU,经过数年发展已升级到了第4代 TPU v4 (截止到2022年底)。TPU架构设计也是通过高效地并行运算大量乘法和累加操作来实现深度学习卷积层,全连接层等网络层的高效计算。

  脉动阵列(systolic array)是由大量紧密耦合的PE组成阵列网络,是一种数据流的架构设计。脉动阵列中每一个PE都会与周围一个或者多个的PE进行数据通信,PE的功能相对简单,系统通过大量PE的并行计算来实现高效的计算,通过数据在不同PE间的流动最大化的实现数据的复用和减少芯片在运算过程中的内存访问的次数,不仅可以节省内存带宽还降低了因内存访问带来的功耗损失。

  在传统计算系统的运算过程中,处理单元PE先从主存中读取数据,然后再进行运算操作,运算完成后结果再写回到存储器中,因此访存的速度称为了整个系统的处理性能的瓶颈。相比于CPU通过多级缓存的方式来解决访存速度瓶颈的问题,脉动架构则是让数据在不同处理单元中流动来减少访问主存带来的性能瓶颈。如图所示,在一个一维脉动阵列的运算过程中,数据首先从主存中进入第一个PE,经过处理后被传递到下一个PE,同时下一个数据进入第一个PE,以此类推,数据以流动的方式在不同PE之间传递,直到完成全部计算后才返回主内存。所以脉动阵列架构实现了输入数据的多次复用,省去了数据被写回主存后再读取的过程,减少主存的访问次数,因此脉动阵列可以在较小的内存带宽的情况下实现高吞吐率。

  TPU使用了脉动阵列架构设计,数据在不同方向上以固定的时间间隔送入阵列中的 PE进行运算,在经过多步计算后最后将结果汇总输出来。脉动阵列只适合用于非常简单且规整的运算,而矩阵乘和卷积刚好符合脉动阵列的运算特性。

  第一代TPU的脉动阵列结构实现如图所示,与GPU类似,TPU通过PCI-E总线与主机CPU连接,TPU的指令由CPU完成编码以简化硬件设计和调试。矩阵乘法单元(Matrix Multiply Unit, MXU)是主要的计算单元,其主要功能为完成矩阵的乘法运算。矩阵乘法单元周围有三个功能不同的数据缓存区以及专用的Activitation, Normalize和Pool单元,其中三个数据缓存区分别用于缓存权重队列(Weight FIFO)和输入数据缓冲区(Unified Buffer, UB)和输出数据累加单元(Accumulator, Acc)。

  具体执行时,指令和数据从主机接口(host interface)进入TPU,复用率更高的权重参数会被预先加载到Weight FIFO,输入数据会被加载到统一缓冲区UB。输入数据和权重参数在矩阵乘法单元里完成矩阵乘法运算后结果再送入累加单元Acc,在Acc完成部分和累加后根据模型设计需要,选择是否进行送入Activitation, Normalize和Pool单元执行对应操作,最后再将结果送回统一缓冲区UB。

  在第一代TPU硬件的布局中,矩阵乘单元和激活单元一共占30%的面积,矩阵乘单元(MXU)有256x256个MACs,每个时钟周期能完成256x256个8bit数据的乘加运算,Acc是大小为4MiB的32bit累加器。UB大小为24MiB,占29%的面积,其可以通过DMA直接与Host CPU交互,用于缓存输入数据或保存中间计算结果。Weight FIFO的深度为4,权值参数从片外内存中读取。

  矩阵乘法单元(Matrix Multiply Unit, MXU)是一个典型的脉动阵列,如图所示,weight由上向下流动,数据从左向右流动。输入的像素数据从乘法矩阵左侧进入,并从左向右传播以重复利用中间数据,由于权重是预先加载的,因此随着输入数据的前进,可以快速算出乘积结果,在通过控制通路进入下一步累加计算。

  TPU v1是谷歌第一代AI专用芯片,主要专注与处理推理任务,Google在推出用于推理的TPU v1之后开始开发和设计针对训练的第二代TPU。与TPU v1相比,TPU v2的有如下的改进点:

  TPUv3在TPUv2的基础上进一步的提升了性能,其在时钟频率、内存带宽和芯片间带宽上提升了30%,矩阵乘法单元MXU的数量增加了1倍,HBM容量提升了1倍,可连接节点数增加了4倍。

  TPU v4出于成本的考虑,Google对用于训练的和用于推动TPU进行了分开设计,用于训练的TPU v4有两个Tensor Core,而用于推理的PU v4i只有一个Tensor Core,在通用性、性能和成本上进行了取舍和平衡。在TPU v4i中,单个Tensor Core包含4个矩阵乘法单元MXU,是TPU v3的两倍。Google在TPU v4i的设计中还增加了性能计数器(Performance counter)以便于协助编译器更好地掌握芯片的运行情况。

  存算一体或存内计算是将存储与计算完全融合,直接利用存储器进行数据处理或计算。在传统的冯诺依曼架构下,数据的存储和计算是分开的,由于存储和计算的性能存在加大的差距,处理器访问存储数据的速率远远小于处理器计算速率,数据在内存与主存之间搬运的过程其能耗也远远高于处理器的计算所消耗的能量。

  从NPU和TPU的架构设计可以看出,其本质都是在解决数据高效访存的问题,只是实现方式略有差异。总结看来主要包括了:

  存算一体通过将计算单元和存储单元集成在同一个芯片,让存储单元具有计算能力,使得计算可以在存储器单元内完成,极大的降低了数据搬运带来的延迟和功耗,其特别适用于深度学习这种需要大规模的数据搬运和大规模并行计算的场景。

  存内计算一般包括数字计算和模拟计算两种实现方式,模拟计算能效高但计算精准度低,数字计算计算精准度高但功耗较大,当前主流的存内计算主要还是以模拟计算为主。

  模拟存内计算主要基于物理定律在存算阵列上实现乘加运算,以忆阻器上的矩阵乘法MxN为例,运算前,先将矩阵M按行列位置存入忆阻器,在输入端矩阵M使用不同电压值来表示,根据欧姆定律和基尔霍夫定律在输出端可以得到对应的乘加后电流矢量,多个存算阵列并行,便可完成多个矩阵乘法计算。

  数字存内计算是通过在存储阵列中加入与或门、乘法器、加法器等逻辑计算电路,使存储阵列不仅具备存储功能还具备计算能力。由于需要为每个存储单元增加了逻辑电路,所以其在芯片面积上并不占优势,限制了其计算能力的拓展,因此,当前数字存内计算实现更多的采用先进工艺来实现,由于工艺和成本的因素,其应用范围受到了比较大的限制。

  基于人脑的脉冲(spiking)模拟计算框架下的脉冲神经网络 (SNN)有望在实现人工智能的同时降低计算平台的能耗。

  在SNN模型中上游神经脉冲Vi通过突触权重Wi调节,在给定时间内产生的合成电流\sum_{i}^{}{Vi * Wi}等效于点积运算。从图例可以看出,脉冲计算通过电流的进出模拟神经元计算过程,整个系统基于事件驱动,深度学习网络计算又是高度稀疏的,所以通过脉冲通信和计算可以实现极低能耗下大规模并行计算。

  从脉冲计算过程可以看到,脉冲计算的硬件结构需要存算一体的体系设计将神经元和突触阵列紧密放置在一起。所以当前的脉冲神经网络芯片基本都采用模拟存内计算的存算一体的架构设计。

  存内计算虽然有很多的优势,但商业应用上还面临着诸多挑战,其在器件研发、电路设计、芯片架构、生成制造、EDA工具链以及软件算法等环节都还面临不少的问题需要解决和突破,整体技术成熟度较弱。

下一篇:星空体育AI算力芯片天下一分为四中国实力渐显
上一篇:技术服务商星空体育和战略合作伙伴

咨询我们

输入您的疑问及需求发送邮箱给我们