文献阅读和学习汇总:MSD-混合精度硬件加速器3(串并混用)

本文探讨了如何利用自定义的RSD数据表示和混合精度技术在FPGA上优化神经网络加速器,强调了DSP和LUT资源的优势,以及串行并行结构在负载均衡和稀疏性处理上的创新。文章还介绍了基于RSD的权重编码和异构加速器设计,包括硬件/软件协同和双缓冲策略以提高性能。
摘要由CSDN通过智能技术生成

阅读文献:

(1)MSD: Mixing Signed Digit Representations for Hardware-efficient DNN Acceleration on FPGA with Heterogeneous Resources

(2)DeepBurning-MixQ: An Open Source Mixed-Precision Neural Network Accelerator Design Framework for FPGAs

(3)BitCluster: Fine-Grained Weight Quantization for Load-Balanced Bit-Serial Neural Network Accelerators

        这篇文章是采用串行并行加速器混合使用结构,同样利用了数据的稀疏性;正好我还没有看过有关串行加速器相关的多精度加速,补一下;而且有我之前看的几篇文章中没有提到的一些观点,所以特地记录一下。

1、DSP和LUT

        首先是关于DSP和LUT的一些区别看法:虽然诸如数字信号处理(DSP)块之类的粗粒度可编程资源在处理用标准2的补码表示以相对较宽的位宽(即8到16位)编码的数据方面非常有效,但正是细粒度可重新配置逻辑资源(即LUT)的灵活性使其独特地有望加速深度量化的DNN。

        总结就是,较宽的位宽来说,DSP处理速度更快,但是对于目前神经网络来说,位宽量化逐渐向低bit发展,因此使用DSP会造成资源的损耗。相比之下,LUT搭建的乘法器结构更加灵活,并且适用于低位宽。这里就要提一嘴我前段时间看的文章(2),它的思路就是把多个低位宽的数压缩合并,然后传到一个DSP资源进行加速运算,但是我实在没有看到它计算完之后的分离操作是怎么做的,太多算法相关东西了,所以就没有再深入了解这方面。感觉对我来说还是用LUT吧。

2、创新点

        许多早期工作已经证明了利用位串行计算在FPGA上进行混合精度DNN推理的硬件优势,具体来说,可以通过跳过输入中无效的零位来加速位串行乘法器。但是无效位数的数量会导致不同单元模块的工作不平衡,因此利用比特级稀疏性也可能具有挑战性。如果输入数据具有任意数量的有效位(EB),则它也可能遭受PE的不平衡负载,因为具有最多EB的数据会主导性能。

这篇文章主要创新点是:

        1、提出了一种基于RSD(自定义的限制有符号数字数据表示,该数据表示在编码方案中使用三进制数字集{-1,0,+1})表示的权重微调和编码算法。硬件可以利用比特级稀疏性,并通过将权重中的非零比特的数量限制为相同来实现工作负载平衡。RSD量化的权重通常导致较小的数值误差,并且可以有效地部署在位串行结构上。

        2、串行并行混用;开发了一个硬件/软件协同设计的DNN加速框架。硬件感知框架接收DNN模型,并自动为异构资源选择最佳EB配置、调度和工作负载划分。

        来看具体是怎么实现的。

3、RSD和DSP复用

        关于串行结构方面;首先EB是会被定义为2的整数幂大小的,以EB=2为例,下图对比了RSD和标准2的补码格式的区别。传统的方式是直接从最低位开始移除或添加1,直到当前的数据中EB的个数和设置的一致,这种方法会引入很大的误差。而RSD方式中引入了减法,以两个二的幂次方数相加或者相减的形式来组合完成数据表示,误差要比第一种方法小得多。表格最后一列显示了RSD的编码过程,SEL表示是加还是减,IDX表示为1位数的索引值。

        接着是实现串行乘法的硬件结构,如下图所示。该电路由数据寄存器、用于计算激活相反值的除法器(NEG)、桶形移位器和部分积累加器(PPA)组成。完成一次运算需要EB个周期。

        关于并行结构方面;它也提出了使用DSP进行数据压缩计算,和文章(2)不同,它使用的是同一个weight数据,因此只要确保中间保护位的分离足够合理,就可以得到正确的结果。此时输入的数据就是正常数据,而非RSD处理之后的数据。

4、异构加速器结构

        加速器由用于不同类型资源的位串行处理元件(BSPE)和位并行处理元件(BPPE)组成,分别针对位串行和位并行计算。应用脉动阵列作为BSPE和BPPE之间的连接,以进行均匀控制。映射到BSPE的权重将在传输到硬件之前进行微调和编码,但映射到DSP的权重保持原始格式。因此,在两种类型的PE中部署单独的权重缓冲区来存储不同的权重表示。此外,由于仅针对比特串行MAC进行加权以实现比特稀疏性,因此激活既没有量化也没有微调。因此,实现了一个全局激活缓冲区,以重用两种类型的PE之间的激活,并减少片上缓冲区和外部存储器之间的数据通信开销。采用输出固定脉动阵列,重复利用数据。并且BPPE会使用BSPE中DSP资源的累加器,达到充分利用资源的效果。

        再来看看工作流程,如下图所示。当它开始处理一个层时,加速器首先加载(LD)、执行(EX)、写回(WB)每个tile,然后对所有tile重复。全局控制器根据当前层的EB和两种PE中的工作负载比率来处理权重加载过程。此外,由于所提出的体系结构的内存层次结构基于双缓冲区策略,因此可以通过处理将三个阶段流水线化,大大提高了吞吐量并降低了延迟。

        权重分割比r定义为比特序列权重与总权重的比例,即r=weightBS/weightTotal,以划分工作负载。由于基于RSD的位串行乘法比DSP具有更大的计算延迟,BSPE的工作负载对整体计算延迟有更显著的影响。此外,最终硬件延迟还与数据I/O有关。当BS部分的权重增加时,通过基于不同EBL的微调获得的权重数据的量可以增加(例如,EBL=3)或减少(例如,EBL=1)。

5、总结和思考

        这篇文章硬件部分的优化差不多就是图上这些。另外,针对提出的RSD,有配套的量化代码实现,我看的时候还疑惑那些输入要弄成只有EB个1要怎么在硬件端实现,原来是通过软件来量化修改的呀。

        并且这篇文章硬件部分和软件部分都是完全开源的,感谢作者!

        最后记录一下最近看几篇混合精度的心得。看完这篇串并行混用的硬件加速文章后,我又去找了一篇单独串行结构的,也就是文章(3),感觉目前就我看到的几篇来说,串行结构都开始利用数据的稀疏性来做优化,并且配套有单独的训练优化代码;而并行结构则是想办法在结构上创新,并且也开始朝着稀疏性方向改进,就比如我上次看到的那篇。

       

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值