前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习笔记:深度学习与INT8

学习笔记:深度学习与INT8

作者头像
Lauren的FPGA
发布2020-06-30 17:43:13
1.7K0
发布2020-06-30 17:43:13
举报
文章被收录于专栏:Lauren的FPGA

上期内容:过约束到底怎么做

越来越精确的深度学习模型面临两大挑战:计算密度越来越高;存储带宽越来越大。解决此问题的可行方法之一就是降低数据位宽。这是因为较低的数据位宽可以有效降低计算密度,同时减少计算时的功耗开销,而且也降低了存储需求。但是,这里有个前提条件,那就是降低位宽不能损失模型性能,或者降低位宽带来的收益远大于因此造成的模型性能损失,且损失是在可接受的范围之内。实践证明,在某些CNN模型中,采用INT8与采用浮点数据相比,精度损失很小。

这里我们将关注点放在INT8的具体实现上。就CNN模型而言,INT8主要用在卷积层。为便于说明,我们看一个典型的卷积层案例,如下图所示。输入为RGB三个通道,共有4套滤波器,每套滤波器有三个通道,与输入的三个通道相对应,输出为4通道。

采用FPGA实现时,核心部分是其中的乘加运算。为了充分利用FPGA内部的DSP48资源,需要探测上述结构的并行性。两种并行性如下图所示。左侧的并行性在于将来自于同一个IFM的不同数据同时与同一套权值相乘;右侧的并行性在于将同一个IFM的数据与两套不同的权值相乘。我们采取第二种并行性。这意味着IFM数据被复用,就下图而言,IFM的数据率将是权值数据率的一半。

DSP48E2的结构如下图所示(图片来源:wp486, Figure 1),这里我们将利用一个DSP48E2同时实现两个INT8乘法,前提条件是这两个INT8乘法具有一个相同的因子,也就是同时实现axb和dxb。这就需要用到一些技巧,毕竟从图中不难看出,只有一个可用的乘法单元。

考虑到axb和dxb等效于(a+d)xb,这就可以利用到DSP48E2中的预加器(Pre-Adder)。但同时还要注意到,我们最终期望得到的是两个乘积axb和dxb,而不是乘积和。因此,我们按如下图所示操作。DSP48E2的端口A为27位,将其高9位填充数据a(这里对a做了符号位扩展,由8位变为9位),低18位填充0。DSP48E2的D端口为27位,将数据d进行符号位扩展,低9位填充数据d。DSP48E2的B端口为18位,将数据b进行符号位扩展,低8位填充数据b。最终,DSP48E2的P端口(48位)将输出ab(或ab-1)和db。

基于System Generator,我们搭建了上述模型,如下图所示。在实际应用中,充分利用DSP48E2实现两个INT8相乘可有效节省乘法器资源,提高乘法器的利用率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lauren的FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档