4、深度学习模型简介:CNN、RNN、Transformer等典型模型的结构与计算特点

在嵌入式NPU(神经网络处理单元)的软硬件协同设计中,理解主流深度学习模型的结构与计算特点是进行算子映射、内存规划和性能优化的前提。CNN、RNN、Transformer三大类模型分别对应了不同的数据流模式与计算密度特征,直接影响NPU的MAC阵列利用率、片上缓存策略以及数据搬运调度方式。本章从计算视角拆解这三类模型的数学本质与硬件行为,为后续NPU架构设计打下基础。

三类典型深度学习模型的计算特征与NPU映射关系 CNN 卷积神经网络 核心算子:Conv2D / DepthwiseConv 权重共享,局部感受野 计算模式:滑窗 + 乘累加 MAC阵列友好,并行度高 数据流:HWC / CHW 张量 行缓冲 + 片上重用 NPU映射策略 输入行缓冲 → 权重驻留 → 输出累积 典型硬件:脉动阵列 / SIMD 代表:MobileNet, ResNet, YOLO RNN 循环神经网络 核心算子:全连接 + 时间步循环 隐藏状态 h_t 依赖 h_{t-1} 计算模式:串行时间步 矩阵向量乘(GEMV) 数据流:序列长度 × 特征维度 时间步间强依赖 NPU映射策略 权重驻留 → 向量引擎 → 状态更新 典型硬件:向量ALU + 小规模MAC 代表:LSTM, GRU, 语音唤醒 Transformer 自注意力 核心算子:Q·K^T, Softmax, ·V 全局感受野,并行处理序列 计算模式:矩阵乘 + Softmax MAC密集 + 非线性归一化 数据流:序列×序列注意力矩阵 内存占用随序列长度平方增长 NPU映射策略 分块GEMM → 片上Softmax → 输出 典型硬件:大MAC阵列 + 高速SRAM 代表:BERT, , ViT 统一硬件抽象:MAC阵列 + 向量单元 + 片上存储 + 数据通路

4.1 CNN:卷积计算的空间复用与数据重用

核心原理:卷积神经网络通过卷积核在输入特征图上滑动,完成局部区域的加权求和。其数学本质是四重循环:输出通道(OC)、输出高度(OH)、输出宽度(OW)以及输入通道(IC)上的乘累加。卷积核权重在空间维度上共享,同一组权重被反复用于不同位置的输入块,这为NPU提供了天然的并行机会——不同输出通道之间可以并行计算,同一输入行可以被多个输出通道复用。

判断方法:评估一个CNN模型在NPU上的计算效率,需要关注三个关键指标:

  • 计算密度(Ops/Byte):MAC操作数与权重/特征图数据量的比值。MobileNet的深度可分离卷积计算密度较低,需要更精细的数据调度。
  • 权重复用率:每个权重被使用的次数。普通卷积的复用率为OH×OW,而1×1卷积的复用率仅为1,更适合用矩阵乘方式处理。
  • 特征图行缓冲需求:对于3×3卷积,NPU至少需要缓存3行输入特征图才能开始计算,这决定了片上SRAM的最小容量。
CNN层类型计算量公式权重数量NPU友好度典型部署场景
标准卷积 (3×3)OC×OH×OW×IC×9OC×IC×9高(行缓冲+权重驻留)ResNet主干
深度可分离卷积IC×OH×OW×9 + OC×OH×OW×ICIC×9 + OC×IC中(需两次数据遍历)MobileNet
1×1卷积OC×OH×OW×ICOC×IC高(等价GEMM)通道压缩/扩张
转置卷积OC×OH×OW×IC×K²OC×IC×K²低(需输入填充)语义分割上采样

案例拆解:以YOLOv5s中的第一个Conv层为例,输入为640×640×3,输出为320×320×32,卷积核3×3。该层计算量约为3×320×320×32×9 ≈ 88.5M MACs,权重仅864个。在NPU上,权重可以完全驻留在SRAM中,输入特征图按行流式进入,输出特征图在MAC阵列中累积。实际部署中,NPU的MAC阵列利用率可达85%以上,瓶颈在于输入特征图的DDR带宽——每行输入数据被32个输出通道复用,因此需要设计行缓冲机制来最大化数据重用。

经验提醒:在嵌入式NPU上部署CNN时,优先将权重放在片上SRAM,输入特征图采用行流式(line-buffer)方式搬运。对于深度可分离卷积,建议将Depthwise层和Pointwise层分开调度,避免频繁切换计算模式导致流水线停顿。

4.2 RNN:时间步串行与状态依赖的挑战

核心原理:循环神经网络通过隐藏状态在时间维度上传递信息,每个时间步执行一次矩阵向量乘(GEMV)和激活函数。LSTM单元包含输入门、遗忘门、输出门和候选记忆,每个门控都需要独立的权重矩阵。RNN的计算特点是:权重矩阵在时间步之间完全共享,但隐藏状态存在严格的时间依赖,无法像CNN那样在空间维度上大规模并行。

判断方法:RNN在NPU上的部署难点不在于计算量,而在于延迟和状态管理:

  1. 时间步延迟:每个时间步的矩阵向量乘必须等待前一步的隐藏状态计算完成,这导致NPU的MAC阵列在时间步之间可能空闲。
  2. 状态存储:LSTM需要保存4个门控的中间状态(h_t, c_t, 以及各门控的预激活值),这些状态需要频繁读写,对片上存储容量和带宽提出要求。
  3. 批量大小限制:RNN推理通常batch size较小(1~8),难以充分利用大规模MAC阵列,更适合使用向量处理器或小规模MAC簇。

案例拆解:以语音唤醒场景中的GRU模型为例,输入特征为40维MFCC,隐藏层维度128,时间步数50。每个时间步的计算量为4×128×128(四个门控的矩阵乘)+ 128×40(输入变换)≈ 71K MACs。在NPU上,权重矩阵(128×128×4 ≈ 65K参数)可以驻留SRAM,但每个时间步需要执行一次完整的矩阵向量乘,MAC阵列利用率仅约30%。优化方案是将多个时间步的输入拼接成小批量矩阵乘,或者使用权重剪枝和量化(INT8)来减少计算量。

风险提示:RNN的时间步串行特性会导致NPU的流水线深度受限。如果NPU的MAC阵列规模过大(如512个MAC),而RNN的矩阵向量乘维度只有128,则利用率会急剧下降。建议为RNN预留独立的向量ALU单元,避免占用主MAC阵列。

4.3 Transformer:自注意力的并行化与内存瓶颈

核心原理:Transformer通过自注意力机制(Self-Attention)捕捉序列内任意位置之间的依赖关系。其核心计算为:Q·K^T得到注意力分数矩阵,经Softmax归一化后与V相乘。注意力矩阵的维度为序列长度×序列长度,计算复杂度为O(N²),其中N为序列长度。与RNN不同,Transformer的所有时间步可以并行计算,这使其在NPU上具有更高的并行潜力,但代价是内存占用随序列长度平方增长。

判断方法:Transformer在NPU上的性能评估需要关注以下维度:

  • GEMM占比:QKV投影、注意力输出投影、FFN层均为大矩阵乘,占整体计算量的90%以上,适合MAC阵列。
  • Softmax瓶颈:Softmax需要计算指数和归一化,涉及非线性运算和跨行归约,在NPU上需要专门的向量引擎支持。
  • 中间张量内存:注意力分数矩阵(N×N)和Softmax输出需要暂存,当N=512时,FP16精度下需要512×512×2=512KB,远超一般NPU的片上SRAM。
Transformer组件计算类型计算量(N=128, d=64, h=4)内存占用NPU优化要点
QKV投影GEMM (N×d) × (d×3d)128×64×192 ≈ 1.57M MACs权重 3×64×64×4权重驻留,分块GEMM
注意力分数Q·K^T (N×d × d×N)128×128×64 ≈ 1.05M MACs分数矩阵 128×128分块计算,避免全量存储
Softmax逐行归一化128×128 指数运算中间结果 128×128向量引擎,查表近似
注意力加权分数·V (N×N × N×d)128×128×64 ≈ 1.05M MACs输出 128×64与分数计算融合
FFNGEMM (N×d) × (d×4d)128×64×256 ≈ 2.1M MACs权重 64×256权重驻留,激活流式

案例拆解:以嵌入式视觉Transformer(ViT-Tiny)为例,输入图像224×224,patch size 16,序列长度N=196,嵌入维度d=192,4个注意力头。单层Transformer的计算量约为:QKV投影 196×192×576 ≈ 21.7M MACs,注意力分数 196×196×64 ≈ 2.5M MACs,FFN 196×192×768 ≈ 28.9M MACs,合计约53M MACs。在NPU上,主要瓶颈是注意力分数矩阵(196×196×2字节 ≈ 77KB)无法完全放入SRAM,需要分块计算。实际部署中,将注意力头维度拆分(每个头64维),分块计算Q·K^T并立即执行Softmax,再与V相乘,可避免存储完整分数矩阵。

工程实践要点:Transformer在NPU上的部署需要采用分块FlashAttention策略:将Q、K、V按块加载到SRAM,计算局部注意力分数,执行在线Softmax(维护running max和sum),最后输出加权结果。这种方式将内存复杂度从O(N²)降为O(N×block_size),是嵌入式NPU处理长序列的关键技术。

4.4 三类模型的NPU设计权衡与常见误区

核心原理:NPU的硬件架构需要在CNN、RNN、Transformer之间取得平衡。CNN需要大MAC阵列和行缓冲,RNN需要向量ALU和低延迟状态切换,Transformer需要大容量SRAM和高效Softmax支持。实际芯片设计通常采用异构计算单元:主MAC阵列(用于GEMM/Conv)+ 向量处理单元(用于激活、归一化、Softmax)+ 专用数据通路。

判断方法:选择NPU架构时,根据目标应用场景的模型分布决定资源配比:

  1. 视觉为主(CNN):MAC阵列规模优先,行缓冲深度≥3×最大卷积核高度,权重SRAM容量≥最大层权重。
  2. 语音/时序(RNN):向量ALU吞吐优先,支持低延迟状态切换,MAC阵列规模适中(64~256个MAC)。
  3. NLP/多模态(Transformer):SRAM容量优先(≥1MB),支持分块GEMM和在线Softmax,MAC阵列规模大(512~2048个MAC)。

常见误区:

  • 误区一:认为MAC阵列越大越好。实际上,当模型的计算密度较低(如RNN、Depthwise Conv)时,大MAC阵列利用率极低,反而浪费芯片面积和功耗。
  • 误区二:忽略Softmax等非线性算子的硬件支持。Softmax涉及指数运算和除法,如果NPU没有专门的向量指令,会严重拖慢Transformer推理速度。
  • 误区三:将所有模型都量化到INT8。RNN和Transformer对量化误差更敏感,尤其是Softmax的输入分布,可能需要混合精度(权重INT8,激活FP16)。
  • 误区四:只关注计算量,忽略数据搬运。对于Transformer,中间张量的DDR读写往往比计算更耗时,需要设计高效的片上数据复用策略。
总结复盘:嵌入式NPU的模型适配是一个软硬件协同的过程。CNN适合大规模并行MAC阵列,RNN需要灵活的向量处理能力,Transformer则对存储带宽和Softmax硬件支持提出更高要求。在实际项目中,建议先对目标模型进行算子级剖析(计算量、内存占用、数据流模式),再根据剖析结果调整NPU的资源配置和调度策略。对于混合模型(如CNN+Transformer的视觉模型),需要设计可切换的计算模式,避免硬件资源闲置。