自动驾驶中神经网络模型量化技术:INT8还是INT4?AET

如今深度神经网络(DNN)已成为大多数AI应用程序中的常见算法,比如计算机视觉、语音识别和自然语言处理等方面,这些网络所表现的超强能力使其成为AI历史的里程碑。但是,它们一方面具有最先进的性能,另一方面却需要巨大的计算能力。因此可以看到,已经有许多硬软件的优化技术以及专门的体系结构开发,在不影响其准确度的情况下,能够高性能和高效率地运行这些模型【8】。

在AI最具有挑战性应用之一的自动驾驶系统中,DNN的优秀表现也比比皆是。对于自动驾驶领域而言,实时性和安全性这两项要求远超其它领域的指标。

NN模型加速和优化技术大致分为四个方案:参数量化、剪枝和共享、低秩分解、迁移/紧凑卷积滤波器和知识蒸馏等【1】。参数量化、剪枝和共享的方法探索模型参数的冗余,并尝试删除冗余和非关键参数。低秩分解的技术使用矩阵/张量分解来估计DNN的信息参数。迁移/紧凑卷积滤波器的方法设计了特殊的结构卷积滤波器,以减少参数空间,并节省存储/计算量。知识蒸馏方法学习蒸馏模型,并训练更紧凑的神经网络以复现较大网络的输出。

DNN模型可以具有上亿个参数,在计算中要存储的数据很大。研究表明,在最佳情况下,可以预测神经网络中超过95%的参数。这意味着,更简单的模型参数化可以保持DNN的性能。量化(quantization)被认为是满足DNN模型内存要求的最有效方法之一。减少内存限制的主要技术之一是减少量化位宽或比特宽(bitwidth)【3】。

现在人们已经证明,FP32训练的参数可以改成8位/比特整数(INT8)做推理,没有显著精度损失,甚至训练时候采用INT8也可以。Xilinx公司实验中发现INT8可以在一个批处理大小的推理中实现性能无损,不用重新训练。

另外,DNN对噪声也具有鲁棒性。在权重或输入上添加噪声,有时候可以获得更好的性能。随机噪声充当正则化项,可以更好地泛化网络。量化DNN的低精度操作,也被看作是不会损害网络性能的噪声。

模型量化

量化是通过一组离散符号或整数值去逼近一个连续信号的过程。大多数情况是指低比特量化(lowbitquantization)。早在1990年代就有人提出了将浮点参数转换为数值精度较低的数据类型这种量化神经网络的方法。从2010年代起,因为INT8被证明可以加速推理(inference)而不会显着降低准确性,人们对这项技术重新产生了兴趣。

大多数神经网络都使用FP32进行训练(training)。FP32参数表示其实精度比所需精度更高。将FP32参数转换为低位/比特整数表示可以显著地减少带宽、能耗和芯片面积。

量化参数通常可以加速神经网络推理,实际情况取决于处理器和执行环境。有时候降低精度并不总是能达到预期的加速比。例如,由于量化和反量化的附加操作,INT8推理无法在FP32实现4倍加速。例如谷歌TensorFlow-Lite和英伟达TensorRT的INT8推理速度也只提高了2-3倍。批处理大小(Batchsize)是指前向传递中处理多个图像的能力,增加这个可让TensorRT在INT8精度实现3-4倍的加速。

神经网络模型的偏差项(biasterms)在线性方程中会引入了截距。它们通常被视为常量,帮助网络训练并适配给定数据。由于偏差占用最少的内存(例如,10进-12出的全联接网络即FCL,有12个偏差值,对应120个权重值),所以一般建议偏差保持满精度。如果做偏差量化,则可以乘上特征尺度和权重尺度。

常见技术

量化方法的研究可分为两个领域:1)量化觉察训练(Quantize-awaretraining,QAT);2)训练后量化(Posttrainingquantization,PTQ)。

PTQ指对训练的模型量化权重并重新优化模型以产生尺度化的量化模型。QAT则是指微调稳定的满精度模型或者重新训练量化的模型,这样实数权重通常会尺度化为整数值。

量化方法也可以根据数据分组量化的方式大致分类为:1)按层方式;2)按通道方式。按照参数的量化带宽,可以定义为N-比特量化。还有另外一种划分方法是:1)确定性(deterministicquantization)2)随机性(stochasticquantization)/概率性。确定性量化,其量化值与实际值之间存在一对一的映射关系;而随机性量化,其权重、激活值或梯度是离散分布的,而量化值是从这些离散分布中采样而来。

如果要量化的目的是实现硬件加速,则应首选确定性量化,因为可以预先指定适当的量化级别,以便在专用硬件上运行量化网络,对硬件的性能预期得到改善。概率量化与确定性量化的不同之处在于,其量化的权重更易于解释。可以通过概率量化来了解权重的分布,并且可以深入了解网络的工作原理。由于贝叶斯方法的正则化效应,借助概率量化还可以拥有稀疏的模型。

注:参数聚类和共享的做法有些不同。部分量化(partialquantization)方法使用聚类算法(例如k-均值)对权重状态进行量化,然后将参数存到一个压缩文件中。权重可以使用查找表或线性变换进行解压缩。通常这是在执行推理(inference)时进行。FCL(全联接层)可以通过这种方法极大地压缩权重。不过,这种方案仅是降低了模型的存储开销。

半精度浮点数(halfprecisionFP16)在英伟达GPUs和ASIC加速器已经普遍应用,精度损失很小。可以采用FP16混合精度做模型训练,包括权重、激活数值和梯度等更新和存储,其中权重更新的累积误差用FP32。这样的做法已经证明可达到最佳性能,甚至比原来的浮点数网络更好。

饱和量化(Saturatedquantization)用于带标定集(calibrationdataset)的标定算法,可生成特征的尺度量。激活值量化后与以前的浮点数据具有相似的分布。Kullback-Leibler发散度(也称为相对熵或信息发散度)标定量化(calibratedquantization)方法已被广泛应用,对许多常见模型,这样可以在不降低精度的情况下做到网络提速。另外模型微调过程也可以采用这种方法。

参数量化可以看成是一个穷举搜索问题,优化中发现的尺度量可以减少误差项。给定一个浮点数网络,量化器采用最小化L2误差得到初始尺度量,用于量化第一层权重。然后,调整尺度找到最低输出误差。如此这样,每个层依次执行该操作,直到最后一层。

量化工具

随着量化技术的发展和成熟,已经出现了不少软件工具,一般是针对特定开发平台提供给用户。

TensorFlow-Lite(TF-Lite)是谷歌的开源框架,用于移动或嵌入式设备的模型推理。它也提供用于量化网络的转换和解释的工具。TF-Lite提供了PTQ和QAT两种量化方式。

TensorRT是英伟达开发的C++库,可在其GPU平台做高性能NN模型推理。其低精度推理库会消除卷积层的偏差项,需要一个标定集来调整每层或每通道的量化阈值。然后,量化参数表示为FP32标量和INT8权重。TensorRT采用预训练浮点数模型,并生成可重用优化的INT8模型或16比特半精度模型。英伟达Pascal系列GPU已启用低精度计算,然后图灵(Turing)架构为INT4和INT8两种精度引入了专用计算单元。

黑芝麻智能在自己独立开发的神经网络模型加速芯片(华山一号A500和华山二号A1000)基础上,在提供自动驾驶解决方案的同时,也提供了模型转换和优化的工具,同时支持PTQ和QAT两种量化方式。

量化精度的选择

虽然量化精度INT8已经被工业界普遍接受【2,6】,但是不是可以选择更小量化精度,比如4-比特/位整数(INT4),在学术界一直在进行认真研究,因为主要的担心是:在进一步减少存储空间和加速计算同时,模型性能下降甚至出现溢出(overflow)的可能风险也在增加。QAT量化方法在付出重新训练的代价后,采用INT4的量化模型应用场合会较大,但稳定性还是需要大量的实验验证,尤其是安全性要求很高的自动驾驶领域,大家不得不慎重考虑。

到底采用INT4还是INT8,学术界已经有不少研究工作报道。事实上,工业界INT4的量化产品市场上还是很少见【7】。

2018年谷歌发表一个量化网络推理的白皮书【2】,给出如下实验论断:

权重按通道量化,激活值按层量化,均是INT8的PTQ,对各种CNN架构发现,其分类性能和浮点网络的差在2%以内。

即使不支持8位整数算术,将权重量化为INT8模型大小也可以减少4倍,简单的权重PTQ可实现。

在CPU和DSP上对量化网络延迟进行基准测试:与CPU浮点数相比,量化模型实现的速度提高了2-3倍;具有定点数SIMD功能的专用处理器(例如带HVX的QualcommQDSP)提速高达10倍。

QAT可以提供进一步改进:在INT8情况下,其精度相对浮点数网络下降低1%;QAT还允许将权重降低到INT4,其性能损失从2%到10%,其中较小网络带来的性能下降更大。

在TensorFlow和TensorFlowLite中引入量化网络工具。

QAT的最佳实践,可以量化权重和激活值来获得高精度。

建议权重的按通道量化和激活值的按层量化,这是是硬件加速和内核优化的首选方案。也建议用于优化推理的未来处理器和硬件加速器支持4、8和16位/比特精度模型。

1)整数量化分析限幅(AnalyticalClippingforIntegerQuantization,ACIQ):其限制(即限幅)张量的激活值范围。虽然这会给原始张量带来失真,但会减少包含大多数分布情况的舍入误差。其通过最小化均方误差测量值,从张量的分布中分析得出最佳剪裁值。该分析阈值可以与其他量化技术集成。

2)按通道比特分配(Per-channelbitallocation):引入比特分配策略确定每个通道的最佳比特宽度。给定平均通道比特宽的限制,目标是为每个通道分配所需的比特宽,使总均方误差最小。通过对输入分布进行假设,发现每个通道的最佳量化步长与其范围的2/3幂成正比。

3)偏差校正(Bias-correction):发现量化后权重平均值和方差存在固有偏差。建议一种简单的方法来补偿这种偏差。

英特尔这个方法【4】在各种卷积模型中所达到的准确度仅比FP32基准低几个百分点。下表给出ImageNetTop-1验证的比较结果:

1)INT8权重和INT4激活值量化;

2)INT4权重和INT8激活值量化;

3)INT4权重和INT4激活值量化。

2019年华为发表的研究论文【5】提出线性量化任务可以定义成一个权重和激活值的最小均方误差(MMSE)问题,只是做低比特精度的NN模型推理,无需网络重新训练。其方法是在网络的每一层对受约束MSE问题进行优化,采用硬件觉察(HW-aware)方式对网络参数进行划分,对近似性较差的层使用多低精度量化张量方法。各种网络体系结构的多次实验,看到该方法做到了INT4模型量化。

如下表给出实验中各种模型INT4量化权重和激活值的性能比较,即准确度损失和压缩率的对比。

2020年英伟达论文提供了一个INT8量化工作的流程【6】,它将所研究的各种NN量化后模型和原浮点数模型的性能差别控制在1%以内,包括著名的MobileNets和BERT-large。以下两个表格给出了一些实验数据对比:

1)PTQINT8权重量化(按列或者按通道)

2)PTQ和QAT量化比较

最近加州伯克利分校论文【9】设计了一个2进制神经网络(DyadicNeuralNetwork),叫HAWQ-V3,是一个混合整数精度的量化网络,有特色的工作包括:

模型推理过程仅包括整数乘法,加法和移位(bitshifting),而无需任何浮点运算/转换或整数除法。

混合精度量化作为一个整数线性规划问题,在模型扰动和内存占用/延迟之间取得平衡。

在TVM开发第一个开源4位/比特和混合精度的量化工具,ResNet50模型部署到T4GPU,与INT8量化相比,INT4的平均速度提高了1.45倍。

ResNet50模型INT8精度量化的准确度达到77.58%,比之前的整数量化性能高2.68%;而混合精度INT4/8量化比INT8的推理延迟降低23%,而准确度仍然达到76.73%。

结束语

可以看到定点数量化模型的位/比特越小,模型存储越小,执行加速越大,但相对浮点数模型的性能下降可能性越大,溢出的风险也越大。QAT相比PTQ来说,训练的负担带来的是量化性能的保证。

INT8在工业界已经是很常见的量化精度【2,6】,INT4精度还是需要测试NN模型量化后的性能下降是否可接受【7】。INT4/INT8混合精度应该是模型准确度和执行加速的一个折衷方案【4,9】。

在自动驾驶领域,NN模型量化必须要保证安全性的指标不能出现明显下滑,那么INT4精度显然承受的系统风险较大,估计在近几年的市场INT8仍然是自动驾驶NN模型量化的主流。

参考文献

[1].YChengetal.,“ASurveyofModelCompressionandAccelerationforDeepNeuralNetworks”,arXiv:1710.9182,2018

[2].RKrishnamoorthi,“Quantizingdeepconvolutionalnetworksforefficientinference:Awhitepaper”,arXiv:1806.08342,2018

[3].YGuo,“ASurveyonMethodsandTheoriesofQuantizedNeuralNetworks”,arXiv:1808.04752,2018

[4].RBanneretal.,“Posttraining4-bitquantizationofconvolutionalnetworksforrapid-deployment”,arXiv:1810.05723,2018

[5].YChoukrounetal.,“Low-bitQuantizationofNeuralNetworksforEfficientInference”,arXiv:1902.06882,2019

[6].HWuetal.,“IntegerQuantizationForDeepLearningInference:PrinciplesAndEmpiricalEvaluation”,arXiv:2004.09602,2020

[7].Xilinx,“ConvolutionalNeuralNetworkwithINT4OptimizationonXilinxDevices”,WP521(v1.0.1)June24,2020

[8].TLiangetal.,“PruningandQuantizationforDeepNeuralNetworkAcceleration:ASurvey”,arXiv:2101.90671,2021

[9].ZYaoetal.,“HAWQ-V3:DyadicNeuralNetworkQuantization”,arXiv:2011.10680,2021

THE END
1.模拟试题第六套及答案解析新浪教育23.北京农业大学的教授在河北省推广柿树剪枝技术时,为了说服当地的群众,教授把一块柿树园一劈为二,除自然条件相同外,其他的条件包括施肥、灭虫、浇水、除草等也都相同,其中的一块柿树剪枝,而另一块不剪枝。到收获季节,剪枝的一块柿子的产量比不剪枝的多三成以上。这下农民信服了,先进的剪枝技术很快地推广开来。 https://edu.sina.com.cn/exam/2006-10-08/140856290.html
2.(六)从零开始学人工智能搜索:对抗搜索在这里,我们借用剪枝技术消除搜索树的很大一部分,应用到一棵标准的极小极大值树上,它剪裁掉那些不可能影响最后决策的分支,仍然可以返回和极小极大值算法同样的结果。 我们先来理解一下,怎么样的搜索是没有必要的,假设我们限定了搜索深度为3,我们从头开始搜索,如下: ...https://www.jianshu.com/p/f48e0191c2ee
3.说法错误的是:()A.αα-β剪枝使用到了宽度优先算法 B. Alpha Go问世,将深度学习、价值网络、蒙特卡洛树搜索技术融合,战胜人类顶尖棋手 C. α-β剪枝在很长一段时间里都是棋类算法的代表,取得一系列成就 D. 蒙特卡洛树搜索”方式,以“信心上限决策”打分,使计算机围棋能力得到质的提升。为后续方法奠定基础 点击查看答案进入小程序搜...https://m.ppkao.com/wangke/daan/97f2a2f807b043468e1bcd845afd67aa
1.深度学习中的剪枝算法以及具体应用嘲稀疏剪枝深度学习中的剪枝(Pruning)算法是一种通过减少神经网络中不重要或冗余部分来提升计算效率和减少模型尺寸的技术。剪枝不仅可以提高模型的推理速度,还能降低内存占用,特别是在资源受限的环境中,如移动设备或嵌入式设备。剪枝的核心思想是“去除”对模型输出影响较小的参数(如权重、神经元等),从而优化网络结构。 https://blog.csdn.net/m0_45276337/article/details/143588383
2.剪枝java是啥意思什么是剪枝算法小鱼儿的技术博客剪枝优化 剪枝算法概述 基本概念: 在搜索算法中优化中,剪枝,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条应当舍弃,哪些枝条应当保留的方法。 https://blog.51cto.com/u_12205/11088448
3.一年两茬茄子是怎么种出来的?2018~2020年种什么品种好?掌握这些...剪枝再生技术夏季高温季节,正值露地茄子大量上市,大棚越冬茄子开始出现生长不良、产量降低、品质不佳,市场价格快速下跌。按照“预防为主,综合防治”的植保方针,坚持以“农业防 茄子是餐桌上比较常见的一种蔬菜,因营养价值高且价格便宜而被广泛食用,目前大部分地区都有种植,而在种植的区域中,大部分地区都是一年一茬,...https://nync.guiyang.gov.cn/xwdt/kjzc/202002/t20200220_50327638.html
4.葡萄树冬季怎么整形修剪?葡萄冬季修剪技术要点介绍葡萄冬季修剪技术要点介绍 导读:到了冬天,种植葡萄的果农们就要开始准备为自家的葡萄整形修剪以及葡萄冬季的合理施肥。葡萄树的冬季管理是葡萄生产的一个重要环节,此间应重点做好整形修剪,清园杀菌,深翻、施肥与冬灌和防寒等项工作。 到了冬天,种植葡萄的果农们就要开始准备为自家的葡萄整形修剪以及葡萄冬季的合理施肥...https://m.cnhnb.com/xt/article-43441.html
5.GPT4大模型硬核解读,看完成半个专家第二种模型压缩方法是剪枝(pruning),即删除GPT-4的网络元素,包括从单个权重(非结构化剪枝)到更高粒度的组件如权重矩阵的通道。这种方法在视觉和较小规模的语言模型中有效,也是很多框架(Framework)上自带的功能。 第三种模型压缩方法是稀疏化。例如奥地利科学技术研究所(ISTA)提出的SparseGPT可以将GPT系列模型单次剪枝...https://m.36kr.com/p/2196628560234373
6.人工智能经典习题集及各章总结(期末考试必备)江阴雨辰互联第二阶段(50年代中~60年代中) 通用方法时代 第三阶段(60年代中~80年代初) 知识工程时代 第四阶段(80年代中~90年代初) 新的神经元网络时代 第五阶段(90年代初~现在) 海量信息处理与网络时代 2.人工智能研究的基本内容是什么? 解:基本内容是:搜索技术、知识表示、规划方法、机器学习、认知科学、自然语言理解...https://www.yc00.com/xiaochengxu/1690506190a360936.html
7.目标检测究竟发展到了什么程度?CVHub带你聊一聊目标检测发展的...目标检测的发展脉络可以划分为两个周期:传统目标检测算法时期(1998年-2014年)和基于深度学习的目标检测算法时期(2014年-至今)。而基于深度学习的目标检测算法又发展成了两条技术路线:Anchor based方法(一阶段,二阶段)和Anchor free方法。下图2-1展示了从2001年至2021年目标检测领域中,目标检测发展路线图。 https://cloud.tencent.com/developer/article/1842152
8.关于植树节植树的作文(通用63篇)爸爸对我说:“首先必须掌握剪枝技术。”“那,什么是剪枝技术?”“剪枝技术就是树苗在栽培之前,要先根据树苗的大小,枝丫的多少进行修剪。把多余的细枝都剪去,这样就能减少树苗对营养的需求,便于生根发芽。来,把这几根剪了,就可以了。”“哦,我知道啦。”我拿起剪刀,按照爸爸指示剪下了几根没有用处的枝丫。就...https://www.ruiwen.com/zuowen/zhishujie/4363043.html