量化面试20问:从基本原理到应用场景详解
量化面试20问:从基本原理到应用场景详解
量化是AI和机器学习领域中的一个重要概念,特别是在模型部署和优化中扮演着关键角色。本文将通过20个问答,深入探讨量化的基本原理、应用场景及其相关技术细节。
量化的基本公式
对称均匀量化(Symmetric Uniform Quantization)
对称量化将零点z限制为真实的0。注意对称均匀量化并不是关于零点对称。它还分为有符号和无符号。
Signed量化公式
Signed量化范围
8bit量化范围:[-128, 127]
Signed缩放系数
Signed零点计算方法
Z = 0
Unsigned量化公式
Unsigned量化范围
8bit的量化范围:[0,255]
Unsigned缩放系数计算方法
Unsigned零点计算方法
Z = 0
反量化公式
非对称量化(Asymmetric Uniform Quantization)
即均匀仿射量化(Uniform Affine Quantization)。
非对称量化公式
非堆成量化范围
- Signed:[-128, 127]
- Unsigned:[0, 255]
缩放系数
零点公式
Z = Qmax - round(rmax/S)
反量化公式
量化误差来源
量化误差主要来源于以下几个方面:
- 量化步长:量化步长越大,误差越大。
- 数据分布:数据分布越集中,量化误差越小。
- 量化方法:不同的量化方法会导致不同的误差。
- 硬件限制:硬件的计算精度也会影响量化误差。
业务敏感性分析
某些业务对误差不敏感,而有的又非常敏感,这主要取决于业务场景:
- 对误差不敏感的业务:如图像分类、目标检测等,这些场景对精度要求相对较低,量化误差的影响较小。
- 对误差敏感的业务:如语音识别、自然语言处理等,这些场景对精度要求较高,量化误差的影响较大。
量化信息存储方式
量化信息可以存储在Tensor或OP中,具体取决于应用场景:
- Tensor量化:将量化信息存储在Tensor中,适用于静态量化。
- OP量化:将量化信息存储在OP中,适用于动态量化。
- 混合存储:在某些场景下,可能需要同时使用Tensor和OP存储量化信息。
PTQ量化基本流程
PTQ(Post-Training Quantization)量化的基本流程包括:
- 模型训练:先训练一个浮点模型。
- 数据收集:收集代表性数据集。
- 量化参数计算:计算量化参数(如缩放系数、零点等)。
- 模型量化:将浮点模型转换为量化模型。
PTQ和QAT的区别
PTQ和QAT(Quantization-Aware Training)的主要区别在于:
- 训练方式:PTQ在训练完成后进行量化,而QAT在训练过程中就考虑量化的影响。
- 性能:QAT通常能获得更好的性能,因为训练过程中就考虑了量化的影响。
- 复杂度:QAT的训练过程更复杂,需要更多的计算资源。
Per Tensor和Per Channel的区别
对于Conv2D的Weight来说,Per Tensor和Per Channel的主要区别在于:
- Per Tensor:整个Tensor使用相同的量化参数。
- Per Channel:每个通道使用不同的量化参数,可以更好地适应不同通道的数据分布。
Fake Quant的作用
Fake Quant主要用于模拟量化过程,其主要作用包括:
- 训练时:在训练过程中模拟量化效果,帮助模型适应量化后的表现。
- 推理时:在推理时实际执行量化操作。
Conv2D的量化选择
对于Conv2D的3个输入(Input、Weight、Bias),通常采用以下量化组合:
- Input:通常采用对称量化。
- Weight:通常采用对称量化。
- Bias:通常采用浮点表示,以避免量化误差。
Requant的基本计算逻辑和作用
Requant主要用于调整量化参数,其基本计算逻辑包括:
- 计算新的缩放系数:根据当前的量化范围和目标量化范围计算新的缩放系数。
- 调整零点:根据新的缩放系数调整零点。
混合精度计算逻辑
混合精度计算主要通过以下步骤实现:
- 选择关键层:选择对精度要求较高的层使用高精度表示。
- 选择非关键层:选择对精度要求较低的层使用低精度表示。
- 调整量化参数:根据层的精度要求调整量化参数。
需要特殊处理的OP
在量化过程中,以下OP通常需要特殊处理:
- Conv2D:需要考虑权重和输入的量化方式。
- Fully Connected:需要考虑权重和输入的量化方式。
- BatchNorm:需要考虑与量化层的融合。
Conv2D的Multiplier和Shift
Conv2D的Multiplier和Shift通常通过以下方式推理:
- Multiplier:通过量化参数计算得到。
- Shift:通过量化参数和硬件限制计算得到。
Bias的Scale要求
对于Conv2D来说,采用Multiplier和Shift计算时,Bias的Scale通常需要满足以下要求:
- 与输入和权重的Scale一致:以避免额外的量化误差。
对称量化范围限制
对称量化时,统计出来的浮点范围需要限制min≤0,max≥0,主要是为了:
- 保持对称性:确保量化范围关于0对称。
- 简化计算:便于计算量化参数。
阈值搜索方法
常见的阈值搜索方法包括:
- Min-Max:通过统计最小值和最大值确定阈值。
- KL-Divergence:通过最小化KL散度确定阈值。
- Entropy:通过最小化熵确定阈值。
8bit量化带符号时的q_min选择
在8bit量化带符号时,选择q_min为-128和-127有以下区别:
- -128:可以充分利用整个量化范围,但可能会增加溢出风险。
- -127:可以减少溢出风险,但会牺牲部分量化精度。
中间量化误差变化
模型出现中间量化误差大,后续量化误差又减少的情况,主要是因为:
- 模型训练过程:模型在训练过程中逐渐适应量化误差。
- 量化参数调整:在训练过程中不断调整量化参数,以减小量化误差。
余弦度量在量化误差衡量中的优缺点
余弦度量在衡量量化误差时具有以下优缺点:
- 优点:
- 方向敏感:可以反映向量方向的相似度。
- 尺度不变:不受向量尺度的影响。
- 缺点:
- 幅度不敏感:不能反映向量幅度的差异。
- 计算复杂度:计算余弦相似度需要进行向量归一化,计算复杂度较高。