Eyeriss 架构中的访存行为解析(腾讯元宝)
Eyeriss 架构中的访存行为解析
Eyeriss 是 MIT 提出的面向卷积神经网络(CNN)的能效型 NPU(神经网络处理器)架构,其核心创新在于通过硬件结构优化访存行为,以解决传统 GPU 在处理 CNN 时因数据搬运导致的能效瓶颈。以下从访存行为的关键问题、Eyeriss 的解决方案及技术细节展开说明。
一、CNN 的访存挑战:数据复用与带宽压力
CNN 的计算以卷积为核心,其特点是局部性(locality)强但数据复用模式复杂:
- 空间局部性:卷积核在输入特征图上滑动,相邻输出单元的计算共享大量输入数据(如 3x3 卷积核覆盖的 9 个输入像素)。
- 通道局部性:同一输入通道的数据会被多个卷积核重复使用(如 16 个卷积核共享同一输入通道)。
- 批处理局部性:同一批次(batch)的输入数据在不同输出通道间复用。
传统 GPU 的全局内存(DRAM)→共享内存(Shared Memory)→寄存器三级存储层次,虽能缓解带宽压力,但仍存在:
- 数据搬运量大:CNN 的参数(权重)和激活值(中间结果)需频繁在 DRAM 和计算单元间传输。
- 访存带宽成为瓶颈:计算单元常因等待数据而闲置(计算密度低),能效比差。
二、Eyeriss 的访存优化设计
Eyeriss 通过数据流(Dataflow)架构和片上存储层次的协同设计,最大化数据复用,减少 DRAM 访问次数。其核心思想是:“让数据尽可能靠近计算单元”。
1. 数据流架构:控制数据流动路径
Eyeriss 定义了四种经典数据流模式(后扩展为更灵活的 NoC-aware 数据流),每种模式针对不同的数据复用场景:
- Weight Stationary (WS):权重固定在一个 PE(Processing Element)中,输入激活值和部分和(Partial Sum)流动。
→ 优势:适合权重复用高的场景(如小卷积核),减少权重从片上存储到 PE 的重复加载。 - Output Stationary (OS):输出激活值固定在 PE 中,权重和输入激活值流动。
→ 优势:适合输出通道复用高的场景(如多卷积核并行),减少部分和的频繁更新。 - Input Stationary (IS):输入激活值固定在 PE 中,权重和部分和流动。
→ 优势:适合输入通道复用高的场景(如深层网络),减少输入数据的重复搬运。 - No Local Reuse (NLR):无数据复用,直接按计算顺序搬运数据(类似传统矩阵乘法)。
Eyeriss 的灵活性:通过动态配置数据流模式,适配不同层的计算特征(如浅层用 WS,深层用 OS)。
2. 片上存储层次:多级缓存与数据分布
Eyeriss 的存储层次分为四级,逐级减少对 DRAM 的访问:
- 片外 DRAM:存储权重和激活值,带宽有限(如 12GB/s)。
- 片上全局缓冲区(Global Buffer):暂存从 DRAM 加载的数据,按需分发给处理单元(PE Array)。
- PE Array 内的局部存储:
- PE 级寄存器:每个 PE 包含少量寄存器,存储当前计算的输入、权重和部分和。
- 行缓冲区(Row Buffer):每个 PE 行共享的缓冲区,用于暂存输入激活值(支持空间局部性复用)。
- 数据广播与共享机制:
- 权重广播:同一权重可被多个 PE 共享(通过行缓冲区或全局缓冲区)。
- 输入激活值共享:同一输入数据可通过行缓冲区广播给多个 PE(支持通道局部性复用)。
3. 稀疏性与零值跳过
CNN 中存在大量冗余计算(如 ReLU 激活后的零值),Eyeriss 通过稀疏数据流跳过零值计算:
- 标记零值:在数据加载时标记零激活值,PE 直接跳过相关计算。
- 动态调整数据流:零值跳过后,剩余数据重新分配到 PE,避免无效搬运。
三、Eyeriss 的访存行为示例(以卷积层为例)
假设一个 3x3 卷积层,输入特征图尺寸 32x32,输出特征图 30x30,输入/输出通道数各为 16:
- 数据加载:
- 权重(3x3x16x16)从 DRAM 加载到全局缓冲区,按 WS 数据流分发给 PE。
- 输入激活值(32x32x16)分块加载到全局缓冲区,通过行缓冲区广播给 PE 行。
- PE 计算:
- 每个 PE 计算局部 3x3 区域的输出(如 1x1 输出单元),权重固定,输入激活值从行缓冲区流动。
- 部分和(Partial Sum)存储在 PE 寄存器中,逐步累加。
- 数据复用:
- 空间复用:同一输入激活值的 3x3 区域被多个 PE 共享(通过行缓冲区)。
- 通道复用:同一输入通道被多个卷积核(16 个)重复使用(通过全局缓冲区)。
- 结果写回:
- 输出激活值(30x30x16)暂存于全局缓冲区,按需写回 DRAM(非实时写入,减少带宽压力)。
四、Eyeriss 的能效优势
通过上述设计,Eyeriss 实现了:
- 数据复用率提升:输入激活值的空间复用率达 90%+,权重复用率达 80%+。
- DRAM 访问减少:相比 GPU,DRAM 访问量降低 10-100 倍。
- 计算密度优化:PE 利用率(Utilization)从 GPU 的 10% 提升至 30%-50%。
总结
Eyeriss 的访存行为优化核心是“数据流驱动存储层次”:通过动态数据流模式匹配计算特征,结合多级片上存储和数据复用机制,最大限度减少 DRAM 访问,从而显著提升能效。这一设计为后续 NPU(如 Google TPU、华为 Da Vinci)的访存优化奠定了基础。