FSA: An Efficient Fault-tolerant Systolic Array-based DNN Accelerator Architecture
FSA:一种高效的容错脉动阵列 DNN 加速器架构
一、文章简析
在深度神经网络(DNN)加速器中,永久性故障尤其具有挑战性,因为它们可能导致推理错误和性能下降。为了解决这些问题,FSA架构提出了统一的重新计算模块(RCM),通过动态重新计算故障处理单元(PEs)应完成的计算,来保持DNN推理的准确性和性能。
注意:这篇文章关注点在于永久性故障
二、Intro
-
永久性故障的影响:
- 在基于Systolic阵列的DNN加速器中,永久性故障会显著影响DNN推理的准确性。
-
现有的解决方案:
- 软件解决方案:一些解决方案通过重新训练整个DNN模型来更新每一层的权重矩阵,另一些则避免使用有缺陷的PE进行关键计算。
- 缺点:重新训练的模型和新的映射策略在添加约束条件后(如避免多个故障PE带来的不规则数据流)不太可能收敛。
- 软件解决方案:一些解决方案通过重新训练整个DNN模型来更新每一层的权重矩阵,另一些则避免使用有缺陷的PE进行关键计算。
这里文章里说重新训练,其实我个人有点不理解,有些PE不能用了,直接告诉操作系统 或者发送指令的时候不用这些PE不就好了吗?
一些可能的猜测是,在某些研究中,重新训练DNN模型是为了调整模型参数,使其能够适应由于硬件故障(如PEs故障)引起的计算资源变化
-
- 硬件解决方案:通过增加冗余硬件组件(如MAC单元、PEs和链接)来避免永久性故障的负面影响。
- 缺点:这些技术不可避免地会增加显著的成本、过多的功耗和延迟。
- 硬件解决方案:通过增加冗余硬件组件(如MAC单元、PEs和链接)来避免永久性故障的负面影响。
-
FSA架构的目标:
- 本文提出的FSA设计旨在在存在永久性故障的情况下保持DNN推理的准确性,且带来最小的开销。
- FSA的核心是一个统一的重新计算模块(RCM),它可以重新计算故障PE应完成的计算,且相比之前的工作具有更低的延迟和更高的能效。
三、 FSA架构设计
A. FSA设计概述
-
架构组成:
- FSA设计包括一个基于Systolic的中央阵列(CA),片上缓冲器和一个统一的重新计算模块(RCM)。
- Systolic阵列由256×256个处理单元(PEs)组成,并部署了多种数据流:输出固定(OS),权重固定(WS),输入固定(IS)。
-
数据流的选择:
- 数据流的选择揭示了在空间和时间上数据操作数(输入、权重或输出)的重用类型。
- 在DNN推理阶段,输入(激活值和权重)预先从片外存储器加载到输入缓冲器中,然后流入CA的PE阵列。
- 输入缓冲器由多个先进先出缓冲器(FIFO)构成,每个FIFO分配给CA的某一行或某一列。存储在FIFO缓冲器中的输入数据被组织为Systolic阵列。
-
PE的架构:
- 传统PE的架构包括一个乘加单元(MAC)和一个本地寄存器,用于本地存储数据(激活值、权重和部分和)。
- 根据应用的数据流,PE需要在本地寄存器中存储不同类型的数据。
-
数据流详细说明:
- OS数据流:PE在当前周期从前一PE接收数据(激活值和权重),将其存储在寄存器文件中,并在下一周期同时将数据传输到本地MAC单元和下游PE。部分和存储并累积在每个PE内,直到整个计算阵列的计算完成。
- IS和WS数据流:输入和权重矩阵分别预加载到每个PE的寄存器中,进行本地存储后执行必要的计算。部分和在同一列的PE中流动以获得所需的累积值。
-
统一RCM模块:
- FSA设计利用统一的RCM模块来维持在永久性故障下的DNN推理准确性。
- 在系统检测到故障PE后,这些故障PE的部分和会被直接设置为零,而其余PE的工作状态设置为正常,以确保CA内部的数据同步和数据流不中断。
- 故障PE的输出被设置为零后,这些PE的正确结果将由RCM计算并替换,保证最终的DNN推理结果。
B. 重新计算模块(RCM)设计
-
RCM模块功能:
- RCM模块重新计算原本映射到故障PE的激活值和权重矩阵的乘积。
- RCM由一个RCM缓冲控制器和重新计算单元(RUs)组成。
-
RCM缓冲控制器:
- 假设使用内建自测试(BIST)检测CA内部的故障PE,并将其位置存储在BIST模块中的故障检测表中。
- RCM缓冲控制器接收来自BIST模块的故障PE地址,包括X和Y坐标。
- 输入缓冲器由多个FIFO组成,每个FIFO映射到CA的一行或一列。因此,使用故障PE的坐标,RCM缓冲控制器可以轻松找到相应的FIFO,直接读取所需的激活值和权重。
- 不同于之前的设计(需要通过整个CA传输激活值和权重数据给冗余PEs),提出的设计消除了过多的数据传输,从而减少了重新计算的延迟。
-
重新计算单元(RU):
- RU的目的是重新计算给定故障PE所需的部分和。
- 每个RU集成了一个MAC单元(包括一个加法器和一个乘法器)、一个本地寄存器和一组多路复用/解复用器(MUX/DEMUX)。
- MAC单元的乘法器计算权重和激活值的乘积,并将结果传递给加法器,后者再计算部分和。
- 寄存器用于本地存储部分和,并将其传输到CA的寄存器,以替代故障PE的结果。
- 为了处理多个故障PE,RU可以扩展为RU阵列。MUX和DEMUX用于将当前RU连接到相邻的RU,并选择输出部分和的链路。
- 本地寄存器从上游RU接收部分和,并将其传输到下游RU,然后传输到Systolic阵列的寄存器中。
- 该设计还可以通过简单地停用和绕过RU阵列中的故障RU来容忍RCM中的故障RU。相关的停用和绕过逻辑未显示以保持清晰。
后续的设计是对之前思路的扩充,有兴趣可自行查看原文