AI芯片低比特为何先失真?累加精度怎么守?
扫描二维码
随时随地手机看文章
权重和激活一降到低比特,吞吐是上去了,精度却常常不是线性下降,而是在某几个层面突然断崖。AI芯片做低比特计算时,最危险的并不是量化本身,而是量化误差和累加边界在同一层上叠加失控。
低比特误差首先不是“少几位小数”这么简单。把连续值压进 int8、int4 或更低位宽后,误差会随分布形状、量化粒度和离群值比例发生剧烈变化。某些层激活分布集中,通道级 scale 足以支撑;某些层却有极少数大值拉长尾巴,一旦按整层统一 scale 量化,大部分正常值的分辨率会被稀释,少数离群值还未必真正保住。
很多实现把量化问题只归结为前处理校准,其实运行时分布漂移同样关键。提示长度变化、batch 结构变化和 KV 缓存增长都会改写某些层的激活统计,离线标出来的 scale 在另一类输入上可能立刻失配。若硬件侧缺少足够灵活的 per-channel 或分组 scale 支持,软件只能在吞吐和误差之间做更难看的折中。
累加精度则是另一条更隐蔽的边界。低比特乘法每一步误差未必大,但当一个输出元素需要累加上千上万个乘积时,部分和的动态范围会迅速膨胀。若累加器位宽、移位策略或分段归约顺序设计得过于乐观,溢出和舍入就不会只伤最后几位,而会直接改变符号或把高能量通道整体压扁。
对AI芯片而言,最容易被忽略的是“前面安全,后面才炸”的分段累加场景。单个 MAC 阵列内的局部和可能还在范围内,可跨阵列归约、跨 tile 拼接或 attention score 再缩放时,动态范围会在后半程再次放大。若只按单阵列最坏值设计累加位宽,系统级路径上的真实峰值常常会被低估。
因此守精度不能只看乘法位宽,还要同时定义累加何时升位、何时截断、何时回退混合精度。某些算子适合保持 int8 输入、int32 累加,某些归一化和 softmax 前后却必须在关键节点升回更高精度,否则后续非线性会把前面的微小偏差变成明显分类或生成误差。把这些回退点放准,通常比盲目把整张网都升位更划算。
验证低比特实现时,平均精度损失不是唯一指标。更需要关注哪些层最先出界、哪些输入模式触发离群值、哪些累加路径最容易在长序列下溢出。只有把误差按层、按通道、按序列长度摊开,才能判断是 scale 失配在先,还是累加边界太窄在先。
校准集本身也会左右结论。若离线校准样本过于温和,量化表会对常见输入看似稳定,却在长尾请求上突然出界。长上下文下这个问题会更早暴露,也更难靠后处理掩掉,尤其在长链上。把高激活峰值、超长上下文和极端分类样本都纳入校准与回归,通常比单纯加大位宽更能守住低比特收益。
所以,低比特先失真往往不是量化天然不准,而是累加路径没有给分布尾巴留够空间。把 scale 设计和累加位宽一起守住,吞吐提升才不会用模型质量硬换。





