其实static quantization和static quantization aware training基本上就是我们常说的PTQ(训练后量化)和QAT(训练中量化): Post Training TORCH-FX量化 本篇主要介绍FX中的PTQ方法,也就是我们一般常用的后训练量化方法,PTQ方法的优点就是不需要数据进行训练,量化框架只要把所有网络节点搭好,不需要反向传播,正向推理收集量化信息即可 import prepare_fx, convert_fx float_model.eval() # 因为是PTQ,所以就推理模式就够了 qconfig = get_default_qconfig( 此时模型的具体op实现还是原先FP32的实现,但是在合适的位置已经插入了观察节点,我们可以运行推理来进行PTQ收集activations和weights的量化信息。 combined_max.shape) self.max_val.copy_(combined_max) return x_orig 推理过程中,仅仅涉及到激活层信息的收集,因为PTQ
Dynamic range api会在采用基于MQbench框架做PTQ时讲解。 TensorRT引入的QDQ算子方式在针对Yolo模型的PTQ和QAT方式时都有详细的阐述,当然这个过程也没有那么顺利。 详解MQbench量化工具包在TensorRT上的应用 我们研究了基于MQbench框架的普通PTQ算法和包括Adaround高阶PTQ算法,且启发于Adaround高阶PTQ算法。 ,weight的校准前向传播一次,activation的校准需要多次 因此我们将weight的PTQ过程和activation的PTQ过程分开进行,加速PTQ量化。 实践证明,我们采用上述配置的分离PTQ量化在yolov8上可以取得基本不掉点的int8量化精度。
作者开发了一个用于视觉Transformer的PTQ框架,使用双均匀量化,名为PTQ4ViT。 3 方法 首先介绍视觉Transformer的基本PTQ方法。然后,将分析使用基本PTQ时的量化问题,并提出解决这些问题的方法。最后,作者将介绍作者的PTQ框架,PTQ4ViT。 3.4 PTQ4ViT框架 为了实现快速的量化和部署,作者开发了一种高效的用于视觉Transformer的PTQ框架,PTQ4ViT。其流程如算法1所述。它支持双均匀量化和Hessian引导度量。 从这个表格中,作者可以看到基本PTQ在某些视觉Transformer上即使在8位量化时也导致了超过1%的准确度下降。PTQ4ViT在8位量化时的准确度下降不到0.5%。 在8位量化和6位量化时,PTQ4ViT优于其他方法,平均提高了1%以上的预测准确度。在4位量化时,PTQ4ViT的性能不佳。
PTQ 和 QAT是什么后训练量化(PTQ):模型训先练完再加工,训练好 FP32 模型后,直接对权重或激活值做量化,不用重新训练。 /llama7b_ptq_8bit")tokenizer.save_pretrained("./llama7b_ptq_8bit")关键说明:1. 保存与部署:QAT 后仅保存 LoRA 权重约100MB,部署时需加载 PTQ 基础模型 + LoRA 权重,最终模型体积仍为7GB,但精度远高于纯 PTQ。 第一步:优先尝试 PTQ用少量校准数据快速完成 PTQ 量化,测试精度损失是否在业务容忍范围内。如果达标,直接选择 PTQ,低成本、高效率的方案永远是首选。2. 第三步:折中方案,PTQ+QAT 混合量化若只有部分训练数据或算力有限,可先用 PTQ 量化模型,再用少量数据做 1-2 个 epoch 的 QAT 微调。
Dynamic range api会在采用基于MQbench框架做PTQ时讲解。 TensorRT引入的QDQ算子方式在针对Yolo模型的PTQ和QAT方式时都有详细的阐述,当然这个过程也没有那么顺利。 3、详解MQbench量化工具包在TensorRT上的应用 我们研究了基于MQbench框架的普通PTQ算法和包括Adaround高阶PTQ算法,且启发于Adaround高阶PTQ算法。 ,weight的校准前向传播一次,activation的校准需要多次 因此我们将weight的PTQ过程和activation的PTQ过程分开进行,加速PTQ量化。 实践证明,我们采用上述配置的分离PTQ量化在yolov8上可以取得基本不掉点的int8量化精度。
在本文中,作者提出了一个针对分割任何模型的训练后量化(PTQ)框架,即PTQ4SAM。 首先,作者研究了由于后关键线性激活中的双峰分布导致的SAM量化内在瓶颈。 另一方面,PTQ更有前景,因为它只需要少量 未标注 样本来校准预训练的网络。在本文中,作者专注于设计PTQ方法,因为它在实际使用中更有效。 Post-Training Quantization 作为一种主流的压缩方法,主流的后训练量化(PTQ)方法可以大致分为两类:基于统计的PTQ和基于学习的PTQ。 2.2.2 Learning-Based PTQ 基于统计的PTQ方法,还提出了几种基于学习的PTQ方案。AdaRound [42] 在量化权重时优化取整操作,以最小化模型的总体损失。 为了验证PTQ4SAM在两种PTQ方法中的有效性,作者将作者的方法整合到基于统计的OMSE [5]和基于学习的QDrop [57]中,分别称为PTQ4SAM-S和PTQ4SAM-L。
训练时压缩与量化支持算法: 推荐版本第三方依赖版本: pytorch2.6 openvino2025.1 opencv-python4.10 安装NNCF pip install nncf 模型量化与压缩 训练后量化(PTQ )YOLO系列INT8 这里以YOLO11为例,实现自定义YOLO11对象检测模型的训练后量化,通过PTQ在维持精度的同时大幅提升推理速度。 PTQ 是最简洁的INT8量化方法,只需要模型和一个小的 (~300 个样本) 校准数据集即可实现对模型的INT8量化。 PTQ的量化代码如下: 运行结果: 这样就实现了PTQ量化,得到模型会比原来的FP32推理速度快1.2~1.5倍左右。
Quantization量化对TinyML的重要性,但是没有深入说明Quantization的实现机制,本篇博文打算从TFlite的案例代码切入,从代码的Optimize选项展开讲TFLite背后Quantization的PTQ Quantization 技术分类 高层次来看,TFLite的Quantization技术有两个大类: Post-training Quantization (PTQ) 训练后量化: Quantized 本文着重讲PTQ,以后有机会再展开阐述。 Post-training Quantization (PTQ) 训练后量化 PTQ所做的都是把TF model的weights的float32转换为合适的int8,存储在tflite model中 put it togeter 下图(摘自一个博文)把PTQ相关技术内容组合在一起,较好的总结。
在本研究中,我们提出了QMamba,据我们所知,这是首个专为视觉SSMs设计的PTQ框架之一,其设计基于对SSMs中激活分布的深入分析。 大量实验表明,QMamba在多种模型规模和结构的视觉模型上均优于现有的先进PTQ方法。 在本工作中,基于上述观察结果,我们提出了QMamba,这是首个专为视觉SSMs设计的PTQ框架之一。 BRECQ [15] 通过顺序重建基本模型模块来提升PTQ性能,在4比特宽度下能够达到与QAT方法相当的表现。 Qdrop [29] 则通过在PTQ过程中随机跳过激活值的量化操作进一步提升了PTQ性能,增强了量化模型的鲁棒性。 然而,这些先进的量化方法并非专门为SSMs设计。
, evaler): # disable all quantable layer model_quant_disable(model_ptq) # analyse each quantable layer quant_sensitivity = list() for k, m in model_ptq.named_modules(): if module can not be quantized, continue continue eval_result = evaler.eval(model_ptq ) # disable this module sensitivity, anlayse next module module_quant_disable(model_ptq (model, device): model_ptq = copy.deepcopy(model) model_ptq.eval() model_ptq.to(device)
而模型后量化(Post-training Quantization, PTQ)作为另一类常用量化方法,在预训练大模型领域却鲜有探索。 诺亚方舟实验室的研究者从以下四个方面对 QAT 与 PTQ 进行了详细对比: 训练时间:QAT 由于模拟量化算子等操作,训练耗时远远超出全精度训练(FP),而 PTQ 仅仅需要几十分钟,大大缩短量化流程 而 PTQ 通过逐层回归训练,无需载入整个模型到显存中,从而减小显存开销; 数据依赖:QAT 需要获取整个训练数据集,而 PTQ 只需要随机采样少量校准数据,通常 1K~4K 张 / 条图像或者标注即可 ; 性能:鉴于 QAT 在整个训练集上充分训练,其性能在不同的量化 bit 上均领先 PTQ。 因此性能是 PTQ 的主要瓶颈。 基于以上观测,研究者提出了针对视觉和 NLP 任务的 PTQ 方法,在保持其训练时间、显存开销、数据依赖上优势的同时,大大改善其性能,使其逼近量化感知训练的精度。
Q-YOLO引入了一种完全端到端的训练后量化(PTQ)流水线,该流水线具有精心设计的基于单边直方图(UH)的激活量化方案,该方案通过最小化均方误差(MSE)量化误差来通过直方图分析确定最大截断值。 在COCO数据集上的大量实验证明了Q-YOLO的有效性,优于其他PTQ方法,同时在精度和计算成本之间实现了更有利的平衡。 有两种主流的量化方法,量化感知训练(QAT)和训练后量化(PTQ)。尽管QAT通常比PTQ获得更好的结果,但它需要在量化过程中对所有模型参数进行训练和优化。 另一方面,PTQ是用于量化实时目标检测的更有效的方法。 为了检查实时目标检测的低位量化,首先使用最先进的目标检测器YOLOv5建立PTQ基线。 03 新框架分析 鉴于上述问题,我们介绍了Q-YOLO,一种用于实时目标检测的完全端到端PTQ量化架构,如下图所示。
网络量化通常分为两类:后训练量化(PTQ)和量化感知训练(QAT)。PTQ使用已经训练好的网络并对其进行量化,因此它需要最小化的超参数调整和无需端到端训练。 作者的贡献如下: 提出了一种新颖的端到端量化(PTQ)方法,适用于重参化网络,且不需要修改网络结构或重新训练。作者的方法有效地弥合了重参化技术和PTQ实际部署之间的差距。 神经网络量化可分为两大主要方法:后训练量化(PTQ)和量化感知训练(QAT)。PTQ涉及使用最小或没有数据的预训练网络进行量化,需要最小超参数调整和无需端到端训练。 由于QAT涉及修改训练代码并涉及额外成本,只有在训练资源和代码和数据可用且PTQ无法产生令人满意结果时才会使用QAT。在本论文中,作者特别关注将PTQ应用于重参化网络。 例如,作者在YOLOv6s上实现了43.0%的mAP,与原始端到端量化(PTQ)的41.2%相比下降了0.8%,远超过了原始端到端量化(PTQ)的2.6%。
模式 推荐默认 背后原因 PTQ权重:对称 激活 :非对称 因为激活是不可训练的静态量化,非对称能更好地适应非负分布QAT权重:对称 激活:对称(人为设定)因为激活是可训练的,你可以通过训练让它“对称”起来,精度损失更可控2.2 PTQ ⚙️ 区别特性 PTQ(训练后量化) QAT(量化感知训练) 训练阶段仅FP32训练 插入伪量化节点训练反向传播❌ 不支持 ✅ 通过STE支持 精度损失较大(尤其小模型)通常更小 note无论是PTQ 还是 QAT , 每一种实现方式都需要 prepare_fx 和 convert_fxmodel_prepared = quantize_fx.prepare_fx(model, 插入两类模块:类型对应 prepare 的用途说明Observer用于 PTQ统计 min/max 用来 校准计算 scale 和 zero_pointFakeQuantize用于 QAT模拟量化误差,
此外,还提供了一些实践技巧,包括从校准良好的 PTQ 模型开始、使用余弦退火学习率计划等,以及 QAT 与后训练量化(PTQ)的比较。 感知量化实践 感知量化训练的技巧 从已校准的表现最佳的 PTQ 模型开始 与其从未训练或随机初始化的模型开始感知量化训练,不如从已校准的 PTQ 模型开始,这样能为 QAT 提供更好的起点。 QAT 和 PTQ 对比 PTQ QAT 通常较快 较慢 无需重新训练模型 需要训练/微调模型 量化方案即插即用 量化方案即插即用(需要重新训练) 对模型最终精度控制较少 对最终精度控制更多,因为量化参数是在训练过程中学习到的 总之,PTQ 和 QAT 各有优缺点,选择哪种方法应根据具体的应用场景和资源情况来决定。 对于大多数应用,PTQ 可以提供一个快速且易于实现的解决方案,而对于高精度要求的任务,QAT 则是更好的选择。
本文对卷积神经网络上的每个量化因素进行了系统的探索,形成了PTQ量化的黄金准则。此外,作者提出的多阶段微调策略使得量化能够与现有的剪枝策略协同工作。 为了解决这个问题,NVIDIA的TensorRT采用了一种PTQ量化方法,通过最小化量化前后特征图分布之间的Kullback-Leibler(KL)散度来扫描量化尺度。 9、PTQ量化指南 总结一下,为了提高PTQ量化的准确性,作者提出了以下准则: 使用改进的KL散度算法和容差系数来确定激活值的量化尺度,并使用MinMax量化来确定权重的尺度。 表5展示了PTQ量化的结果。为了比较,作者使用了商业闭源的推理库TensorRT,并报告了使用不同校准数据的8次实验运行的平均结果。 作者首先根据PTQ准则对经过训练的全精度模型进行量化。然后,作者采用修改后的训练过程对其进行微调,使模型适应量化。作者禁用了激进的随机大小裁剪,并采用了较弱的随机裁剪增强。
图示如下: YOLOv8量化压缩 基于NNCF实现YOLOv8预训练模型的训练后量化压缩(PTQ),实现INT8量化YOLOv8模型生成。 准备好验证数据以后,就是最后一步了,启动模型INT8量化,相关的代码如下: 这样就可以完成PTQ量化模型的生成。
根据量化范围是否动态调整,PTQ可分为静态量化(离线确定所有量化参数)和动态量化(部分参数在推理时动态计算)。PTQ的挑战在于处理激活值中的异常值(可能严重影响量化精度)和不同层对量化的敏感度差异。 现代PTQ技术如GPTQ、AWQ等采用更精细的量化策略,如按通道量化、自适应舍入、稀疏感知量化等,显著提升了PTQ的精度保持能力。 后训练量化(PTQ)快速轻量化的入门选择,后训练量化是一种对已完成训练的全精度模型进行直接量化的技术。 相比PTQ,QAT通常能将额外精度损失再降低50%以上,特别是对于复杂的模型架构和低精度设置。 精度要求:医疗、金融等高精度场景倾向QAT;通用应用可接受PTQ2. 资源限制:移动端、边缘设备优先考虑PTQ或极低精度量化3. 时间成本:快速部署选PTQ;有训练时间且追求精度选QAT4.
官方代码库地址: https://github.com/openvinotoolkit/nncf NNCF PTQ 是最简洁的INT8量化方法,只需要模型和一个小的 (~300 个样本) 校准数据集即可实现对模型的 PTQ的量化代码如下: 运行结果如下: 基于OpenVINO2025 C++ SDK部署INT8量化后模型,推理效果如下: OpenVINO + YOLO11药片检测的推理代码如下: std::string
量化方案多种多样,常见的两种方法是:训练后量化 (Post-Training Quantization, PTQ) 和量化感知训练 (Quantization-Aware Training, QAT) PTQ 可以在训练后应用,不需要再训练网络,代价是重建质量稍差。本文使用 PTQ,因为 PTQ 误差不会显著影响主观信号质量。