061、量化感知训练(QAT)的IR表示

📅 2026/8/20 17:08:30
061、量化感知训练(QAT)的IR表示
061、量化感知训练(QAT)的IR表示从一次模型部署翻车说起去年有个项目,把MobileNetV3量化部署到某款AIoT芯片上。FP32精度92%,INT8量化后直接掉到78%。团队里有人提议“直接上QAT吧”,结果训练完导出模型,芯片编译器报了一堆“unsupported operation”。我打开导出的MLIR文件一看,好家伙,fake quant节点插得乱七八糟,有些地方甚至出现了“量化-反量化-再量化”的死循环。那次debug花了整整三天,最后发现是QAT的IR表示在转换过程中丢失了关键信息——scale和zero point的绑定关系被拆散了。从那以后,我养成了一个习惯:写QAT代码之前,先想清楚它在IR层面长什么样。QAT的IR本质:在计算图中嵌入“假量化”节点量化感知训练的核心思想很简单:在训练过程中模拟量化误差,让模型权重学会“容忍”量化带来的精度损失。但在IR层面,它做的事情是在原始浮点计算图的特定位置插入fake quantize操作。一个标准的fake quantize操作,在MLIR中通常表示为:%q = "tfl.quantize"(%input) {qtype = tensor1x224x224x3x!quant.uniformu8:f32, 0.00784314:128} : (tensor1x224x224x3xf32) -