当前位置: 首页 > 编程日记 > 正文

最新组合式模型量化方法,实现FPGA最高硬件利用率,准确率-推理速度达到SOTA...


作者 | 王言治

来源 | AI科技大本营(ID:rgznai100)

深度神经网络(DNN)在图像、语言处理等领域获得了巨大成功,而如何将这些网络部署在ASIC、FPGA等嵌入式设备仍是热门研究方向。结构搜索,以及传统的剪枝、量化等压缩方法,都可以有效减小模型的内存占用和计算量,故而已经成为模型部署前的必经工序。其中模型的量化操作简单,收益直观,可以在损失很小的精度的前提下轻松将模型大小压缩数倍,成倍的提升运算速度,故而一直是模型压缩的热点研究方向。

近期美国东北大学王言治教授和林雪教授研究组提出了一种组合式量化方法,在获得更高准确率的同时,最大限度提升了FPGA的硬件利用率,实现了SOTA的准确率-推理速度共同优化。

该文章提出的Mixed Scheme Quantization (MSQ) 在Zynq XC7Z020 and XC7Z045上分别实现了2.1倍和4.1倍的加速,并将多任务模型在4bit下保持与浮点模型相似的精度。该文章收录于计算机体系结构顶会The 27th IEEE International Symposium on High-Performance Computer Architecture (HPCA-27)。

现有的量化方法

模型量化是指将权重和中间特征用更低的bit数表示,例如相比于FP32(浮点数),int8、int4甚至binary(1-bit)、ternary(2-bit)可以成倍减少模型大小,并极大的提升运算速度。难点在于,一方面,如何在使用低比特的同时保持模型的准确率,如binary和ternary量化,一般会造成分类任务(如ImageNet)上3%-10%的精度损失。另一方面,低比特算子本身的设计也要依据不同硬件平台的支持情况制定最优方案。现有的低比特算子主要可以分为如下两类。

定点数量化:直观的用低比特定点数代替浮点数,从而利用硬件支出更低的低比特乘法和加法。

2的幂量化:将权重量化为2的幂形式,从而权重与输入的乘法操作可以被替换为成本极低的移位运算,可以较大地提升运算速度。但是其量化数值的分布极端不均匀常常导致精度下降。

基于此,该文专注于更容易保持精度的4比特量化,在算子上同时采用了定点数和2的幂量化方法。

本工作的方法

由图所示,以4比特量化为例,定点量化是均匀分布量化中心点,所以可以达到较少的准确率损失。但网络间的运算操作仍是较复杂的乘法运算。反之,2的幂则可通过移位加法大幅提升运算速度,但由于2的幂的不均匀分布(多数量化中心点集中于0附近)导致单纯使用2的幂量化则会产生无法忽视的准确率损失。此外,提升2的幂量化的比特数仅会过度提升0附近分辨率,并不能改善精度损失。

如何才能鱼与熊掌兼得?此篇论文首先使用两个2的幂之和作为量化数值的表示形式,也就是sum-power-of-2(SP2)。SP2有类似定点量化的均匀分布,同时其分辨率在0附近相对较高,更适合高斯分布的权重。SP2可以加法以及移位取代原先昂贵的乘法运算,进而大大提升了运算速度,并保持了准确率。

再进一步透过上表可以详细了解定点量化以及2的幂之和量化方法两者间的运算差异。以一次权重与激活函数运算为例,若是定点量化,必须进行累加多次,是较为复杂的乘法运算。反之,若是SP2量化,只需进行两次移位以及一次加法就能完成,如此作法将能大大节省了运算成本!

然而,仅仅如此是不够的,因为不论是上述何种量化方法,均只能利用硬件资源的一部分,导致剩余部分闲置浪费。现有的方法大多数局限于对某一种方法的设计与提升,而忽视了在特定硬件,例如FPGA上,存在着多种计算模块可供利用。此时,设计不同的算子在相应模块上并行计算,将大大提升硬件利用效率。

本工作同时采用定点数和2的幂两种量化方法 Mix scheme quantizaiton(MSQ),如下图显示,可以定点量化以及2的幂量化分别采取异质化的设计,前面也提到因为定点数的乘法较为复杂,所以定点数可以置于FPGA的DSP模块上运算,而2的幂量化方法,由于已经将乘法替换为移位运算,则可以完全置于Look Up Table (LUT)模块进行计算,如此可以平行充分利用了FPGA的运算资源,所以在运算速度上将显着比仅使用定点量化或是2的幂量化都来得更加高效。

至于如何决定神经网络层裡哪些权重要是定点量化,哪些权重又必须是2的幂之和量化,在AUTOQ: AUTOMATED KERNEL-WISE NEURAL NETWORK QUANTIZATION ㄧ文(第7页)也提到,透过强化学习进行模型结构搜索,发现他们的算法可以针对不同卷积核中的权重方差来给予不同精度分配。

换个角度思考,若单纯以每个滤波器的方差进行判断,决定哪个滤波器要使用定点量化或是2的幂之和量化,既可以直接省去大量结构搜索的时间,又天然的适合硬件并行运算。并且,虽然2的幂之和量化中心附近较单纯2的幂量化分佈更加均匀,但仍然有集中在0附近的趋势。所以,把权重分布较均匀(方差大)的过滤器使用定点量化,而权重分布较集中于0附近的(方差小)过滤器则采用2的幂之和量化,不仅简洁直观地解决了不同量化方法的选取问题,还能在准确率上进一步提升甚至达到无损。

算法实现

确定了量化目标,该文采用直通估计器(STE)和 ADMM(Alternating Direction Method of Multipliers)两种量化算法,分别应用于中间特征和权重的量化。其中权重采用的ADMM算法具有非常强的自由度和收敛效果,适合自定义的SP2量化目标。而中间特征参与运算时,在权重是SP2的情况下就可以做到移位运算,故而全部采用直通估计器做简单的定点数量化。

模型精度展示

在准确率的结果表现上,MSQ超越现行各种SOTA的量化方法,以下表ResNet-18在Imagenet 资料集表现为例,MSQ比未量化前的基础模型更加提升了0.51%的准确率。(量化带来的预防过拟合效果)且不仅仅是在图像分类上准确率达到最高,同样在YOLO-v3目标检测的任务上也有相当不错的结果,在640分辨率下mAP几乎无损。另外,在语音识别的任务上同样可以在4bit轻松达到不掉精度的效果。验证了MSQ框架的泛用性,非仅限于单一任务。

硬件利用率与推理速度

在硬件利用率方面,他们以MSQ与传统定点量化方法相比,并分别实验在两块FPGA(XC7Z045以及XC7Z020)上。如下图显示,由于传统定点量化方法多数仅能利用FPGA的DSP运算资源,导致XC7Z020的LUT资源仅使用45%,XC7Z045更只使用了24%。随着2的幂之和使用比例的提升,LUT的资源利用率也相应增加,最终他们提出的MSQ量化框架在同样DSP用满的情况下,XC7Z020的LUT资源使用达77%,XC7Z045的LUT资源利用也有72%。

硬件利用率也直接指导了算法上最优的定点数-SP2选取比例。根据该文的实验结果,在运算单元较少的XC7Z020芯片上,定点数-SP2比例在1:1.5时并行效果最好,硬件吞吐量达到最大。而对于更大的XC7Z045,这个比例在1:2时达到最优。

FPGA的LUT资源利用率的提升也反映在吞吐量上,如下表显示,以XC7Z020 为例,相比传统定点量化方法,MSQ的峰值吞吐量增加了2.5倍(从52.8到132GOPS),XC7Z045更提升多达3倍(208到624GOPS)。

论文中也提及延迟度表现对比,XC7Z020在传统4比特定点量化的ResNet-18处理每张图片的延迟为100.7毫秒,在MSQ量化框架下仅需47.1毫秒,提升2.13倍。XC7Z045也从25.1毫秒減少至10.1毫秒,提升倍率为2.49倍。若与现行通用的8比特量化框架相比,MSQ在XC7Z020可以减少3.83倍的延迟,XC7Z045延迟更能减少至4.48倍。在能量效率上,基于MSQ 4比特量化的FPGA推理相比于基于Tensor-RT的轻量GPU NVIDIA Jetson AGX 能耗低3倍(4W vs. 15W), 同时速度更快(ResNet-18: 99FPS vs. 78FPS)。

结语

如何依据不同的硬件设备提出最优的量化框架仍然是一个极具挑战性的课题。MSQ融合不同量化方法达到最佳硬件利用率的创新思维,为模型量化提出不同维度的解决方案,并且能在极小或是无准确率损失的情况下减少2-4倍的延迟。

论文链接:

https://arxiv.org/pdf/2012.04240.pdf

作者简介:

王言治是美国东北大学电子与计算机工程系助理教授。他在清华电子系和南加州大学拿到本科和博士学位。他的主要研究方向是深度神经网络的加速与安全性。他们的CoCoPIE压缩编译协同优化框架可以实现大多数神经网络在移动端的实时推理。他的文章广泛发表于各个顶会顶刊,包括机器学习方向AAAI,CVPR,ICML,ICCV,ICLR,IJCAI,ECCV等,电路与设计自动化方向DAC,ICCAD,ISSCC,FPGA等,计算机系统方面ASPLOS,ISCA,MICRO,HPCA,CCS,VLDB,PLDI,ICS,PACT等。他的文章引用超过7200次,得过Google,Mathworks, Intel等研究奖项,得过4项最佳论文奖,另外10次提名,多次设计竞赛奖项。他的研究工作被媒体广泛报道和引用超过400次。他的多位学生已经在各个学校担任教职,包括康涅狄格大学,克莱姆森大学等,工作单位包括谷歌、脸书、腾讯、滴滴(超新星员工)。

更多精彩推荐
  • 2020 ACM Fellows 名单出炉,13 名华人入选,7 名来自国内!

  • 舌尖上的AI:人工智能技术正在被“端上”餐桌

  • 腾讯AI足球队夺冠Kaggle竞赛,绝悟强化学习方案迁移至足球队

  • 用Matplotlib轻松复刻分析图,看看哪个城市买房最自由

  • 精彩碰撞!神经网络和传统滤波竟有这火花?

相关文章:

消息服务发送短信,手机接收不到短信解决思路

阿里云使用消息服务,发送注册码给手机。测试几次发现手机都接收不到,后台也没报错!今天我提交自己的工单,售后工程师已经帮我解决了,非常感谢他!官方代码:https://help.aliyun.com/document_det…

Asp.net中具体的日期格式化用法

1.绑定时格式化日期方法: <ASP:BOUNDCOLUMN DATAFIELD "JoinTime " DATAFORMATSTRING "{0:yyyy-MM-dd} " > <ITEMSTYLE WIDTH "18% " > </ITEMSTYLE > </ASP:BOUNDCOLUMN > 2.数据控件如DataGrid/DataList等的件格式…

日本「AI 鱼脸识别」项目,每分钟识别 100 条

来源 | HyperAI超神经头图 | 视觉中国近日&#xff0c;日本的一个 AI 分拣鱼类项目进入实验阶段。这将有望改善日本渔业劳动力老龄化及短缺的社会现状。日本作为岛国&#xff0c;其独特的地理位置&#xff0c;让国民自古以来就跟鱼结下了不解之缘&#xff0c;甚至形成了其独特的…

使用Spring实现邮件发送

2019独角兽企业重金招聘Python工程师标准>>> 这两天写个小程序需要使用邮件发送的功能&#xff0c;在网上搜索了一帮子文章&#xff0c;感觉还是使用Spring的邮件发送功能比较方便&#xff0c;哈哈&#xff0c;懒人就这样子了&#xff0c;不想再动了。整好了&#x…

GZip压缩与解压缩

GZIP的压缩与解压缩代码&#xff1a; public static class CompressionHelper{/// <summary> /// Compress the byte[] /// </summary> /// <param name"input"></param> /// <returns></returns> public static byte[] Compres…

String.Format()方法

String.Format方法是我们在.Net应用开发时经常使用到的&#xff0c;它的灵活使用有时能够达到事半功倍的效果&#xff0c;下面我们就借用MSDN上的一个示例来向大家展示String.Format的各种用法。 该示例展示了Numeric、DateTime和Enumeration标准格式的使用&#xff0c;另外&am…

Brian 的 Perl 问题之万能指南

为什么80%的码农都做不了架构师&#xff1f;>>> PerlChina brians Guide to Solving Any Perl Problem Home Page | All Pages | Recently Revised | Authors | Feeds | Export | 原 名&#xff1a;Brian’s Guide to Solving Any Perl Problem 中 文: Brian 的 Pe…

联手小米,雀巢中国推出健康管家Nesfinity,满足个性化生活需求管理

1月20日&#xff0c;雀巢中国携手小米战略合作正式开启&#xff0c;双方共同打造的雀巢健康管家“Nesfinity”正式发布。这项综合性智能健康生活新生态的合作&#xff0c;不仅开启了雀巢中国在智能物联网和大数据应用的新历程&#xff0c;更是双方由品牌合作跨入战略合作的开端…

使用joda-time工具类 计算时间相差多少 天,小时,分钟,秒

下面程序使用了两种方法计算两个时间相差 天&#xff0c;小时&#xff0c;分钟&#xff0c;秒 package jodotest;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.joda.time.DateTime;import org.joda.time.Days;import …

C语言格式控制符和转义字符

1. 格式控制符 格式输出printf 作用是向终端输出若干个类型任意的数据。 格式&#xff1a;printf &#xff08;格式控制符&#xff0c;输出列表&#xff09; 1) 格式控制符 l &#xff05; 格式说明引导符。 l &#xff0d; 指定…

面试高频题:单链表的逆置操作/链表逆序

函数内对形参的操作并不能影响实参&#xff0c;函数内修改的是实参的副本。要想在函数内部修改输入参数&#xff0c;要么传入的是实参的引用&#xff0c;要么传入的是实参的地址。 #include <iostream> #include <cstdlib> #include <cstring>//strlen using…

猖狂!微软、思科源码惨遭黑客 100 万美元打包出售

【编者按】SolarWinds 黑客攻击事件又延伸出新的危害了&#xff1a;微软、思科、FireEye 等公司的源代码在一网站公开出售&#xff0c;明码标价&#xff0c;甚至打包价为一百万&#xff0c;究竟是什么情况&#xff1f;整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;CSDNn…

vmstart的用法

vmstat命令是最常见的Linux/Unix监控工具&#xff0c;可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率&#xff0c;内存使用&#xff0c;虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令&#xff0c;一个是Linux/Unix都支持&#xff0c;二是…

配置.net 3.0开发环境

开发.net 3.0 应用程序&#xff0c;需要配置开发环境。配置步骤如下&#xff1a;1. 开发.net 3.0&#xff0c;首先当然要安装.NET Framework 3.0 了安装前使用windowsupdate安装好最新的更新&#xff08;Windows XP SP2 和Windows 2003 SP1一定要安装&#xff09;&#xff0c;下…

杭电 hdu 2096

小明AB&#xff1a;#include<iostream> using namespace std; int main(){int n;cin>>n;cin.ignore();while(n--){int a,b;cin>>a>>b;cout<<(a%100b%100)%100<<endl;}return 0; }转载于:https://blog.51cto.com/beyond316/1261849

关于2021年及未来,人工智能的5大趋势预测

吴恩达教授&#xff08;美国斯坦福大学计算机科学系和电子工程系副教授&#xff09;曾反复强调一句名言&#xff1a;"人工智能是新电力。" 我们正跟随着人工智能发展的脚步&#xff0c;走向第四次工业革命的浪潮之巅。 毋庸置疑&#xff0c;人工智能已经成为社会进步…

京东618:智能机器人JIMI的进击之路

ArchSummit全球架构师峰会深圳站将于2017年7月7日~8日在深圳华侨城洲际酒店召开&#xff0c;大会设置了相关专题来深入解读电商大促背后的技术故事&#xff0c;大会还邀请了eBay、WalmartLabs等国外顶尖技术专家&#xff0c;分享AI促销、搜索引擎、异地多活、库存物流等核心架构…

读懂深度迁移学习,看这文就够了 | 赠书

百度前首席科学家、斯坦福大学副教授吴恩达&#xff08;Andrew Ng&#xff09;曾经说过&#xff1a;迁移学习将是继监督学习之后的下一个促使机器学习成功商业化的驱动力。本文选自《深度学习500问&#xff1a;AI工程师面试宝典》&#xff0c;将重点介绍目前最热门的深度迁移学…

Visual Studio 2005 IDE 技巧和窍门

发布日期&#xff1a; 2007-02-26 | 更新日期&#xff1a; 2007-02-26James Lau Microsoft 项目经理 适用于&#xff1a; Microsoft Visual Studio 2005 摘要&#xff1a;Visual Studio 2005 是目前业内一流的开发工具&#xff0c;我想在此与大家分享一些使用技巧和窍门&#x…

ZOJ 1025 Wooden Sticks(快排+贪心)

题目链接&#xff1a;http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId25 题目大意&#xff1a;机器运送n个木条&#xff0c;每个木条有一个长度和重量。运送第一根木条需要1分钟的准备时间&#xff0c;接下来如果后一根木条的长度和重量都大于等于前一根木条&…

Swift:UIKit中Demo(一)

关于Swift的基本概念及语法知识。我在前面的章节中已经介绍了非常多。这一节和下一节主要有针对性的解说Swift在实际UIKit开发中的使用场景及注意点。先来看看Demo的终于效果图。Demo分析&#xff1a; 1. 界面上面有三个button&#xff0c;他们的宽度不一致。 2. 点击每一个but…

jdbc封装与多并发的共鸣

欢迎来到&#xff1a;http://observer.blog.51cto.com代码的封装是一门艺术&#xff0c;封装得好&#xff0c;不但给自己便利&#xff0c;还可以给自己的维护提供帮助&#xff1b;同时&#xff0c;封装得好&#xff0c;还可以给看自己代码的人以赏心悦目的感觉&#xff0c;团队…

计算机视觉怎样实现自我超越?更大规模更精准的数据

最新发布的《2021中国人工智能应用趋势报告》强调&#xff0c;数据、算力和算法是支撑人工智能发展的"三驾马车"&#xff0c;为模型训练提供基本资料的「数据」&#xff0c;是人工智能的根基。 随着互联网、社交媒体、移动设备和传感器的大量普及&#xff0c;其产生…

Visual Studio 2005 Web Deployment Projects版本不同引发的问题

为了方便Visual Studio 2005发布为单一dll&#xff0c;微软发布了一个Visual Studio 2005 插件&#xff0c;Visual Studio 2005 Web Deployment Projects&#xff0c;在微软的不同文档里&#xff0c;这个插件提供了两个下载地址&#xff0c;分别是&#xff1a; 下载地址一&…

【书籍下载链接】_2_第二轮_计算机专业书籍

各位朋友&#xff0c;下面是我收集的书籍&#xff0c;介绍给大家&#xff0c;有需要可以分享给大家&#xff0c;如果看的还可以&#xff0c;请购买纸质版的图书。 驱动器 J 中的卷是 Elements 卷的序列号是 8AAF-3206 j:\ 的目录 2014/01/20 20:00 1,533,385 WinCE.pdf2010/09/…

VS2005发布、生成网站时如何设置固定的dll文件名?

在用VS2005发布网站项目时,默认生成bin目录下的.dll文件名是随机命名的; 如果要固定生成文件名如何固定呢&#xff1f;有以下两种方案&#xff1a; 一、每个页面的程序集分别生成对应的dll; 方法&#xff1a;在“发布网站”的选项中&#xff0c;勾选“使用固定命名和单页程…

android 广播机制

1&#xff1a;首先说andoid 广播分为系统的和 自定义的 2&#xff1a;注册方式呢&#xff0c;也是两种&#xff0c;1&#xff1a;静态注册&#xff0c;在manifest.xml 文件中注册的 2&#xff1a;动态注册&#xff0c;用filter 区分 不说了 占代码 首先是动态注册&#xff1a;…

2021第一融!第四范式完成D轮7亿美元融资

来源丨第四范式头图丨来源于第四范式近日&#xff0c;第四范式宣布完成D轮融资&#xff0c;融资金额7亿美元。本轮融资由春华资本、博裕资本、厚朴投资领投&#xff0c;并引入国家制造业转型基金、国开、国新、中国建投、中信建投、海通证券等战略股东&#xff0c;红杉中国、中…

springboot-26-springboot 集成rabbitmq

rabbitmq是基于AMQP规范的一个消息代理, 它可以兼容jms, 支持其他语言, 并且可以跨平台 1, 安装 1) 普通安装 度娘: 2) docker 安装 sudo docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management 安装成功后: 使用 guest/guest 用户登录 2 使用: 1) 添加 rabbi…

asp.net中的联动菜单

目标达到的效果&#xff1a;两个下拉框&#xff0c;第二个跟随第一个变化而变化&#xff0c;使用客户端脚本JavaScript在ASP.NET环境下实现。 第一步&#xff1a;建立JavaScript脚本&#xff1a; 在Page_Load中建立并注册这个js脚本&#xff1a; string scriptKey "Menu…