4、深度学习模型简介:CNN、RNN、Transformer等典型模型的结构与计算特点
在嵌入式NPU(神经网络处理单元)的软硬件协同设计中,理解主流深度学习模型的结构与计算特点是进行算子映射、内存规划和性能优化的前提。CNN、RNN、Transformer三大类模型分别对应了不同的数据流模式与计算密度特征,直接影响NPU的MAC阵列利用率、片上缓存策略以及数据搬运调度方式。本章从计算视角拆解这三类模型的数学本质与硬件行为,为后续NPU架构设计打下基础。
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×9 | OC×IC×9 | 高(行缓冲+权重驻留) | ResNet主干 |
| 深度可分离卷积 | IC×OH×OW×9 + OC×OH×OW×IC | IC×9 + OC×IC | 中(需两次数据遍历) | MobileNet |
| 1×1卷积 | OC×OH×OW×IC | OC×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个输出通道复用,因此需要设计行缓冲机制来最大化数据重用。
4.2 RNN:时间步串行与状态依赖的挑战
核心原理:循环神经网络通过隐藏状态在时间维度上传递信息,每个时间步执行一次矩阵向量乘(GEMV)和激活函数。LSTM单元包含输入门、遗忘门、输出门和候选记忆,每个门控都需要独立的权重矩阵。RNN的计算特点是:权重矩阵在时间步之间完全共享,但隐藏状态存在严格的时间依赖,无法像CNN那样在空间维度上大规模并行。
判断方法:RNN在NPU上的部署难点不在于计算量,而在于延迟和状态管理:
- 时间步延迟:每个时间步的矩阵向量乘必须等待前一步的隐藏状态计算完成,这导致NPU的MAC阵列在时间步之间可能空闲。
- 状态存储:LSTM需要保存4个门控的中间状态(h_t, c_t, 以及各门控的预激活值),这些状态需要频繁读写,对片上存储容量和带宽提出要求。
- 批量大小限制: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)来减少计算量。
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 | 与分数计算融合 |
| FFN | GEMM (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相乘,可避免存储完整分数矩阵。
4.4 三类模型的NPU设计权衡与常见误区
核心原理:NPU的硬件架构需要在CNN、RNN、Transformer之间取得平衡。CNN需要大MAC阵列和行缓冲,RNN需要向量ALU和低延迟状态切换,Transformer需要大容量SRAM和高效Softmax支持。实际芯片设计通常采用异构计算单元:主MAC阵列(用于GEMM/Conv)+ 向量处理单元(用于激活、归一化、Softmax)+ 专用数据通路。
判断方法:选择NPU架构时,根据目标应用场景的模型分布决定资源配比:
- 视觉为主(CNN):MAC阵列规模优先,行缓冲深度≥3×最大卷积核高度,权重SRAM容量≥最大层权重。
- 语音/时序(RNN):向量ALU吞吐优先,支持低延迟状态切换,MAC阵列规模适中(64~256个MAC)。
- 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读写往往比计算更耗时,需要设计高效的片上数据复用策略。