当前位置:首页 > 物联网 > 智能应用
[导读]低比特部署看上去最先涉及的是权重存储,但真正决定上限的往往是中间累积怎么做。

低比特部署看上去最先涉及的是权重存储,但真正决定上限的往往是中间累积怎么做。NPU如果只宣传输入几 bit、权重几 bit,却不说明部分和在哪个阶段截断,混合精度的风险就被藏在了最关键的数值链里。

乘法结果本身未必是大头,累加才是。一个卷积窗口里几十到上百次乘加叠在一起,即便单次乘积误差不大,部分和位宽不够也会先溢出或被迫舍入。更难的是,这类问题不会平均地影响所有层:通道多、感受野大或残差叠加重的层更敏感,前面几层看似正常,后面某一层突然开始偏。只盯整体精度,往往很难定位是哪一段累积先丢了信息。

混合精度路径设计得不好,还会把不同阶段的误差叠加。输入可能是 8 bit,乘法在更高位宽展开,部分和再压回 16 bit,最后又经一次 requantize 写成更低位。每多一次格式切换,就多一次舍入方向选择;若编译器为了省资源,把几次缩放合并成近似常数乘加,误差来源就会从单点变成整条链。离线浮点仿真很难完全覆盖这些硬件取舍。

逐层精度回退因此很重要。不是所有层都值得用最高位宽,真正该保的通常是容易放大误差的瓶颈层、下采样后的高语义层或存在大残差叠加的节点。反过来,早期对噪声更鲁棒的层可以接受更低比特。若平台只能给出全局混精开关,工程团队往往不是保守得全开高精,就是冒险地全压低精,两种都不划算。

输出回写格式也决定下游是否还能接得住。某层即使在内部高精积累,如果写回时过早压缩,后续层再高精也救不回已经丢掉的动态范围。尤其是跨子图边界、跨核边界或跨处理单元边界,很多系统会默认用统一低位格式做接口,方便搬运却牺牲了关键节点的数值余量。接口精度不应只按搬运成本定,而要看它是否处在误差最敏感的位置。

评估混精不能只看 top1 或 mAP 这类最终指标,还要看各层误差传播。把参考路径与硬件路径逐层对比,观察哪些层的部分和分布最容易压扁、哪些节点的缩放后误差突然陡增,才能知道该把位宽预算花在哪里。若问题集中在少数层,提升累加器或推迟压缩通常比整体抬高位宽更值。

做逐层回退时还要盯住带宽代价,因为少数层一旦切回高精,写回体积和片上缓冲占用也会同步放大,数值更稳了,节拍却可能因此失去平衡。

如果平台支持混合舍入模式,还要确认相邻层是否共享同一舍入策略,否则前层用最近偶数、后层用朝零截断,误差方向会在链路中被系统性偏置。

工程上最怕把混合精度当成线性减法,好像每降一位只少一点精度、多一点速度。真实情况是,某些层在阈值以内几乎无感,一跨过边界就会突然崩。找到这些边界层,比讨论抽象的“几 bit 更好”有意义得多。

混精优化的重点,从来不是把数字写得更漂亮,而是保证误差在关键位置不爆仓。只要累加器和格式切换被认真算过,NPU上的低比特收益才不会靠运气维持。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭