NPU能效革命,三星旗舰SoC第四代NPU架构深度解析

0 阅读15分钟

面向移动端SoC的高硬件效率神经网络处理单元

临近春节,围炉煮茶之余阅读了三星电子发表在固体电子学顶刊IEEE JSSC上的论文 《A Multi-Mode 8k-MAC HW-Utilization-Aware Neural Processing Unit With a Unified Multi-Precision Datapath in 4-nm Flagship Mobile SoC》 ,三星副总裁Inyup Kang博士 为本文的共同作者。三星电子的研究团队提出了一种应用于4nm移动SoC支持多模式的神经网络处理单元(NPU),专为猎户座移动SoC设计,通过统一多精度数据通路支持INT4/8及FP16运算,实现高能效与高面积效率的平衡。

推荐阅读: 支持多数据格式的高效乘法器及结构可变的MAC阵列

关键词

计算利用率、深度神经网络(DNN)、领域专用架构(DSA)、推理加速器、稀疏感知零跳过、统一乘加(MAC)

全文导图及摘要

针对深度卷积、浅层小通道层等端侧AI应用中的低硬件利用率场景,三星团队结合编译器提供的张量信息,通过重构计算流(包含基于特征图稀疏特性的零值跳过、Scatter-Gather等技术),硬件利用率相较第一代提升4倍。NPU支持运行模式动态调整,可灵活适配超低功耗(Always-On模式,无DRAM交互,功耗降低89%)与低延迟(双核心协同工作,支持跨核Halo数据直传)两种工作模式,覆盖语音唤醒、人脸识别、图像分割等典型应用场景。三星内部的实测结果显示,该NPU运行MobileNetEdgeTPU(INT8)能效达11.59 TOPS/W,运行DeepLabV3(FP16)能效为 4.26 TFLOPS/W面积效率分别为 3.45 TOPS/mm²1.72 TFLOPS/mm²

全文导图

研究背景

深度神经网络与端侧机器学习的发展推动了移动端AI应用的普及,移动端AI应用在实时性、隐私性与本地化运行的需求对DNN加速器的设计提出了新要求,同时移动平台的计算资源、功耗水平与存储带宽受限。早期,端侧加速器往往采取权重剪枝、稀疏零值跳过、低精度量化等手段,但仍存在诸多局限:

一、深度卷积、浅层网络等场景下硬件利用率显著降低,传统的并行计算架构难以适配低通道数的工作负载; 二、不同的端侧应用的数据精度差异大,如:超分辨率重建应用需要FP16保证超分效果,人脸检测/生物识别应用使用INT8甚至是INT4即可满足要求,同时在NPU中为不同精度设计专用的数据通路会造成面积浪费; 三、移动端应用中存在强实时性(如目标检测)与超低功耗常开场景(如语音关键词唤醒)等应用,单一的操作模式(不具备可配置性)无法兼顾多种场景; 四、早期的零值跳过技术多利用权重稀疏性,依赖的模型剪枝技术在当时并未成为实质的行业标准。

三星移动端NPU架构演进

1. 前三代移动端NPU架构

对从事端侧NPU架构的研究人员来说,本文的看点是揭示了三星前三代端侧NPU的技术演进思路。 第一代与第二代NPU利用权重稀疏性进行零值跳过(如下图所示),虽能提升NPU的有效性能,但权重稀疏依赖自定义的剪枝工具且难以作为行业标准推广;另一方面,该架构存在寄存器开销大、多路复用器复杂度随并行度提升而增加的问题,且空间并行度在小尺寸特征图层中的硬件利用率偏低。

第一代NPU:基于权重稀疏的零值跳过机制

在上图中,传统的卷积计算过程(未采用零值跳过)需要16个周期完成kernel矩阵在输入特征图上的滑动计算过程;基于权重稀疏的卷积计算,则可以先计算非零元素与IFM对应元素的乘积(得到Feature Map Cell),最后再将与非零权重值对应的多个Feature Map求和得到结果。值得注意的是,该架构并行度的提升会造成选通Feature Map Cell的多路复用器的设计复杂度增加。

从第三代NPU开始,三星开始利用特征图稀疏性实现零值跳过,并采用归约加法树代替前代的累加器方案,降低了26%的功耗(年后推出的硬件计算的艺术专栏会单独出一期关于NPU计算单元的文章),但在计算深度卷积或浅层网络时的硬件利用率低的问题仍未有效解决。此外,AI应用对混合精度、多精度计算的支持及更庞大的MAC规模的需求日益剧增。

2. 三星提出的第四代移动端NPU架构

NPU架构的演进思路与应用需求的变化紧密相关。三星提到,开发人员反馈了移动端NPU的新需求,即:多精度计算支持、深度可分离卷积/浅层网络的高硬件利用率、工作模式可配置

第四代NPU架构图

如上图所示,加速器包含两个NPU内核,每个内核包含4K个8bits MACs。NPU控制器负责管理片上暂存器与外存之间的数据传输。加速器中内置一个用于执行固件的小型CPU内核,以及包含张量压缩器(NTC)的DMA引擎。

第四代NPU的内核架构细节

如上图所示,第四代NPU的内核部分由张量计算单元、向量计算单元、命令队列管理器及1MB的紧耦合存储器组成。张量计算单元由取数据模块(权重/特征图/部分和)及乘加阵列(MAA,4K MACs)组成,每周期可计算4组32维向量的点积。紧耦合存储器存储单层网络或单个计算块的权重、输入特征图、输出特征图和部分和。

架构设计细节

1. 取数据模块与派遣单元

取数据模块获取并处理输入特征图、权重和部分和。权重fetcher会预加载下一计算块(next Tile)的权重,PSUM fetcher采用双缓冲设计,会预加载下一计算块的部分和。三星提到,由于NPU利用特征图稀疏和数据并行来改善硬件利用率低的问题,为避免访存瓶颈,特征图fetcher的带宽为乘加阵列带宽需求的数倍(具体几倍,官方没提及)。取数据模块的特征图fetcher内置了重用数据缓存(reuse buffer,容量为1KB),通过特征图数据重用提高有效内存带宽。 派遣单元负责将输入特征图分配至乘加阵列,由于NPU支持零值跳过和Scatter-Gather技术,派遣单元从取数据模块获取的数据量可能大于乘加阵列消耗的数据量。因此,派遣单元将向量合并为更密集的向量以最大化计算资源的利用率。

基于特征图稀疏的零值跳过技术

由于ReLU等激活函数会使隐层的输出特征图产生大量零值,且随着网络深度变深,零值所占的比例也逐步增大。 三星采用了下图所示的特征图零值跳过策略。

特征图零值跳过示意图

在上图中,特征图零跳过可使NPU在四个周期内完成卷积计算,减少了所需的总MAC计算量,在推理InceptionV3 时,卷积层的MAC利用率可提高36%。

需要注意的是,由于每个通道的稀疏度存在不平衡,零值跳过的搜索窗口会覆盖多个通道,但覆盖更多通道不可避免地会需要更复杂的多路复用逻辑。为了改善一点,三星确定了一个步幅系数,并采用基于优先级的搜索策略将输入特征图沿通道方向以一定步幅进行旋转移位实现多通道特征图零值搜索。

2. 乘加阵列

三星提到,乘加阵列消耗NPU80%的功耗和65%的面积,NPU张量引擎中的数据并行除了支持输入/输出通道方向的并行操作外,还需通过空间方向并行提高硬件资源的利用率(即在不同空间位置重用权重数据,并行地计算得到输出特征图)。三星提出的NPU乘加阵列由四组XMAA组成,每个XMAA由四组MAAG构成,每组MAAG包括32 X 8 MACs。除特殊的Scatter-Gather场景外,派遣单元会将特征图分配至同一XMAA的所有MAA。因此,在每个计算周期,XMAA会接受一个IFM和32个权重向量,执行点积运算得到32维的部分和向量。

2.1 基于加法树的点积计算

相较于基于累加器的点积计算,加法树点积计算过程的触发器和累加器翻转频率更低,功耗可降低20%~30%(三星提供的数据为26%)。三星提到,由于非常规卷积(如空洞卷积)的应用日趋广泛,移动端NPU架构需要考虑到计算非常规卷积时的计算资源利用率。卷积作为满足交换律的线性运算可映射为1×1卷积,可采用沿空间方向顺序执行的策略将非常规卷积适配至所提NPU。

空洞卷积计算示意图

针对空洞卷积零权重带来的传输带宽浪费问题,文中根据空洞卷积的膨胀率计算片上暂存器的取数据地址,按地址从片上暂存器加载输入特征图以消除冗余数据传输。

2.2 计算单元复用及融合点积

从推理侧的应用需求出发,端侧NPU的计算单元需支持多种计算精度(INT8/FP16/INT4...)。若为每种计算精度设计独立的数据通道,会浪费大量面积,并限制计算阵列的规模。因此,不只是三星,商用NPU都采用可复用的计算单元。

三星采用的多精度计算单元

上图是三星采用的多精度计算单元(MAU),蓝色虚线框中的组件负责完成融合点积计算,累加器负责完成结果累加操作。上图右侧为统一乘法器的细节图,统一乘法器支持INT4/INT8/FP16,统一乘法器的输入为2Bytes的输入特征图和2Bytes的权重数据。根据计算精度的不同,统一乘法器将输入数据映射到一组低位宽乘法器(即8X8、8X4、8X4及4X4)。 对于INT4,无需对乘法结果进行移位调整。对于其他格式,则需在乘法结果(部分积)对齐后进行累加。

三星使用了一种被称为融合点积的计算方法(针对FP16),即不对16组统一乘法器的中间结果进行舍入操作,只对点积计算结果进行舍入处理。

融合点积的计算过程

  • 16个统一乘法器输出的 FP16 乘积先通过硬件逻辑确定所有乘积的最大指数值(Emax),以该Emax为基准对所有乘积的尾数进行移位对齐,确保所有尾数的小数点位置完全统一;
  • 在对齐后的尾数的最低有效位(LSB)侧进行位扩展,添加额外的尾随位(Trailing bits),通过扩展位宽保留了乘积的低位有效信息,抵消 “消除中间舍入” 带来的数值截断误差;
  • 对齐并扩展后的 16 组尾数由于16-to-1 加法树完成无舍入、无截断累加,整个累加过程无任何中间归一化、异常处理操作;仅在整个向量点积的最终结果输出时,执行一次舍入、归一化与异常判断。 相较于传统的浮点加法操作,融合点积处理FP16的精度损失不大,节省了48%的面积和39%的功耗。

3. 激活单元及数据聚合模块

在乘加计算完成后,部分和会被传送到激活单元,执行非线性激活运算,并根据输出特征图的数据格式执行量化操作。由于绝大多数的非线性激活函数(诸如ReLU、Sigmoid、Tanh)都可采用分段线性函数近似,因此激活单元配置有保存缩放和偏置值的查找表。缓冲单元接收激活单元处理后的部分和或量化结果,并以双缓冲的方式传输至紧耦合存储器。值得注意的是,数据聚合模块还可将OFM通过DMA传递至另一NPU核心的紧耦合存储器。

场景优化及性能数据

1. 低延迟运行模式

低延迟模式专为人脸检测、目标检测、图像语义分割、图像分类等对端侧推理实时性有严苛要求的移动场景设计。

低延迟运行模式

低延迟模式下,两颗独立的NPU(8k MACs)协同执行同一神经网络推理任务。编译器通过层内空间划分,将输出特征图(OFM)切分为多个分区,每个NPU核负责一个分区的计算,结果直接存储在核内 1MB 的紧耦合内存(TCM)中;采用输出暂存策略,核内TCM中的OFM可作为下一层的输入特征图(IFM)复用,减少访存开销。 针对多核并行卷积固有的halo(边缘重叠区域)数据交互需求,通过张量引擎(TE)中的Gathering 单元实现硬件级数据同步,将本核新计算得到的边缘区域的特征图同步拷贝至另一颗NPU核的TCM中,全程无软件干预。 三星提供的实测数据表明,在1196MHz下,MobileNetEdgeTPU(INT8)推理吞吐达 3433inferences/s,DeepLabV3语义分割网络INT8/FP16精度下分别达到408 inferences/s211 inferences/s

2. 低功耗运行模式

低功耗运行模式

  • 仅给NPU核心和紧耦合存储器供电,关闭外部DRAM,避免不必要的功耗损耗;
  • 采用4bits INT量化的轻量模型,进一步降低计算和存储功耗;
  • 调整电压/频率降低功耗,同时保证乘加阵列的高利用率,兼顾功耗和推理效率; 相较于标准运行模式,低功耗模式可降低89%的功耗,可有效提高端侧设备的续航能力。

不足之处

本文介绍了三星电子提出的面向4nm移动SoC的神经网络处理器,在多精度数据通路、硬件利用率提升等方面可为移动端 DNN 加速器设计提供参考,但受限于验证维度(也可能是三星不愿意公开),看完之后虽感悟颇多,不足之处总结如下:

  1. 模型验证范围不全面。研究围绕CNN展开,虽明确支持LSTM类轻量循环神经网络,却未对如今主流的Transformer、MLP等非卷积模型开展分析/验证,仅从架构设计层面说明了通用性;
  2. 张量压缩方法的适配性验证不全面。四叉树算法无法自适应空间块划分,压缩效果依赖图像类数据的特征(即:空间相关性强同质区域面积),论文中性能验证均围绕CNN模型展开(MobileNetEdgeTPU、DeepLabV3、MobileDet),在非图像类数据中的适配性有待考究。
  3. 性能评估体系未完善。验证模型集中于 MLPerf 基准中的卷积类模型,缺乏对移动端多模型并发、动态负载切换等实际应用场景的性能测试;AON 模式仅量化了相对功耗节省比例,未给出LSTM模型的推理吞吐量、端到端延迟等指标;对INT4等低精度量化的支持仅为硬件层面实现,未给出精度损失与性能收益的量化分析数据;
  4. 针对硬件优化策略的设计空间探索有待加强。Scatter-Gather、特征图稀疏感知零跳过等技术仅给出既定设计的性能提升效果,但并未分析优化策略的参数边界,也未对不同卷积参数、模型稀疏度下的优化效果开展深入分析;
  5. 未公开SoC系统级分析验证。研究仅聚焦于NPU设计,未提及该NPU与移动SoC中的CPU、GPU、ISP等模块的协同调度机制,也未分析部署中存在的内存带宽竞争、模块间数据传输延迟、推理延迟抖动等工程问题;此外,公开数据未体现编译器优化、算子映射等软硬件协同设计的优化效果。