- 主题技术
- 以原创技术系统为根基,SenseCore东升国际官网AI大装置为主题基座,布局多领域、多方向前沿钻研,
急剧买通AI在各个垂直场景中的利用,向行业赋能。
【东升国际官网泰坦公开课】模型量化相识一下?
导读
随着深度进建的发展,神经网络被宽泛利用于各类领域,模型机能的提高同时也引入了巨大的参数量和推算量。模型量化是一种将浮点推算转成低比特定点推算的技术,能够有效的降低模型推算强度、参数大幼和内存亏损,但往往带来巨大的精度损失。尤其是在极低比特(<4bit)、二值网络(1bit)、甚至将梯度进行量化时,带来的精度挑战更大。
2020年4月9日东升国际官网泰坦公开课第009期的线上直播课程,由东升国际官网钻研院--链接与编译团队的两位钻研员分享了团队在模型量化方面的的一系列钻研工作,其中蕴含CVPR 2020、ICCV 2019等多篇与北航刘祥龙教员团队合作的论文成就,快来一见为快吧~
课程PPT及视频回放获取方式见文末提醒~
Part 1 量化综述
1 什么是模型量化?为什么要进行模型量化?
模型量化是由模型、量化两个词组成。我们要正确理解模型量化,要看这两个词别离是什么意思。
在推算机视觉、深度进建的语境下,模型特指卷积神经网络,用于提取图像/视频视觉特点。
量化是指将信号的陆续取值近似为有限多个离散值的过程?衫斫獬梢恢中畔⒀顾醯牟街。在推算机系统上思考这个概想,通常用“低比特”来暗示。也有人称量化为“定点化”,但是严格来讲所暗示的领域是缩幼的。定点化特指scale为2的幂次的线性量化,是一种越发实用的量化步骤。

卷积神经网络拥有很好的精度,甚至在一些工作上好比人脸鉴别、图像分类,已经超过了人类精度。但其弊端也比力显著,拥有较大的参数量,推算量,以及内存占用。而模型量化能够缓解现有卷积神经网络参数量大、推算量大、内存占用多等问题,拥有为神经网络压缩参数、提升速度、降低内存占用等“潜在”优势。为什么“潜在”是加引号的呢?由于想同时达到这三个个性并不容易,在现实利用过程中存在诸多限度和前提前提。
另表,由于模型量化是一种近似算法步骤,精度损失是一个严格的问题,大部门的钻研都在关注这一问题。作为一个在公司支持好多业务线的团队,我们会在关注精度的同时,注沉部署最终的速度和资源占用情况。
2 压缩参数

模型量化在最初的界说里是为了压缩模型参数,好比韩松在ICLR2016上获得best paper的论文,初次提出了参数量化步骤。其使用k-mean聚类,让相近的数值聚类到统一个聚类中心,复用统一个数值,从而达到用更少的数值暗示更多的数,这是量化操作的一种规划。反过来,从量化数变到原始数的过程,称之为反量化,反量化操作完之后,模型就能够依照原来的方式进行正常的推算。
我们以为绝大部门的模型量化算法都能压缩参数,因而压缩参数的实用性不存在问题。
3 提升速度

量化是否肯定能加快推算?回覆是否定的,许大批化算法都无法带来内容性加快。
引入一个概想:理论推算峰值。在高机能推算领域,这概想通常被界说为:单元时钟周期内能实现的推算个数 乘上 芯片频率。
什么样的量化步骤能够带来潜在、可落地的速度提升呢?我们总结必要满足两个前提:
1、量化数值的推算在部署硬件上的峰值机能更高 。
2、量化算法引入的额表推算(overhead)少 。
要正确理解上述前提,必要有肯定的高机能推算基础知识,限于篇幅就不发展会商了。现直接给出如下结论:已知提速概率较大的量化步骤重要有如下三类,
1、二值化,其能够用单一的位运算来同时推算大量的数。对比从nvdia gpu到x86平台,1bit推算别离有5到128倍的理论机能提升。且其只会引入一个额表的量化操作,该操作能够享受到SIMD(单指令无数据流)的加快收益。
2、线性量化,又可细分为非对称,对称和ristretto几种。在nvdia gpu,x86和arm平台上,均支持8bit的推算,效能提升从1倍到16倍不等,其中tensor core甚至支持4bit推算,这也是极度有潜力的方向。由于线性量化引入的额表量化/反量化推算都是尺度的向量操作,也能够使用SIMD进行加快,带来的额表推算耗时不大。
3、对数量化,一个比力特殊的量化步骤D芄簧柘胍幌,两个同底的幂指数进行相乘,那么等价于其指数相加,降低了推算强度。同时加法也被转变为索引推算。但没有看到有在三大平台上实现对数量化的加快库,可能其实现的加快成效不显著。只有一些专用芯片上使用了对数量化。

单一看一下二值化和线性量化两种方式,别离是右上角的图和右下角的图。
总结一下,要使用量化技术来提升模型运行速度,必要满足两个前提:
1、选择适合部署的量化规划。
2、在部署平台上使用经过深杜着化的量化推算库(必要的时辰,可能必要撸起袖子自己上)。
首先保障你实现的低比特推算效能超过原先浮点推算,不然为何要承担精度损失的风险而使用并不加快的量化模型呢。但低比特推算效能超过浮点推算其实并不容易,由于各人在浮点的推算库上已经做了极度多详细的优化好比winograd,间接卷积等等。
为了最大限度保障实用性,后面的论文所有工作都是基于二值化、线性量化两种前提来做的,并且绝大部门工作都汇报最终现实的加快成效。这也是链接与编译团队做钻研的一个风格。
4 降低内存

模型量化还有一个潜在的益处是降低运行时内存占用,这个个性无论是在移动端还是云端都是拥有现实意思的。若是降低内存占用,能够得到如下益处:
1、降低访存量,存在提升速度的可能 。
2、在同样硬件环境下,同时处置更多视频或者视频路数 。
3、训练更大的模型。
我们分析下运行时内存都是被什么器材占用的,各人关切的参数weight只占很少一部门, 大部门内存占用来自激活值activation。若是你做低比特量化只关注卷积的话(好多论文其实也是只量化了卷积),那么是无法带来内存占用降低的。
若何能力用量化降低内存占用,只有一个方式: 将尽可能多的layer的激活值都进行量化 。在这个方向上之前东升国际官网的一位实习生李润东也有一个工作,做了除了卷积之表更多层的量化。但是这样做会带来更多的精度损失,这可能也是各人必要关切的。
5 出产量化模型

出产一个量化模型的有以下几种步骤,借鉴了ICCV2019上一篇data-free量化论文的界说。
L1:直接将一个浮点参数直接转化成量化数,通常会带来很大的精度损失,但使用上极度单一。
L2:基于数据校准的规划,好多芯片城市提供这样的职能,好比tensorRT,高通,寒武纪等。它必要转模型的时辰提供一些真实的推算数据。
L3:基于训练finetune的规划,有好多论文都是使用这种步骤,它的益处是能够带来更大的精度提升,弊端是必要批改训练代码,执行周期比力长。
上图描述了一种实用的pipeline流程,通常会优先使用不进行finetune的offline步骤,也就是离线规划。当离线规划精度损失过于严沉,我们才会进行基于finetune的步骤,来做进一步的急救。
6 量化模型的落地

最后聊聊故障模型量化算法落地的几个问题,主题当然是精度问题。我们发现固然学术界各人很早就起头做量化,但此刻算法还无法大规模落地。重要存在几个gap:
1、可落地的线性量化规划无法很好的刻画一些散布,好比高斯散布
2、比特数越低,精度损失就越大,实用性就越差
3、工作越难,精度损失越大,好比鉴别工作,就比分类工作要难极度多
4、幼模型会比大模型更难量化
5、某些特定结构,如depthwise,对量化精度极度不敦睦
6、常见的对部署敦睦的步骤好比merge BN,全量化,城市给精度带来更大的挑战
除了精度表,软硬件支持不好也是一个故障:分歧的硬件支持的低比特指令是不一样的,同样训练得到的低比特模型,无法直接部署在所有硬件上。除了硬件之表,分歧软件库实现的量化规划和细节也不一样,量化细节里蕴含量化地位、是否支持perchannel、是否混合精度等等。即便硬件支持了量化,但你会发现不是所有硬件能够在低比特上提供更好的速度提升, 造成这个情况的重要原因有多个,一方面是指令集峰值提升可能自身就并不多,而要引入较多的额表推算,另一方面也取决于软件工程师优化指令的水平,同时由于网络结构矫捷多样,不愿定能在分歧网络结构上达到同样好的加快比,必要优化足够多的的corner case能力够解决。
相信各人对模型量化的概想和落地难点有了一个系统性的意识。我的部门就到这里实现了,下面是各人最等待的论文解读功夫。
Part 2 论文解读
1 低比特量化:Differentiable Soft Quantization: Bridging Full-Precision and Low-Bit Neural Networks(ICCV 2019)
由于量化函数自身是离散不成导的,导致其无法像尺度神经网络一样使用反向传布推算梯度,一个常用的做法是使用梯度直通估计器(STE),即在反向过程中忽略量化这一步骤产生的影响,而这也就天然的带来了梯度不正确的问题。权沉经过STE拿到的梯度跟它应该拿到的梯度是不匹配的。ICLR 2020年有一篇论文通过尝试具体的分析了这一景象,发现随着比特数的降低,不匹配的景象越发显著。

这让低比特量化网络很难高效训练,针对这个问题,该文章提出了一个可微分的软量化函数DSQ,引入了可求导的量化函数,缓解了不成求导带来的梯度不匹配问题。同时,这个函数随着训练的进行能够逐步趋近尺度量化,因而能够在部署时直接利用高效的线性低比特量化函数进行推理,此表,由于这个函数是能够求导的,因而截断值也可能直接被优化,在训练过程中平衡截断误差和取整误差间的关系。

通过可视化分析,我们发现经过DSQ函数后,参数的散布越发靠近于量化后的散布,减幼了浮点参数和量化参数的天堑。为了验证这套步骤的效能,我们基于ARM NEON中的SADDW和MLA指令实现了高效的低比特卷积,并在树莓派上以ResNet-18为基础进行测试,相比腾讯开源的高机能推理库NCNN有1.6倍左右的提速。

论文地址:https://arxiv.org/abs/1908.05033
2 模型二值化:IR-Net: Forward and Backward Information Retention for Highly Accurate Binary Neural Networks(CVPR 2020)
模型二值化在模型的激活值和参数上只有两个值(0和1)暗示,能够预感的是这样量化注定会带来较大的精度和信息损失。该文章引入了信息熵,以量化参数和浮点参数的信息熵作为模型的评价尺度。
除了前向信息损失,二值化模型在反向过程中面对的挑战更大,尺度的恒蹬壮射梯度近似会导致较大的梯度误差,而蕴含截断建模的梯度近似会使得大量被截断的数值不能得到更新,损失了更新能力。该文章提出了两阶段近似梯度估计器,让模型优化在前期维持比力高的更新能力,后期梯度的误差更低。

同样在树莓派上进行了速度验证,借助京东开源的daBNN推理库,测试了IR-Net的机能,相比daBNN中的全精度模型,约莫有5.6倍左右的速度提升。

论文地址:https://arxiv.org/abs/1909.10788
项目地址:https://github.com/htqin/IR-Net
3 8bit训练加快:Towards Unified INT8 Training for Convolutional Neural Network(CVPR 2020)
除了使用量化技术加快前向推理过程,是否可能进一步加快蕴含反向传布在内的梯度推算过程呢?分析发现反向传布在训练过程中占用了一半的功夫,若是能削减这个功夫,那么就能大大增长训练效能。一个直接的设法就是量化梯度,但这样做会导致训练不收敛。经过统计,我们发现梯度的散布与激活值和参数值有很大分歧,大量参数呈此刻0左近,同时存在较大的极端值,若是对其进行量化会带来极度大的量化误差。

发现了梯度的特点后,我们从理论角度进行了分析,借鉴了优化理论中的痛恨值分析。推导出了引入梯怀抱化之后的收敛性上界:

该上界蕴含三项,其中第一项随更新迭代的进行会趋向于零,因而重要由后两项决定,别离对应量化误差的大幼和进建率。只有确保该上界尽可能幼,收敛性能力得到保障。

因而针对第二项和第三项,通过使量化梯杜纂现实梯度的cosine距离越发靠近,降低量化误差,而后凭据误差的大幼减幼进建率,使得尽可能在越发正确的方向上进行更新,并且不会在谬误的方向上更新过多,能够保障在收敛天堑内更新,确保正常收敛。论文在分类和指标检测工作上都进行了精度验证,损失在1%左右。

借助高机能团队提供的初步优化实现,该步骤能够在NVIDIA GTX 1080TI上带来22%的加快。

论文地址:https://arxiv.org/abs/1912.12607
4 低比特人脸鉴别:Rotation Consistent Margin Loss for Efficient Low-bit Face Recognition(CVPR 2020)
由于开集问题里测试集中存在训练集不存在的类别,因而鉴别工作比分类工作更难,评价指标也越发严格。而引入量化之后,也就面对着更大的挑战。为了深刻分析人脸鉴别受量化的影响,论文首先基于人脸特点使用夹角怀抱作为类似度衡量的共识界说了量化误差,并界说量化后的类中心为属于该类所有样本特点进行量化后的均值。对量化误差进行分析,发现引入量化后每个类的中心都有所偏移,但类之间的夹角维持住了,类内的距离维持的较差D芄焕斫獬筛骼嘣诹炕蟛艘桓稣宓男,每个类的紧凑性有所降落。

因而文章将量化误差分化成类误差和个别误差。文章提出了旋转一致损失函数,使得样本拥有与类中心有同样的偏移,抵消量化带来的影响,让特点越发保序。

论文在分歧数据集上进行了尝试,在单一的数据集上3/4bit根基可能维持精度,在更有挑战的数据集上相比基线步骤也可能有1-2%的精度提升。

5 量化敦睦网络结构:DMS: Differentiable diMension Search for Binary Neural Networks(ICLR 2020 Workshop)
对量化和网络结构的索求,很多论文城市对网络结构进行微调:增长通路数量,批改跨层衔接等。对于二值化模型来说这些扭转能带来比全精度模型更大的收益。

这启发了我们,是否存在一些模型结构,他们对于量化越发敦睦呢?本文从卷积核output channel的角度进行了索求,将量化布景下的channel索求转换为网络结构搜索(NAS)问题。Channel的搜索空间通常较大,直接使用已有的NAS会晤对极度高的搜索复杂度,为相识决这个问题,本文提出了搜索空间聚类步骤。首先将channel的变换参数r建模为遵从Logistic散布的随机变量,广义的搜索空间能够以为是从该散布中进行采样,我们将采样限度为三个点:(),由于Logistic散布的散布函数能够进行求导,和可能进行优化,同时我们将进行衰减,即可最终收敛到上,作为最优的channel放缩系数。
对搜索空间进行建模,对网络结构进行索求。

尝试批注,搜索得到的结构拥有较大的精度潜力,使用ResNet-18拓扑,通过寻找最优的channel设置,在参数量比尺度BNN少的情况下,能够实现7%左右的精度提升。

论文地址:
https://drive.google.com/file/d/1DgD1mIBv7MHwM27Vjvb-g8IwlUOv6UJF/view?usp=sharing
项目地址:
https://github.com/yhhhli/DMS_for_BNN
Part 3 Q&A
Q:主流训练框架是否支持finetune步骤的INT8量化?
A:finetune 步骤的INT8量化在此刻的tensorflow里是支持得比力好的,能够看到google的量化白皮书中就介绍了finetune。Pytorch在补齐这方面的职能,在1.3版本中参与了finetune 的量化职能,但还在尝试阶段。所以此刻的PyTorch框架做的比力通常,但公司内部会提供美满的finetune规划和开源算法。
Q:分歧量化工作难杜仔差距的原因是什么?哪些工作作为INT8量化损失会比力大?
A:例如分类工作,只有保障最终的预测概率的相对大幼,是维持关系即可,但回归工作,好比检测工作偏一点城市影响到检测出框的正确性,所以会比分类工作的难度更高。刚才提到的人脸识此外工作是出feature的,feature的方向以及自身衡量的难度使其比分类工作越发难题,以及一些low level的工作由于输出的各个像素点都要顾及到,所以也会比分类工作更难题。另表从散布方面,量化必要做散布的思考,若是一些工作对散布不敦睦,量化的部署也会越发难题。
Q:在对网络结构敦睦型的量化过程中 对于channel分配上有什么经验?
A:能够看到东升国际官网论文补充资猜中展示了最终的channel数,总结来看若是层中自身推算量较幼,那么它的channel就必要更大一些,分歧网络结构的法规也有所分歧。
Q:INT8 Training是重新起头训练的时辰就选取8bit定点吗?还是说先全FP32精度进行训练一段功夫,再进行量化?是仅对卷积层进行了8比特定点量化吗?
A:重新起头训练的时辰就选取8bit定点。第二种步骤会更不变一些,但无法达到较好的加快成效。当前东升国际官网规划里只短陧积层进行量化,并且没有关切全衔接层和第一层的卷积,这是一个比力尺度的setting,所以目前达到的加快成效还没有很好,若何做得更快是必要其他层都必要量化的。
Q:当模型在真正部署,必要模型压缩的时辰,量化、剪枝、知识蒸馏等压缩步骤通常会使用哪些呢?
A:量化是一个大部门硬件平台城市支持的,因而比力常用;知识蒸馏有利于获得幼模型,还能够进一步提升量化模型的精度,所以这个技巧也会使用,尤其是在有已经训好比力强的大模型的基础上会极度有效。剪枝用的会相对较少,由于能够被网络结构搜索覆盖。
「东升国际官网泰坦公开课」公家号后盾回复“量化”,即可获取相应的课程资料哦!
-
11月2日,为期七天的推算机视觉顶会ICCV 2019闭幕。东升国际官网科技以57篇论文(11篇Oral),13项冠军的成就创造新“高度”(详见文章《东升国际官网科技57篇论文入选ICCV 2019,13项较量夺冠》),让世界见证东升国际官网钻研技术堆集的“厚度”,在大会现场也能亲身感触东升国际官网AI+行业利用落地的“广度”2019-11-03
-
近日,由阿里巴巴集团、东升国际官网科技及香港科技园公司携手成立的香港人为智能及数据尝试室(HKAI Lab)在香港科学园正式开幕。东升国际官网科技首创人、香港中文大学教授汤晓鸥、阿里巴巴集团首席技术官张建锋和香港科技园公司行政总裁黄克强别离颁发了讲话,祝福HKAI Lab可能助力香港草创人为智能企业生态发展。2018-10-18





返回