温故而知新,参考mentor睿昊学长(xhplus)和主管锋伟(forwil)的专栏,记录在商汤实习内容的总结和反思。希望商汤工具人组越来越nb!
经过了仔细的思考,以及结合业务进行一些实验探索,觉得不同的量化模型生产策略应该辩证的来看待:
- Quantization Aware Training (QAT)可以追求极致的量化效果,但开发成本高,需要改动训练代码,需要训练配合。
- Post Training Quantization (PTQ)可以与训练解藕,往往更适合在靠近深度学习inference 基建的地方(如公司里的NART)上进行,同样有非常大的落地空间,
- 如果进一步考虑量化工具的易用性,Data-Free Quantization (DFQ)无需给定任何数据,直接把浮点模型转换成量化模型,是最最简洁的方案,何尝不是一个选择?
通过分类和对比,系统化的理解了模型量化研究领域如何bridge to 工业界,也由此打开了新的研究思路。
学术界和工业界的鸿沟
由于学术研究和工业落地的视角和关注点有所不同,很多量化研究工作都不能直接在工业落地中用起来。识别出学术界与工业界的鸿沟,成为打破僵局的关键一步。经过了大量的落地实战发现,几类问题最为常见:
- 量化方案的不匹配。各类深度学习加速器的量化位置和量化函数各异,而research paper几乎只考虑量化卷积层,不会考虑实际硬件推理中需要merge BN以及Eltwise和Concat这些层的量化。实践表明,实际场景中量化的问题往往就出在这些被研究领域忽视的地方。他们也很少考虑算法的硬件通用性,提出的算法要么只适用于至多一个硬件,要么需要新的硬件设计。
- 任务局限性。在工业界的视觉任务多种多样,学术界目前主要考虑分类和检测任务,而且不会引入比较难的评估指标,使得一些工业落地的hard case无法暴露出来。比如人脸识别类的开集问题,在评估更低FPR的TPR时,往往面临更大的精度损失。比如ToF深度估计问题,任务特性导致其对量化误差更加敏感,面临更大的挑战。类似的例子非常多,而这些问题往往没有被学术界意识到。
- 目标和场景不一致。学术paper的目标往往是对齐一个setting,针对几个特定网络和任务,选一些很诱人的极低比特去血拼精度提升,很少会关心是不是真的能在硬件上跑,是不是真的能取得想象的加速收益。相反,在工业界,量化更像是一个通用能力,希望对所有的硬件、任务、网络都能便捷的享受到其加速收益且保持精度。可以发现一些硬件厂商比如高通、IBM的量化研究工作会更实用一些,但他们的局限是更容易overfit到自家硬件上,而且对业务场景的理解比较浅。
现有框架的特点和能力
TensorRT官方提出的在PyTorch层面做量化支持的工具,支持量化参数的导出以写入TensorRT engine中。不禁想起了当年的TensorRT对齐经历,做PyTorch模拟量化在不确定很多硬件底层实现细节的情况下,是非常非常难做到对齐的。包括后来的NNIE量化对齐,让我养成了对齐虐我千百遍,我待对齐如初恋的良好工具人意识。
- Distiller
Distiller是比较早开源的模型压缩项目,由Intel Habana实验室开发。其最早相对是没有那么贴近部署的,不过发展过程中逐渐扩展了merge BN,quantize onnx export支持,还贴心的添加了与PyTorch quantize onnx的相互转化。其中支持了DoReFa、PACT、自家研究员发明的LAPQ等算法。整体上相比兄弟单位的NNCF在落地和设计上略逊一筹。
Reference
模型压缩:模型量化打怪升级之路