-
Notifications
You must be signed in to change notification settings - Fork 70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
EasyQuant 技术细节答疑 #3
Comments
Q1: EQ INT7 加速推理实现没有公开?eq-ncnn 不是的吗,我看上面说的是 |
A1:是的。已经公开了一个版本,已修正。 |
R2: 有时间点吗?因为我现在在搞,想白嫖,时间长我就自己搞了😝 |
Q1:论文算法流程中的收敛条件是什么,不是取cos 最大对应的 scale 吗,收敛是什么意思? |
|
A1:这里的收敛主要是量化前后卷积后的特征图余弦相似度不再提升稳定到某个值。 |
Q:其它论文里面看到过更直接的方法,将每层的量化误差(MSE) 直接补偿到 bias 里面,也是只要少量的数据集。请问有做过类似的实验吗?结果如何呢? |
Q: 是针对 post-training 的吗?可以 po 一下论文吗? |
A:不知道你说的是不是类似bias correction的方法 (平衡量化所导致的分布中心偏移)。我们有在某些模型和数据集上尝试复现过类似的方法效果没有直接优化scale明显。 |
A:是的,《Data-Free Quantization Through Weight Equalization and Bias Correction》,上面说法有误 |
谢谢,是你说的这个 bias correction 方法,我说法有误 |
@wonderDiWu Why I see the vgg example code, for weight not use α,use min=1.0 β=1.0 bins=100 ; for activation α=0.8 β=1.0 bins=100 ? But in paper, |
As mentioned in the paper, we used α = 0.5, β = 2 and n = 100 in all our experiments, which are robust for various tasks and architectures. I recommend adopting these settings mentioned in our paper. I reckon it is a mistake in the code. Thank you for pointing out. @yunglechao @BUG1989 |
@wonderDiWu Why i transfer EasyQuant to my face detection task, get a very bad result, i use
Is it convenient to provide |
你好,我有几个问题想咨询下: |
Thanks for adopting EQ in your project. In terms of your problem. It’s nearly impossible for us to recognize where the bug is by just knowing the final accuracy. However, there are some guides you could consider.
Could you please open another issue regarding your problem mentioned here? This issue is intended to focus on general questions about EQ. Many thanks. My former colleagues will track it and give you help as much as we can. Actually, we are preparing the other models (MobileNet) and further debugging information for demos. |
A1:论文中的收敛是指迭代地优化激活和权重的scale到收敛,demo中我们只做了一轮优化。
A5:EQ的scale搜索对于vgg16这样的大模型目前比较慢(每次的推理耗时较多)。我们正准备提供一些像MobileNet这样的小模型来保证可以快速复现。FP32模型的中间结果存取确实可以减少一些搜索耗时。其他的方式还有对对weight每个channel做并行处理,推理时在优化层做early stop操作等。我们会关注进一步的提速问题。 |
Q1:sample是以VGG分类网络示例的,其他类别的网络(比如检测或者人脸模型)也是同样使用imageNet中选取3000校准并且挑选50张做微调吗?还是对数据集有要求? |
Q1: 如果我现在有ncnn的fp32模型+校准数据1k张图片。怎么把这个EQ工具用起来,得到最优的int8 模型scale呢?我看到工程里是基于caffe model的,ncnn的模型能不能方便的跑起来。 |
你可以把量化工具中有关caffe net的接口替换成ncnn net进行量化https://github.com/deepglint/EasyQuant/blob/master/tools/caffe_quanttable_e2e.py#L577 |
hi, |
First, for ImageNet1k classification task, please download ImageNet2012. We random sampled 3000 calibration images from ImageNet val set to data/calib.txt for KLD quantization and select 50 samples from calib to data/list50.txt for EasyQuant scale finetuning. Then we will evaluate quantified models on val set. |
Thanks very,much |
Q1: will you share other demo such as resnet18 .etc? Thanks |
Or just disable Accuracy Layer while training the scale,and enable it while validating it? |
Q1: benchmark里面mobileface 在公开库上测试的指标量化的校准集是训练数据还是和测试数据无关的数据?tpr是否是同样far下得到的 |
为了累加不溢出的问题,int8量化累加两次的基础是量化到[-127,127]。对于tf等quantizatio-aware的量化训练来说,[-128,127]的量化就不可以了是吧 |
Q1: 想问下,如果不使用对称量化,zp 不恒为 0 的情况下,如何同时搜索 scale 和 zp 呢? |
您好,最近在复现,有以下几个细节问题,希望得到您的解答 |
@liu6381810 我来回答一下2和3吧。 |
@aksenventwo 非对称或zp不为0,这个我们没有做过相关的考虑和实验,你可以到网上找找有没有相关的论文。个人判断,考虑它们会让问题更复杂,反而会影响最终的加速。 |
@huqinghao 溢出问题需要从训练和量化时的截断等两个方向去进行解决。溢出有时是不可避免的,但是少量的溢出不会影响结果。 |
@aitaoquanyi EQ只需要50张图片进行量化调优,这50张太少了,以至于并不能反映任何一个数据集的分布,所以这50张是否从训练集或从测试集搞来的,这一点并不重要。 |
常规来讲,bn需要能够被conv合并掉,但这只是从应用角度去考虑。如果从EQ算法本身来讲并不关心这些,EQ是提供了一种更好的量化算法,至于如何去用它,是见仁见智的事情。 |
你可以理解EQ是一种搜索算法,如果你给的初始值不准,会导致必需要用更大的搜索空间。这只是其一。其二,KLD是具有统计意义的,原则上它才是一个更好的初始化方法。activation的最大值有时候真的很大,用这样的值没有意义。 |
把出问题的net.opt = opt;注释后, 可以正常编译了...... 用ncnn跑前向很慢, 在最后一步finetune的时候为什么会用ncnn来做, |
你好, 请问这两个问题怎么解决的, 尤其是Q4, 我这边测出来的结果是 跟未finetune的结果几乎一致. |
同问 |
用过tensorrt的量化方案,也是圈圈虫同学写的,不过似乎只是对原始的卷积进行量化还可以,对于吸收了bn层的进行量化的话则掉点很严重,不知道这个方案是不是也是这种情况。 |
还有是不是也把bias的量化考虑进去了 |
先要理解EQ原理。 |
EQ 技术细节答疑
我们最近收到了很多朋友对 EQ 的咨询建议,对大家的关心和建议表示感谢。论文目前不太完善,Motivation 实验对比有所欠缺。我们会考虑在后续的版本做进一步优化,欢迎大家提出更多的建议, 我们会仔细评估后做出修订。我们希望 EQ 能给学术界带来在线性离线量化方案上带来有意义的启发,给工业界在实际的量化部署上带来精度和速度的提升。
EQ 的 Contributions
我们提出了一种全新的,有效的同时也非常简单易用的对激活和权重 Scale 优化的策略。对比传统的 TRT 量化方案(这里只讨论Scale 计算部分),我们认为权重和激活的 Scale 调优是有很大提升空间的。我们提出对权重和激活的 Scale 做联合的迭代优化,这里的联合体现在我们交替地对权重和激活scale值进行优化,并且优化的目标对象是卷积后的结果,区别与 TRT 的方案(激活scale单独优化,权重和激活的优化都不考虑卷积的影响的)。最后在整体上,我们对 CNN网络采用了从第一层到最后一层的逐层优化的方案。
鉴于 EQ 在 INT7 离线量化下非常好的精度保持,我们提出了 INT7 的推理方案。减少的1 bit 在基于 ARM 平台上的推理中给了我们更大的指令级别的优化空间。我们实现了基于 NCNN 的 INT7 的推理方案。基于我们测试的结果可以在原始 INT8 NCNN 的基础上额外提速 30% 左右(实际不同网络结构会有差异)。
我们基于各种模型结构( VGG16, ResNet18, MobileNet v1 )在不同的任务上(分类,检测,识别)对 EQ 进行验证,都取得了很好的效果。我们的实验验证不仅包括论文中公开的公开模型和数据集,同时也有大量的企业级别实际应用的模型和数据集。这充分证明了 EQ 的有效性。
EQ 的疑问有几点做统一回复:
Q:相似度度量的问题:在优化激活和权重的 Scale 时, KL 散度、余弦相似度、MSE 到底哪个好?
A:我们并没有应用过 K L散度,因为 EQ 是对卷积后的特征图进行相似度的比较,KL 散度并不是很合适,也不直观。余弦相似度和 MSE 在我们实验中效果很相似,我们之所以选择余弦相似度是因为他统一了量纲在 -1 和 1 之间,方便我们对每层的情况进行比对分析。我们的初衷是希望 EQ 能很好的证明激活和权重的 Scale 在优化上有很大的提升空间,而不仅仅在于度量的选择上的比较。
Q:EQ 的 Scale 优化怎么应用到实际的推理框架中?
A:EQ 的 Scale 优化方法非常的简单有效,几乎可以零成本的嵌入到各种线性离线量化的工具中。这是 EQ 非常大的优势。实际上我们也是这么做的,我们很方便的将优化后的 Scale 嵌入到了 NCNN 的 Scale 文件(即 Calibration.table)中, TRT 等离线量化工具也暴露了相关的接口。
The text was updated successfully, but these errors were encountered: