loading

Loading

探索与发现

首页 AI 前沿

端侧小模型量化:QAT 该在什么时候开

分类:AI 前沿
字数: (1904)
阅读: (1)
0
摘要:端侧量化先用 PTQ 还是直接 QAT?这篇拆开讲判断标准、校准集选择、伪量化节点的代价,以及 INT8 在 CPU 上反量化导致提速归零的坑。

端侧部署走到最后一步,量化基本绕不过去。但量化有个分水岭:PTQ(训练后量化)做得动就直接用,做不动才需要上 QAT(量化感知训练)。这篇文章拆开讲这个判断该怎么下,以及真开了 QAT 之后要付什么代价。


先看清楚基础数字


INT8 量化的映射关系是教科书上的那一行:q = round(x / scale + zero_point),scale 和 zero_point 来自校准集统计。按 TensorFlow Model Optimization 的说明,用默认 API 参数时模型体积可以压到原来的四分之一,在它测试过的 CPU 后端上延迟大约缩短到原来的 2/3 到 1/4。


这两个数字是卖给老板看的,不是给工程判断用的。真实项目里占板子的往往是校准集:一般从训练集里随机抽 100 到 500 个样本,要覆盖各种典型场景。校准集分布一旦偏了,PTQ 后的精度会掉得很难看,而且掉得失真——你在本地测试集上看到 drop 0.8%,上线后发现某类输入直接崩掉,大概率就是校准集没有覆盖那种情况。


什么时候 PTQ 就够了


一个粗略的工程经验:分类任务 top-1 精度下降在 1% 以内,PTQ 就可以收了。语音唤醒、关键词识别这类任务容忍度再高一些;如果是文档问答、OCR 后处理这种本来就靠小模型做工的端侧场景,掉 1% 有可能改变一整条链路的输出质量,得具体看下游对错误的敏感度。


实操顺序建议固定在:先用 TFLite 的工具链跑一轮 PTQ,拿到精度损失,再决定要不要继续。别一上来就上 QAT,QAT 会增加训练时间,资料里给的量级是 30% 到 50%,前提是你有可用的训练代码和算力。多一轮训练循环意味着多一轮调参、多一轮回归,项目排期上要把这块算进去。


QAT 在做什么,以及你付出的不只是训练时间


QAT 的核心是在浮点模型里插入伪量化节点,前向时模拟量化带来的取整和截断误差,让训练过程 把这些误差吸收进权重里。落到部署工具链上,最后要把伪量化模型转成定点模型。D-Robotics 的 X5 平台文档里有个值得注意的表述:QAT 从原理上和普通训练无异,难点在于你得先搞清楚目标硬件的限制,并按照这些限制搭建伪量化模型;工具的价值是做在你提供的浮点模型上自动插算子。


这句话背后的重点是硬件限制前置。你用哪个后端、NPU 支持哪些算子、激活值的量化粒度是 per-tensor 还是 per-channel、哪几层只能保持高精度,这些都决定了伪量化算子的插法。同一份 QAT 训练代码换一颗芯片,未必能直接跑。


TensorFlow Model Optimization 的文档也提醒了一件事:代码目前只覆盖一部分模型架构。你在模型里加了个不太常见的算子,很可能得自己补梯度或退回浮点。


伪量化节点的统计方法要选


伪量化里 scale 和 zero_point 怎么来,有两条路。基于统计的方法是先从校准数据推出一组固定参数,插进去当常量;基于学习的方法是让这组参数跟着训练一起更新。前者更接近 PTQ 的部署形态,数值更可控;后者灵活性高,但训练更慢、收敛更飘。做端侧文生音频或者小语言模型的时候,激活值分布有长尾,固定 scale 容易切掉尾部峰值,这种情况下基于学习的方式收益会更明显,但它会把训练轮次和显存占用一起抬高。


一个容易踩的坑:量化救了延迟,未必救了吞吐


INT8 在 NPU 上通常快得明显,到 CPU 上则要看后端是否真的走了定点整数指令。有些框架的 INT8 实现会先把数据反量化回浮点再用 SIMD 算,这时实测速度可能比 FP32 还慢。所以精度和延迟要分开验证:精度在离线集上比,延迟在目标设备的真实后端上跑,不是在你开发机的模拟器里跑。


决策清单


  • PTQ 第一轮,看精度损失;分类任务 1% 以内即可接受。
  • 校准集 100 到 500 条,必须覆盖上线后预期的长尾输入;覆盖不到的那类样本要单独评估。
  • 还要看硬件算子支持表:某些层如果能不量化,就别强行量化,混合精度保留少数敏感层往往比全 INT8 QAT 划算。
  • 上 QAT 之前估算训练预算:时间加 30% 到 50%,以及后续每一版训练脚本都要重新过一遍伪量化节点回归。
  • 验收时分开跑三个指标:离线精度、目标芯片上的首层延迟、端到端首次输出时间。三者不一定同向。

端侧小模型这波(包括在 Windows 设备上跑本地小模型的那类方案),量化给出的空间主要是体积和延迟的压缩。但如果精度敏感、后端刁钻,QAT 不是一键开关,而是一段要跟硬件厂商文档一起读的工程流程。先用 PTQ 拿到线上的精度上限,再决定要不要花那份训练预算。

转载请注明出处: 皮哈皮阿

本文的链接地址: https://blog.phpat.com/ai-frontier/639.html

手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

您可能对以下文章感兴趣
1 / 1
预览图