☰
EyrISV2柔性加速器:移动端DNN硬件架构的演进与设计解析
2026/10/12 10:35:00 网站建设 项目流程

最近在过“每天一篇论文”计划,进度走到329/365,这篇挑的是EyrISV2。光看标题就挺有意思——专门给移动设备上的深度神经网络做的柔性加速器,还是第二代。做端侧推理、模型压缩、神经网络硬件加速的同行,建议把这篇花点时间认真读一下。它不是在某个卷积算子上做定点优化,而是整个加速器架构都在讲“怎么柔性适配不同的网络结构、不同的精度需求”。这种问题比固定数据流的加速方案难一个量级,也是后面做边缘AI芯片绕不开的一关。这一篇我先聊第一部分,把背景、整体设计思路和关键模块的取舍讲透。

1. 移动端DNN加速到底卡在哪

1.1 移动端跑神经网络,算力只是表象问题

大家一说到移动端部署DNN,第一反应往往是算力不够。但实际做过端侧推理的人都知道,算力只是最表面的一层。移动设备上跑一个几十层甚至上百层的CNN,真正麻烦的有三件事:一是内存带宽和片上存储极其有限,模型参数动不动几十兆,没法全塞进SRAM;二是不同网络层的计算模式差异很大,卷积、深度卷积、全连接、注意力矩阵乘,每一种的数据复用方式都不一样;三是功耗墙,手机、穿戴设备、IoT模组都是电池供电,能效比上不去,再高的峰值算力也是废的。

所以移动端DNN加速器本质上是在三个约束之间找平衡:算力、存储、能效。单独把一个指标做高没有意义,真正难的是在功耗和存储受限的前提下,让计算阵列保持较高的利用率。

EyrISV2这个方向明显就是冲着这个问题去的。它不是按某一个主流网络结构定制的专用加速器,而是希望通过“柔性”的硬件设计,去覆盖尽量多的网络层类型和精度配置。这个思路在学术圈不新鲜,但真正能在合理硬件开销下落地的方案并不多。

1.2 为什么固定数据流的加速器不够用

早期不少加速器设计走的是“单点最优”路线。比如针对VGG或者ResNet这类标准CNN,把卷积循环展开,设计一个固定尺寸的脉动阵列,数据按固定方式在片上流动。跑官方模型的时候效率很好看,但换一个网络结构、换一个输入分辨率、换一个量化位宽,利用率就直线下降。

问题出在数据流上。卷积计算里有两类数据复用:权重复用和激活复用。不同网络层里这两者的比例完全不一样。普通3x3卷积的权重复用率高,但1x1卷积几乎就是矩阵乘,更吃激活复用;深度卷积则几乎没有输入通道间的复用。固定数据流的架构等于把这些情况一刀切,实际跑起来自然顾此失彼。

EyrISV2这种“柔性加速器”的做法,通俗点说,就是让硬件去适配网络,而不是反过来要求网络迁就硬件。计算阵列可以在不同工作模式之间切换,数据流方式可以配置,精度也可以动态调整。目标就是把架构的通用性和专用性尽量往一起拉。

1.3 EyrISV2要解决的三个核心问题

从论文标题里的几个关键词可以倒推出设计目标。第一个关键词是“移动设备上”,说明目标是嵌入式场景,对能耗和面积敏感。第二个关键词是“深度神经网络”,不是只加速卷积,还要能处理全连接、逐点卷积这些层。第三个关键词是“柔性加速器”,说明硬件本身具备可配置性。

拆解下来,EyrISV2要解决的核心问题就三条:第一,在能耗约束内提供足够高的峰值算力;第二,通过硬件配置来适应不同形状的网络层,减少计算阵列闲置;第三,支持不同的量化精度,让低精度网络能直接把硬件优势兑现出来。看起来是三个问题,实际落到架构设计上,全都指向同一个方向——计算阵列和存储层次的可重构性。

2. 从第一代到第二代的演进思路

2.1 初代加速器解决了什么,留下了什么

既然是V2,那一定有V1做铺垫。虽然手里的资料没有展开讲初代版本,但从命名习惯和这个方向常见的发展路径来看,第一代大概率是在固定数据流或者有限可配置的基础上,验证了移动端DNN加速的基本可行性。完成的工作应该包括:基本卷积算子的映射、片上数据复用策略、以及低精度定点计算的硬件支持。

而这类第一代方案的通病,通常是灵活性不够。你做了一个8位定点乘加阵列,发现有人在跑混合精度;你做了一个按输入通道拆分的计算策略,发现某个网络层要用大卷积核;你想用稀疏性来省电,发现硬件根本不支持跳过零值。这些坑,往往只有在大量真实模型跑过之后才能暴露出来。

所以V2的“柔性”是可以预见的演进方向。它不是为了炫技,而是在第一代落地经验的基础上,针对性的把“适配能力”做出来。

2.2 “柔性”到底体现在哪些维度

读这类加速器论文,最忌讳的就是看到“柔性”“可重构”就兴奋,却不搞清楚它到底在哪几个维度上做了文章。按我的理解,EyrISV2的柔性至少体现在这样几个层面。

第一是数据流柔性。计算阵列既支持类似脉动阵列那种权重静止、激活流动的模式,也支持激活静止、权重广播的模式。这样一来,普通卷积、全连接、深度卷积都能找到比较合适的数据映射。

第二是精度柔性。加速器不会锁死在某一个位宽上,而是可以在不同的定点精度之间切换,常见的就是8位、4位甚至更低。配合现在端侧很流行的混合精度量化,硬件能直接吃下不同精度的权重和激活。

第三是计算模式柔性。乘加阵列本身可能被重构成不同用途,比如在某些层里作为标准卷积阵列用,在某些层里变成多个并行的小矩阵乘单元。这种重构能力对现在Transformer类模型落地特别关键,因为自注意力里的矩阵乘法经常是较小维度的批量运算,硬塞给大阵列反而浪费。

2.3 同类加速器的不同设计路线对比

把EyrISV2放在整个移动端DNN加速器版图里看,更容易理解它的位置。市面上的方案大致分成三条路线。

一条是纯ASIC定制路线,针对特定模型族做深度优化,能效比最高,但灵活性最差,换模型等于换芯片。另一条是类CGRA路线,用大量可重构处理单元阵列覆盖不同计算图,灵活性最好,但控制开销和互连开销大,面积和功耗代价高。还有一条就是EyrISV2走的中间路线:以脉动阵列或者类似组织方式的计算阵列为底座,加上一定粒度的可配置逻辑,在能效和灵活性之间找一个工程上最舒服的平衡点。

这个定位很现实。纯ASIC路线养不起,类CGRA又太奢侈,做一款能覆盖主流网络结构、又能保持较高能效比的加速器,恰恰是端侧AI芯片最需要的。

3. EyrISV2的整体架构与关键模块解析

3.1 顶层架构拆解:计算阵列、存储层次、控制通路

从顶层看,EyrISV2这种柔性加速器一般会分成三块:计算阵列、存储层次、控制通路。计算阵列负责乘加运算和激活函数等后处理;存储层次负责把权重和激活数据在合适的时间送到合适的地方;控制通路则负责配置模式、调度数据流和处理稀疏性控制信号。

这三块里,存储层次往往是加速器性能的胜负手。计算阵列的峰值算力摆在那儿,能不能跑满,取决于数据能不能喂饱。EyrISV2在存储设计上通常采用多级缓冲结构,最外层是DRAM接口,中间是较大容量的全局buffer,最内层是每个计算单元身边的小型寄存器或SRAM块。数据在层与层之间的搬运讲究“以计算为中心”,尽量让数据在一个计算周期内被复用多次,减少对外部存储的访问。

控制通路这块反而是容易被低估的地方。柔性加速器的控制逻辑比固定架构复杂很多,因为它要处理多种工作模式之间的切换、不同精度下的数据对齐、以及稀疏性跳零等操作。如果控制通路设计得不够干净,配置切换的延迟会直接把小算力场景的收益吃干净。

3.2 计算引擎的核心:多精度与稀疏性支持

计算引擎是加速器的心脏。EyrISV2里的计算引擎大概率是由一组可重构的乘加单元构成,每个单元能够在不同的精度模式下工作。

多精度支持的关键在乘加单元的内部结构。为了在8位、4位这样的位宽之间切换,最简单的做法是位串行计算,即用低位宽的乘法器组合出高位宽的乘法结果,代价是延迟增加;另一种做法是让乘法器本身支持不同模式的输入分割,比如一个8位乘法器可以被拆成两个4位乘法器并行工作,这样低精度算力翻倍,能效也跟着上去。实际设计里两种方法往往会混用,具体选哪种要看成片面积和时序预算。

稀疏性支持则是另一大能效来源。神经网络经过ReLU之后,激活矩阵里大量元素是零,量化之后零值更多。如果硬件能提前判断数据是否为零,直接跳过那部分乘加操作,就能省下相当可观的动态功耗。EyrISV2对稀疏性的处理,常见做法是在数据进入计算阵列之前做零值检测,生成一套“跳过指令”,让阵列里对应的乘加单元进入低功耗待机状态。这说起来简单,实际实现时,稀疏模式对数据流的影响非常大,不做好的话,跳过零值省下来的功耗会在控制逻辑上吐回去。

3.3 片上存储与数据流调度:怎么把阵列喂饱

片上的数据流调度是这类加速器最难做出彩的部分。你可以把计算阵列想成一条流水线,存储系统就是给流水线供料的仓库。仓库出货速度跟不上流水线,阵列利用率再高也白搭。

EyrISV2在数据流调度上,核心思路一般是“展开折叠”:把卷积的循环维度展开,映射到空间上的计算单元;再把不能展开的维度折叠成时间上的多次迭代。展开哪些维度、折叠哪些维度,决定了权重复用和激活复用的比例,也就决定了外存访问负载。比如把输入通道维度展开,一个权重可以服务多个输入像素,这时权重复用率高;把输出通道维度展开,则一个输入像素可以被多个权重复用,这时激活复用率高。

不同网络层适合的策略不一样。普通卷积层通常展开输出通道和空间位置,深度卷积层更合适展开输入像素维度,全连接层则要当作一个大矩阵乘来安排数据分块。EyrISV2的柔性,本质上就是可以在这些展开策略之间动态切换,让存储系统始终以最合理的方式给计算阵列供数。

3.4 配置切换的开销问题

说完柔性,必须泼一盆冷水:柔性是有代价的。计算阵列从一个数据流模式切换到另一个模式,往往需要清空或者部分清空流水线,重新加载配置信息,然后才能开始新一轮计算。这个切换开销如果过大,对那种“层数多但单层计算量小”的网络就是灾难。

EyrISV2这种级别的加速器,在架构上通常会用几个办法消化切换开销。一是配置缓存,把不同网络层对应的配置提前预取到片上,切换时直接替换寄存器组,而不是从外部重新读取配置。二是流水线重叠,当前一层还在计算尾部的时候,就开始预配置下一层的状态,让切换时间被计算时间掩盖。三是尽量把切换频率控制在层的粒度,而不是在层内频繁切换,这需要编译器或者运行时调度器的配合。

从这个角度看,柔性加速器从来不是纯硬件问题,软硬件协同设计在很大程度上决定了柔性到底能用起来多少。

4. 实验评估应该怎么看

4.1 实验平台与基准模型选择

读加速器论文,实验部分最见功力。EyrISV2作为移动端加速器,评估手段常见的有两种:一是完整RTL实现后在FPGA上跑,精度高但速度慢;二是架构级建模加周期精确仿真,速度快适合做设计空间探索。不管哪种,都必须交代清楚主频、工艺节点、片内缓存容量、DRAM带宽这些参数,否则很多指标没法横向比较。

基准模型的选择也有讲究。只看ResNet这种经典CNN还不够,现在移动端实际部署得多的网络还包括轻量级网络(比如MobileNet这种带大量深度卷积的结构)、检测网络、以及越来越多的Transformer类模型。EyrISV2如果能在这些不同结构上都保持较高的阵列利用率,那“柔性”才算是真正兑现了。评估里如果只看一类网络,大概率是刻意回避了配置切换的短板。

4.2 关键指标:利用率比峰值算力更重要

衡量加速器好坏,峰值TOPS只能当宣传数字看。真正值得关注的是实际算力利用率、能效比(TOPS/W)、以及单位面积算力这三个指标。

算力利用率反映的是喂数能力,利用率低说明存储层次或者数据调度出了问题。能效比是移动端加速器的生命线,直接决定它能不能塞进手机或者IoT设备。单位面积算力则是成本指标,同样面积能提供多少有效计算,决定了芯片卖多少钱。EyrISV2这种柔性架构,面积上有天然劣势,因为可重构逻辑总是比固定逻辑费晶体管。所以实验评估里,一定要重点看它有没有把单位面积算力这个账算清楚——如果柔性带来的灵活性提升,是用翻倍的面积换来的,那在商业上就未必站得住脚。

4.3 什么结果才算真的有效

看结果的时候要有自己的判断力。一个合理可信的评估,应该能看到几组有区分度的对比。比如,在特定网络结构下,EyrISV2与没有柔性机制的基线加速器相比,算力利用率提升了多少;在混合精度场景下,与只支持8位定点的方案相比,能效提升了多少;在稀疏网络下,与不做稀疏跳零的方案相比,动态功耗节省了多少。

对比对象太弱,或者只跟纯软件方案比,说服力都不足。真正有价值的结论,是在“几乎相同面积和功耗预算下,柔性设计换来了多少额外性能弹性”。如果论文能把这个账算清楚,那它的工程参考价值就非常高了。

5. 从这篇论文里可以带走什么

5.1 做硬件加速器值得借鉴的几条设计经验

第一,不要把可重构做成全可重构,而是在关键路径上做有限度的柔性。全可重构看起来美好,控制逻辑和互连资源开销会让能效跌得很难看。EyrISV2这种在计算阵列、数据流调度、精度这几个关键维度上做灵活设计,是比较务实的中间路线。

第二,数据流策略一定要跟网络结构联动。跑不同网络之前,先在离线阶段做一轮profiling,确定每一层的最优展开维度组合,然后把这些配置项固化下来。运行时只是做配置的加载和切换,不需要做复杂决策,这样能把控制开销压到最低。

第三,软硬件协同设计不是可选项,是必修课。加速器做出来之后,编译器能不能把网络映射到合适的数据流模式上,直接决定硬件能力的兑现程度。开始设计硬件的同时就要开始设计编译器接口,两边一起调,否则最后一定有一边在迁就另一边,整体性能天花板直接被压低。

5.2 如果想复现或者借鉴,从哪里下手

真要动手复现或者借鉴EyrISV2的思路,不建议一上来就写RTL。先用架构级仿真器把数据流调度策略跑通,验证不同网络层在不同展开配置下的存储访问量和阵列利用率。这一步不需要太精确,目的是确认思路没有硬伤。

接下来选一个最简单的卷积层数据流模式,把它的RTL实现走通,跑出功能正确的乘加结果,再依次加入多精度切换、稀疏跳零、配置预取这些机制。每加一个特性,都在FPGA上做一个最小化的验证,对比它带来的面积和时序代价。

工具链方面,建议从标准的FPGA开发流程起步,用高层次的HLS做原型探索,再逐步把关键模块换成手写RTL。原因是柔性加速器的控制逻辑比较复杂,如果一开始就用低层次编码硬抠时序,周期会拖得特别长,而且很容易在还没验证到“柔性”价值之前就把精力耗尽。

5.3 后续部分我期待看到什么

这篇是“(一)”,我已经写了这么多架构层面的理解,后面第二部分最重要的自然是实验数据,特别是能效对比和不同网络结构的利用率表现。我更期待看到的是,在Transformer类模型和混合精度场景下,EyrISV2的柔性机制到底能带来多大的实际收益,以及切换到新的工作模式时,性能损失到底能不能被有效掩盖。

做端侧加速器就是这样,看起来是在设计硬件,实际是在跟算法演进赛跑。谁的架构能多覆盖一两代网络结构的变化,谁的使用周期就更长,价值也更大。EyrISV2这种方向,不管最后实验结果如何,至少在“怎么把灵活性和能效同时握在手里”这个问题上,提供了一个很有参考价值的思路。

按我个人的阅读习惯,碰到这种好架构,细节我一般会至少读两遍。第一遍把整体架构和数据流机制弄懂,第二遍盯着实验里那些图表,反推每个设计选择在数据上是怎么兑现的。这篇作为第一部分,后面的实验解读如果能看到更细的功耗拆分和面积拆解,那我会再单独写一篇,把这套柔性架构的家底彻底摊开来看。第一篇先到这儿,后面读完第二部分再接着聊。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询