人工智能量化:精度预算与算子落地
把模型从浮点压到整数后,文件变小并不意味着推理必然更快。人工智能量化能否落地,要同时回答两个问题:有限数值范围怎样保留有效信号,部署后又有多少计算真正进入低比特内核。
精度损失首先取决于量化尺度怎样覆盖激活分布。在线性均匀量化中,尺度决定相邻整数对应的实数间隔;若少数通道出现远大于主体分布的离群值,按整个张量的最大幅度设定范围,就会把大量整数等级留给罕见大值。其余小幅激活只能挤在少数等级里,舍入误差相对增大。这里的问题不是位数抽象地不够,而是不同通道共享尺度后,动态范围的使用发生了偏斜。
缩小覆盖范围能够提高主体区间的分辨率,却会把超出边界的数值截断,两类误差必须一起比较。校准集若只包含短输入、常见语言或简单任务,就可能没有激发实际业务中的异常通道,离线误差很小也无法证明部署稳定。应固定一批具有代表性的输入,在目标层比较量化前后的输出偏差,再回到任务指标判断误差是否被后续计算放大,不能只用单层均方误差替代最终质量。
一种处理方式是给通道分别设置尺度,另一种是在保持浮点计算等价的前提下,将激活通道的幅度负担转移到权重。后者需要对输入与对应权重施加相互抵消的缩放,不能单独修改一侧。它改变的是两侧对量化误差的敏感性,并没有保证任意模型都能无损压缩。采用哪种粒度,还受目标内核支持约束;若运行时只接受更粗的尺度,理论上的精度方案可能无法直接执行。对于误差集中的层,可以保留较高精度作为局部例外,但应重新检查新增转换边界是否抵消收益。比较不同层配置时还要固定输入与校准版本,否则样本分布变化会和精度变化混在一起,无法确认退化究竟来自哪一次修改。
数值方案确定后,第二个约束来自实际执行图。模型中标记了整数张量,不等于每个算子都由整数内核完成。运行时可能只支持特定矩阵维度、数据布局或量化格式;遇到不支持的节点,就把数据反量化回浮点,计算结束再量化。若这类边界频繁出现,内存搬运和格式转换可能吃掉矩阵乘法节省的时间,较小模型和较小批量尤其需要实测。
因此,性能分析要查看图优化之后的执行节点,而不是只看导出文件的精度标记。相邻的矩阵乘法、偏置和激活若能融合,可能减少中间张量写回;若某个节点使计算图被拆开,融合机会也会消失。对于人工智能端侧部署,测量应包含输入转换、数据传输与输出恢复,同时保持线程数、输入形状和预热条件一致。只截取单个低比特内核的耗时,得到的结果不能代表完整请求。
还应区分带宽受限与计算受限的负载。仅压缩权重通常能减少读取字节数,但执行时可能需要解包和反量化,收益取决于这些操作能否与矩阵计算有效结合。若设备缺少对应指令,增加压缩比例反而可能增加指令开销。工程验收可以逐层记录低比特覆盖率、转换时间和端到端延迟,再与相同硬件上的浮点基线比较;只有质量与耗时同时满足预算,压缩方案才具备交付条件。
量化应先找到可接受的误差分配,再验证执行图能兑现节省。精度靠分布与尺度证明,速度靠目标设备测量,两项缺一都不能把文件缩小等同于部署成功。





