📚推荐阅读
面试官:“你了解量化(Quantization)吗?能解释一下非对称量化和对称量化的区别吗?”
老实说,这个问题真挺有代表性。它既考基础理解,也看你对模型部署有没有实战经验。相信很多同学如果没有实践经验,也回答不出一二,我们一起来看一看。
所有相关源码示例、流程图、模型配置与知识库构建技巧,我也将持续更新在Github:AIHub,欢迎关注收藏!
一、为什么要量化?
深度学习模型一般都是用 FP32(32位浮点数)来存储权重和激活的。
\ 量化是将模型参数和计算过程从高精度(FP32)映射到低精度(如 INT8、FP16、BF16),减少存储与计算开销。
量化可以压缩存储空间,FP32 占 4 字节,INT8 仅占 1 字节,理论上体积可减至 1/4。同时可以加速计算,低精度运算能充分利用硬件的 SIMD / Tensor Core,加快推理。
常见方法包括PTQ(Post-Training Quantization)和QAT(Quantization-Aware Training)
QAT训练过程中模拟量化效果,能够实现较高的精度。PTQ训练后直接量化,无需重新训练,简单但精度下降可能较大。
二、对称量化(Symmetric Quantization)
对称量化的核心思想很简单:让正负区间对称分布在零点两侧。
比如我们要把 FP32 的权重映射到 INT8:
- FP32 范围可能是 [-1.0, 1.0];
- INT8 范围是 [-127, 127]。
那么我们只需要一个缩放因子 scale:
这里没有偏移量(zero-point),默认 0 对应 0。
对称量化计算简单,对硬件友好(适合 GPU / DSP),常用于权重量化。但是如果数值分布不对称(比如激活值 mostly >0),那么对称映射会浪费一半区间,精度下降。
三、非对称量化(Asymmetric Quantization)
非对称量化在对称量化的基础上,多了一个偏移量(zero-point)。
它允许量化范围不是以 0 为中心,可以更灵活地适应数据分布。
公式如下:
举个例子:
- 激活值范围:[-0.5, 1.5]
- 那么我们就让 0 对应 INT8 的最小值 -128;
- 6 对应 INT8 的最大值 127;
- 这样每个区间都能充分利用。
非对称量化对偏移分布的数据(如 ReLU 激活)更友好,精度更高,常用于激活量化,但是计算比对称量化复杂,硬件实现稍微慢一点(多一步偏移计算)。
四、实际部署
在实际部署中,像 TensorRT、TFLite、OpenVINO 这些框架都会支持两种量化方式。
如果是自己量化模型,一般的流程是:
- 收集样本数据(Calibration)
让模型跑一遍,统计每一层的最大最小值; - 计算 scale 和 zero-point;
- 替换 FP32 运算为 INT8 运算;
- 微调 / 校准,修正精度损失。
比如在 TensorRT 里,使用非对称量化能在激活层上保留更多细节而在一些嵌入式芯片上,只支持对称量化,因为硬件电路简单、推理更快。
如果面试官追问一句:“那为什么很多论文都说量化后精度没怎么掉?”
你可以回答:因为模型有冗余,量化后通过再训练(Quantization-Aware Training, QAT)可以补回损失。本质上,量化是在浮点空间和整数空间之间寻找一个近似映射,使得信息损失最小。”
这道题其实不难,但要回答得漂亮,可以遵循“三步走”:
- 一句话定义量化;
- 解释两种方式 + 举例;
- 总结适用场景 + 优缺点对比。
这样不光显示你理解透彻,还体现了工程思维,面试官听完基本就知道你是真懂的。
想看更系统的内容,可以阅读我之前写的一篇文章一文搞懂量化、剪枝和知识蒸馏都是什么?。
关于深度学习和大模型相关的知识和前沿技术更新,请关注公众号 coting!