1. Eyeriss 架构概览

大家好,欢迎来到《Eyeriss 架构入门与稀疏计算》的第一章。我是这门课的主讲,一个在芯片架构和 AI 加速领域摸爬滚打了十几年的工程师。今天咱们不聊虚的,直接切入正题,聊聊 Eyeriss 到底是什么,它从哪来,又要往哪去。

1.1 Eyeriss 发展背景

说起 Eyeriss,得先聊聊它诞生的那个年代。大概是 2016 年左右,深度学习开始爆发,但大家很快发现一个尴尬的问题:GPU 虽然算得快,但功耗太高,根本塞不进手机、无人机或者可穿戴设备里。我当时参与过一个边缘端的项目,用 GPU 跑一个简单的分类网络,散热片烫得能煎鸡蛋。嗯,那场景我印象很深。

就在这个节骨眼上,MIT 的 Vivienne Sze 团队站了出来。他们想的是:能不能做一个专门为神经网络设计的芯片?不是通用处理器,而是专用加速器。说白了,就是让芯片的每一颗晶体管都为了“卷积”和“矩阵乘”服务。Eyeriss 就是他们的答案。

Eyeriss 这个名字挺有意思,取自“鸢尾花”的英文。为什么叫这个?我猜是因为它的数据流架构像花瓣一样层层展开,优雅又高效。当然,这只是我的个人解读。

核心背景总结:

  • 时间节点:2016 年,深度学习从云端走向边缘。
  • 痛点:GPU 功耗高、体积大,不适合移动端。
  • 目标:设计一款高能效、可编程的 DNN 加速器。
  • 团队:MIT 的 Vivienne Sze 团队,后来衍生出 Eyeriss v1 和 v2。

1.2 Eyeriss 核心设计理念

Eyeriss 的设计理念,我总结为三个关键词:数据流驱动、稀疏计算、近存储计算。咱们一个一个说。

1.2.1 数据流驱动架构

传统处理器是“指令驱动”的——取指令、译码、执行。但 Eyeriss 不一样,它是“数据流驱动”的。什么意思呢?就是数据在芯片内部流动时,计算单元自动被触发。你想想看,这省掉了多少指令开销?

Eyeriss 提出了一个叫 Row-Stationary (RS) 的数据流。我刚开始看时,觉得这名字挺拗口。后来在项目中自己画数据流图,才明白它的精髓:把卷积的输入行、权重行、输出行绑定在一起,让它们在 PE(处理单元)阵列里高效流转。说白了,就是让数据尽量待在原地,减少搬移。

我的个人经验: 在芯片设计中,数据搬移的功耗往往比计算本身还高。RS 数据流的核心就是“少搬数据,多算数”。我曾经在一个项目里试过类似思路,能效比直接提升了 3 倍。

1.2.2 稀疏计算支持

这是 Eyeriss 的杀手锏。神经网络里有很多零值,尤其是经过 ReLU 激活函数后。传统加速器傻乎乎地算这些零,浪费功耗和带宽。Eyeriss 则能跳过这些零值,只算非零的部分。

怎么做到的?它给每个权重和激活值加了一个“有效位”标记。如果标记是 0,就直接跳过,不参与计算。我记得第一次在仿真里看到这个机制时,心里直呼“妙啊”。

注意: 稀疏计算虽然好,但也不是没有代价。它需要额外的控制逻辑来“跳过”零值,如果稀疏度不够高,这些开销反而会拖累性能。我建议在稀疏度超过 50% 的场景下再启用这个特性。

1.2.3 近存储计算

Eyeriss 把 SRAM 和 PE 阵列紧密耦合在一起。每个 PE 旁边都有本地存储,这样数据就不用频繁跑到片外 DRAM 去取。你想想看,片外访问一次要几百个周期,而片内只要几个周期。这个差距,就是能效的鸿沟。

Eyeriss v1 用了 108 个 PE,每个 PE 都有自己的寄存器文件。v2 更是把规模扩大到了 256 个 PE,并且支持更灵活的稀疏模式。我个人觉得,这种“存储跟着计算走”的思路,是未来 AI 加速器的必然方向。

1.3 Eyeriss 在 AI 加速中的地位

Eyeriss 在 AI 加速领域,属于“教科书级”的存在。它不是最猛的(论算力比不过 NVIDIA 的 GPU),也不是最省电的(论功耗比不过某些专用 ASIC),但它是最“优雅”的之一。

为什么这么说?因为它把架构设计的每个细节都公开了,里连 PE 的微架构、数据流的调度算法都讲得清清楚楚。很多后来的加速器,比如 Google 的 TPU 和华为的达芬奇架构,都或多或少借鉴了 Eyeriss 的思路。

我列个表,大家感受一下 Eyeriss 在行业中的位置:

加速器 发布年份 核心特点 与 Eyeriss 的关系
Eyeriss v1 2016 RS 数据流、稀疏跳过 开山之作
Eyeriss v2 2018 稀疏感知、多粒度并行 迭代升级
Google TPU v1 2016 脉动阵列、大算力 同期竞品,思路不同
NVIDIA Volta 2017 Tensor Core、通用计算 通用 vs 专用
华为达芬奇 2018 3D Cube、可编程 借鉴了数据流思想

从这张表能看出来,Eyeriss 虽然算力不是最高的,但它的架构思想影响深远。尤其是“稀疏计算”和“数据流驱动”这两个点,现在几乎成了 AI 加速器的标配。

下面这张图,是我自己画的 Eyeriss 核心架构概览,帮你快速建立整体认知:

Eyeriss 核心架构概览 全局控制器 输入缓冲区 (GLB) 权重缓冲区 PE 处理单元阵列 (12×9 = 108 PE) MAC 单元 本地寄存器 MAC 单元 本地寄存器 MAC 单元 本地寄存器 MAC 单元 本地寄存器 输出缓冲区 稀疏跳过逻辑 数据流:RS (Row-Stationary)

从这张图能看出来,Eyeriss 的架构非常清晰:全局控制器负责调度,GLB 和权重缓冲区负责数据供给,PE 阵列负责计算,输出缓冲区负责收集结果。而稀疏跳过逻辑则贯穿其中,确保零值不参与计算。