量化后的精度损失如何快速定位?layer-wise的sensitivity分析?
量化后精度损失可从三方面排查:层/模块敏感度(哪几层量化后掉点最多)、激活/权重分布(是否 outlier 多、动态范围大)、校准与配置(scale、比特数、per-channel 等)。快速定位常用「逐层或逐模块量化」:先只量化某一层(或某几层),其余保持 FP,看验证指标变化;或反过来,逐层恢复 FP,看恢复哪几层后指标明显回升,从而锁定敏感层。
Sensitivity 分析:对每一层(或每一类算子)单独做量化,在验证集上测 loss 或任务指标,得到每层的「量化敏感度」排序。敏感度高的层可保留更高精度(如 FP16、W8)或更细粒度(per-channel、更小 group);敏感度低的可压到 W4 或 per-tensor。可结合梯度或 Hessian 近似做重要性估计,但直接逐层量化测指标最直观、工程上常用。
实现上可写脚本:遍历层或 block,仅对当前层量化、其余 FP,跑一遍验证并记录;最后得到 sensitivity 曲线或排序表,据此定混合精度策略(如 embedding、最后一层用 FP16,中间部分层 W8 其余 W4)。可与剪枝、结构搜索结合,形成「敏感层少量化、不敏感层狠量化」的配置。
| 返回模块 | 返回总览 |