AddNet: Deep Neural Networks using FPGA-Optimized Multipliers
设计了一个常系数乘法器,比标准乘法器高效很多,然后训练网络设法让权重尽量往这几个系数上靠。
摘要
为了加速FPGA上的DNN,低精度算术运算因其可以节省硅片面积和提高吞吐量得到了广泛研究,然而这些优点牺牲了准确率,RCCM在节省硅片面积上是一种比低精度算术运算更好的方法。RCCM(Reconfigurable Constant Coefficient Multipliers)即可重构常系数乘法器,它仅使用加减法器、移位器和MUX将有限种的系数与输入值相乘,可以针对FPGA进行大量优化。我们设计了一系列针对FPGA逻辑定制的RCCM以确保其高效利用。为了最小化量化带来的损失,我们开发了一项新的训练方法,将RCCM可能的系数表示映射到权重分布,这样可以在使用RCCM的同时保持高准确率。经过测试,最高比传统八位量化节省50%的资源,从而实现加速和降低能耗。即使占用资源最少的RCCM也达到了6位定点精度,其他的都至少8位定点精度
一、简介
传统定点量化的一个限制是它的权重空间是均匀分割的。然而已经证明,同样数量非均匀分布的权重会得到更高的准确率,只要这个分布适当地匹配全精度网络的权重分布,因此降低精度可能不是节省硅片面积最好的方法。另一种方法是RCCM,它通过时分复用和资源共享来节省FPGA资源。RCCM仅使用加、减、移位和MUX实现,这意味着它不需要使用DSP模块,但它只能使用有限个系数。我们提出了AddNet以及训练它的方法,可以将RCCM有限个系数匹配到权重分布上。这样做比降低精度更能节省面积
AddNet包含以下几个阶段。首先,我们设计了一系列针对FPGA逻辑定制的RCCM,它们有可变的系数集,并且占用资源非常少。选择最匹配权重分布的系数集,然后将权重限于这些系数重新训练。本研究没有使用FPGA中的乘法器。在实际实现中,我们根据不同CNN层的资源和吞吐量要求选择使用自带乘法器还是RCCM
训练后的网络能学会让权重兼容RCCM来实现高性能和高准确率。对于给定的吞吐量,这可以显著减少资源使用,从而使我们的设计适合于资源受限的情况。此外,我们可以扩展设计的并行度以在相同资源消耗的情况下实现更高帧率。具体来说,本文做了以下贡献:
- 针对DNN的FPGA架构定制的一批新型RCCM,显著降低了资源需求
- 一种根据CNN中权重分布选择特定RCCM的分布匹配技术和一种可以兼容所选RCCM的训练算法
- 与低精度(1–6位)实现相比,我们的方法显著提高了准确率。与8位定点精度相比,我们在没有损失准确率的情况下显著减少了对查找表(LUT)的使用。此外,通过隐式权重共享减少了权重存储需求
二、背景
A. 卷积神经网络
略
B. 定点训练低精度网络训练通常保持单精度或双精度浮点数权重,直到推理前再将其量化。由于采用的量化函数是分段且恒定的,可以计算量化权重的梯度来更新对应的全精度权重。一个可以减少前向和反向过程中的不匹配的量化函数对高准确率是至关重要的。可以使用权重共享进一步提高准确率,它包括选择一个通过码本来索引的有限全精度权重集。与权重均匀分布的传统定点量化不同,通常选择这些权重以匹配目标分布来减少信息损失。使用尽可能小的权重集可以减少索引字的大小,从而减小内存占用量。但是,权重共享通常不应用于FPGA中,因为权重映射过程会在电路的关键路径中引入额外的延迟,并需要额外的硬件。此外,高精度算术单元也占用更多面积。利用隐式权重共享,无需任何映射硬件即可减少系数存储。同时,我们的RCCM针对FPGA硬件进行了优化以减少面积消耗
C. 小型软核乘法器
由于低精度DNN的兴起,小型乘法器受到更多的关注。FPGA内置了乘法器,直接调用它们似乎很自然。可以在一个18位乘法器中同时执行两个8位乘法。如果内置乘法器不够,则可以使用基于逻辑的高效乘法器即软核乘法器。实现软核乘法器的最有效方式是使用Booth4编码并且在同一LUT中同时映射Booth编码和解码器,可以将资源占用减少50%。然而只在字长大于16时才好用,在小字长时Xilinx Coregen效果最好。我们优化的乘法器增加了更多约束,所以不再支持任意定点数。这是通过应用可重构乘法器的概念来实现的
三、相关工作
四、AddNet可重构乘法器
A. 可重构乘法器
常系数乘法器是一种只用加、减和移位操作计算
的电路,其中c是预设系数。例如要计算
,可以将其改写为
RCCM是计算
的电路 ,其中
是离散系数集
内的一个元素,选择信号s字长为
。RCCM只用加、减、移位和MUX实现,在N很小时相较于通用乘法器节省了大量资源
图1
图1为系数集
时的RCCM,每个加法器都配了一个二选一MUX,s为选择输入。三个加法器对移位各种次数的x进行求和。例如,最上层的加法器负责计算:
最后输出为:
通过使用MUX可以实现加法器的复用
以前的RCCM研究主要针对预设系数进行优化,但在CNN中,这些系数即权重是不能事先知道的,因此本文不再寻找针对给定系数集的最优RCCM电路,而是寻找一种有效且资源占用极低的系数。这种低成本RCCM取代了常规CNN中的乘法器,它还可以储存选择信号s来代替对应的权重系数以节省存储空间
B. 将乘法器映射到FPGA
Xilinx FPGA的一个slice可以提供1个六输入LUT(拓扑A)或2个五输入LUT(拓扑B),因此如图2所示,我们设计了两种用于构建RCCM的基本拓扑结构以确保MUX适合加法器的需要,每种都包含一个加法器
图2
操作数以
的形式运算。在拓扑A中,
有四个源(其中
)而
有一个,即
。在拓扑B中,
有三个源(其中
)而
(其中
)有两个,即
。使用两位选择信号s来确定符号和值,显然操作数的种类比s能表示的数要多,所以需要一个函数
来选择真正的操作数,不同的RCCM可能使用不同的函数,这在设计时就要确定。其实还有别的方法将更多的输入源映射到加法器,但为了确保拓扑适合单个LUT实现,我们没有用那样做,并且通过实验发现我们这种方法已经足够了
现在FPGA的逻辑块都是由LUT组成的,后面接快速进位链,因此MUX可以在无需额外消耗的情况下扩展一个简单的加法器。如图3所示,只用到了XOR进位构成全加器
图3
C. 考虑的架构
通过对两种拓扑AB进行多种组合可以构成RCCM单元。拓扑A的优点是有更大的系数集,因为它的输入
有三个不同的源,拓扑B的
可以是负数或零,可以提供了关于零对称的系数。图4展示了三种不同的RCCM架构,分别称为2-Add、3-Add和4-Add,它们上半部分由1-3个拓扑A构成,下半部分是1个拓扑B以保持系数对称。对称的系数集能更好地匹配预训练的=CNN权重分布,因为权重通常也关于零对称。这些设计很容易实现流水线。输入
都被硬连接到左移操作符
,这不需要LUT资源。支持的系数集取决于
和
图4
这些RCCM可以有
个系数,其中
是选择信号s的位宽。假设最大移位次数限制为3,拓扑A有四种映射函数而拓扑B只有一种,则表I为三种RCCM最多能表示多少种系数集。通过遍历这些系数集,便可根据与预训练神经网络权重分布的相似性来找到所需的系数集。可以通过探索更多的映射函数来结果,该函数将生成大量系数集,但代价是执行时间更长
表I
五、AddNet训练
本节将讨论为给定CNN寻找最优系数集。CNN一般可以对其权重进行一定程度的正则化而不损失准确率,可以利用这一点,选择一个和权重分布很相似的RCCM系数集,通过再训练使网络学习该系数集的表示形式
A. 分布匹配
为了在量化训练中减少量化误差以实现高准确率,需要使用可以有效映射到全精度值的函数,这对于减少信息损失和好的训练初始化十分重要。定点量化法通常均匀地分割权重空间,但RCCM的系数集并不是均匀的,它的大小、范围都可以变化。因此为了有效的训练,我们使用Kullback-Leibler散度衡量两个分布相似度,选择了一个系数集大致匹配预训练权重的RCCM。设R、P分别代表系数集和预训练权重的分布,N的权重数量,则散度为
分布匹配即通过穷举找到散度最小的五个系数集,再选择含有系数最多的一个系数集,因为要尽可能增加再训练时可表示的状态。系数集中务必包含0,虽然也可以在流水线中通过重置输出触发器实现权重0,但这样做很麻烦。
AlexNet的权重分布如图5(a)所示,它接近正态分布,所以接近0的小权重出现地更频繁。表II为具有最佳分布匹配RCCM系数集,表III为对应的配置参数,图5(b)~(d)即为它们的分布图。穷举法能找到最有效的匹配,图5(e)是没有经过分布匹配的一组系数集,它的Top-1/Top-5准确率为53.8%/76.9%,而经过分布匹配的系数集则为55.8%/79.8%,可见有明显的提升,并且达到了全精度权重的效果
图5
表II
表III
B. 权重量化
为了利用上RCCM并取得高准确率,要训练网络去匹配底层推理硬件。在定点数训练中,对于每一层
,我们先将权重裁剪为
,其中M是每一步推理的范围超参数,然后将其量化为定点数。我们的乘法器包含一个定点数输入和一个系数集C中的值。在训练过程中,我们引入了函数
将浮点数量化,其中
为C中正系数被缩放
倍后的值。该式的目的是使量化后的权重值和系数集之间的量化误差最小。使用
进行缩放以便使
。通过分布匹配最小化了量化误差以实现有效的初始化。然后使用 stestraight-through estimator(STE) 重新训练网络,该方法支持反向传播中不可微的函数。
需要假设
,其中L是损失函数
前向传播时使用量化权重
进行推理,反向传播时仍然更新浮点权重
。在训练期间,
也会在反向传播时被更新。通过在前向传播中使用与乘法器兼容的表示,网络可以学习到准确率和硬件效率都很高的表示。 在训练完成后舍弃浮点权重
,并将
部署到硬件中
C. 激活值量化
初始训练结果与大于八位的二进制补码表示相比并没有降低准确率,所以我们先将激活值统一量化为八位。我们还相应地选择了RCCM的输入字长。在前向传播时,我们用函数G来近似函数g,它能将的实数
统一量化为k位数。m由无符号二进制补码定点表示,f是小数位数,因此
。算法1给出了训练过程的总结。
算法1
六、实验设置
本节讨论如何评估AddNet。我们使用VHDL实现了图2-图4的电路,并用它替换了Alpha Data的FPGA CNN库中定点乘法。
A. 系统概述
如图7(a)所示,加速核与PCIE接口集成在一起,使用DMA传输数据。
图7
B. 加速核
C. 架构
D. 存储占用
RCCM的一个优点就是减少存储,它不再存储系数
,而是存储它的索引s。这很像权值共享,但我们这个不需要电路实现译码本,可以直接隐式使用。
七、结果
八、总结
本文研究了针对CNN推理的可重构的常系数乘法器