Mixed Precision Quantization for ReRAM-based DNN Inference Accelerators
基于 ReRAM 的 DNN 推理加速器的混合精度量化
一、文章要点
- 背景:ReRAM交叉阵列能高效地执行MVM操作,但ADC的高能量和面积消耗是一个主要问题。
- 问题:传统的量化流程未考虑部分和量化,这在ReRAM架构中非常重要。
- 解决方案:提出了一种混合精度量化方案,联合对每层DNN的权重、输入和部分和进行量化,并使用深度强化学习自动搜索最佳量化配置。
- 效果:该方案能显著减少推理延迟和能量消耗,且仅损失1.18%的推理精度。
ReRAM交叉阵列的工作原理
- 权重表示:权重存储在ReRAM单元中,每个单元的电导表示权重值。
- 输入信号:输入信号通过DAC转换为模拟电压,施加到交叉阵列的行上。
- 输出信号:交叉阵列的列上产生电流,代表矩阵-向量乘积的结果。
- ADC转换:输出电流通过ADC转换为数字信号。
为什么要量化?
- 减少存储需求:量化可以将权重和输入从高精度表示(如32位浮点数)转换为低精度表示(如8位整数),大大减少存储空间。
- 提高计算效率:低精度运算比高精度运算更快,能显著提高计算效率。
- 降低能耗:低精度运算的能耗较低,有助于节省能量。
混合精度量化
- 权重量化:通过使用更少的比特来表示权重值,降低存储和计算成本。
- 输入量化:通过量化输入信号,减少数据传输和计算开销。
- 部分和量化:降低ADC的精度以减少能量消耗和芯片面积。
图1展示了ReRAM(电阻式随机存取存储器)交叉阵列(crossbar)的基本架构,以及量化在不同步骤中的应用。
-
输入量化:
- DAC(数模转换器):输入信号通过DAC转换为模拟信号。这些模拟信号作为电压(Vi)应用在交叉阵列的行上。
-
权重量化:
- 权重(gij)存储在交叉阵列的存储单元中,每个存储单元的电导(conductance)表示一个权重值。
- 权重量化通过减少每个存储单元中表示权重的比特数来实现,例如,每个权重可以用2位表示。
-
部分和量化:
- 交叉阵列的每一列输出电流(Ij),这些电流代表矩阵-向量乘积的结果。
- 输出电流通过ADC(模数转换器)转换为数字信号。在这里,部分和量化通过降低ADC的分辨率来实现,从而减少能耗和面积占用。
二、文章方法
图3展示了如何使用强化学习来实现DNN在ReRAM加速器上的混合精度量化。这个流程包括以下几个主要部分:
-
Actor(策略生成器):
- 生成策略:Actor根据当前的价值函数估计生成新的量化策略。
- 策略解析:生成的策略由DNN/ReRAM配置器解析,确定每层DNN的ADC精度和位宽配置。
-
Critic(价值估计):
- 计算Q值函数:Critic读取环境的奖励,计算MDP(马尔可夫决策过程)的Q值函数。
-
奖励部分:
- 计算奖励:根据量化模型和原始模型的损失,以及DNN配置,计算当前状态和动作的奖励。
-
量化模型评估组件:
- 测试数据集:生成随机测试样本批次。
- 量化DNN模型和全精度DNN模型:使用测试数据进行模型推理。
- 损失计算:比较量化模型和全精度模型的损失,计算精度下降的代价。
强化学习的量化流程
1. MDP建模
-
状态空间(S):
- 包含所有可能的DNN配置。由于DNN层数较多,状态空间非常大。
-
动作空间(A):
- 定义为DNN每层的所有可能量化配置,包括权重量化、输入量化和ADC精度。
-
转移函数(P):
- 按层逐步量化DNN。应用某个动作后,环境移动到下一层。
-
奖励函数(R):
- 奖励捕捉量化DNN的精度、功耗和延迟。用损失差异和硬件成本表示。
-
折扣因子(γ):
- 设置为1,表示只关心完全量化DNN的最终精度。
2. 动作定义
- 动作定义为DNN每层的量化配置,包括权重量化、输入量化和ADC精度。每个参数的可能值详见表2。
3. 奖励分配
- 奖励定义为量化DNN在ReRAM加速器上运行时的精度成本和硬件成本(能量和延迟)的函数。
- 精度成本:量化模型和原始模型的交叉熵损失差异。
- 硬件成本:每层的位宽分数加权后计算。
4. 学习算法
- 使用策略梯度算法(policy gradient)寻找最优策略。具体步骤如下:
- 初始策略随机生成。
- 使用价值估计算法评估状态-动作对的期望值。
- 计算参数的梯度,更新策略,生成新策略。
- 重复评估和更新过程,逐步优化策略。