AI计算特性
设计和部署一款专用芯片需要平衡各种指标,不同的场景下关注的指标不一样,其芯片设计的思路也会存在差异,常见的芯片设计指标包括:
功耗:芯片电路在工作时所消耗的能量。
峰值性能:芯片每秒计算操作数的总和。
吞吐量:单位时间芯片能够处理的数据量。
面积:晶体管数量越多,芯片尺寸越大,工艺越精密,芯片尺寸越小。
灵活性:灵活性和可编程能力越高,适应的场景越多。
成本:包括芯片设计费用和单个芯片生成加工费用。
从计算能力上看,芯片中参与计算的内核数量越多对数据传输的带宽要求越高,以GPU为例,其中包含几百到几千个计算Core,当这些Core同时读写数据时对数据带宽的占用是相当高的。其次,从计算粒度上看,只有当峰值计算能力小于等于最大带宽时,才能达到最佳的计算效率,虽然片上存储能提供极高的带宽和读写性能,但其会占用有限的芯片面积,所以需要在性能和带宽上进行平衡。再次,从通用性上看,可编程能力越强,能使用的应用场景越多,但为了兼容更多的应用,则在架构设计上会存在一定的平衡和冗余,这往往会导致其在单一任务中的性能存在一定程度的下降,所以需要在定制化实现极致产品性能和软件可编程扩大场景范围上进行平衡。
访存
深度神经网络包含大量的网络层,每一层的又包含大量的参数以及中间特征数据,数据访问量和计算量都很大。例如,卷积层包含大量多维卷积核,在计算上滑窗式的卷积运算使得卷积核参数需要多次重复参与运算,由于卷积核参数量一般要远大于缓存的容量,所以大多时候参数需要反复从主存中访问。比如,早期AlexNet拥有6000万参数量,最新的基于Transformer架构的ChatGPT则达到了1750亿参数量,如此巨大的参数量不仅需要占用巨大的存储空间,如何进行高效运算对访存带宽、内存管理以及计算都有很高要求。
通常在芯片设计中可以通过增加计算核心的数量来提高系统的并行度,当并行度提高后,数据的读写就会成为瓶颈,即遇到“内存墙”。内存访问可以通过以下几个方面来解决:
1.通过增加片上缓存大小和寄存器数量,或提高访存总线带宽等来提升访存效率,进而减少数据等待的时间;
2.让数据尽可能在片上多停留,避免重复访问主存次以减少计算单元的等待时间;
3.通过数据流的模式让数据不必经过主存就可以在不同计算单元之间进行通信和流动。
由于深度学习前一层计算结果在下一层计算会被接着用上,模型参数在不同时钟周期中也反复使用。第一种方案通过增加片上存储减少了数据被重复写回和加载的开销。第二种方案直接把复用的数据放在片上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加速等更通用的并行计算任务。
郑重声明:文中仅代表作者观点,不代表本公司观点,本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或者删除,感谢您的关注!