量化感知训练(QAT)流程

WHAT:量化感知训练(Quantization-Aware Training, QAT) 是一种在模型训练阶段引入量化误差的技术。

它的核心思想是:通过在前向传播时插入"伪量化节点"引入量化误差 ,将权重和激活模拟为低精度(如 int8)格式,同时仍然使用高精度(如 float32)进行反向传播和参数更新,使得模型在训练时适应量化误差的存在,从而在实际部署时保证性能。伪量化节点一般通过连续的量化与反量化(如float32量化->int8反量化->float32)引入量化误差

WHY: 量化技术可以降低模型的大小和计算复杂度,提高模型在移动设备或嵌入式系统等资源受限环境中的运行效率。

以将权重从 float32(32位)量化为 int8(8位)为例

存储空间 :理想情况下将缩小至原来的 1/4(理论上限)

推理速度 :在支持低精度加速的硬件(如 ARM CPU、DSP、TPU、NPU)上推理速度通常可提升 2 ~ 4 倍,但实际加速比依赖于具体平台、模型结构和量化方式。

HOW:

1. 准备工作

在正式进行qat训练之前需要两个步骤。首先,使用标准的训练方法预训练一个模型,以获得较好的权重和量化起点;其次,准备一个完全支持qat的模型结构,由于某些模块(例如多头自注意力机制)在qat框架并不原生支持**(** 如 tensorflow.model_optimization 并不支持 MultiHeadAttention 的自动量化),这些模块在qat阶段需要手动实现或替换为可量化版本,而不是直接调用tensorflow等写好的包,以确保量化代码能识别这些参数并正确插入伪量化节点并进行量化训练。

2. 训练过程(以tensorflow为例)

step1: 输入激活(float32)

step2: 伪量化权重(float32->量化->int8->反量化->float32)引入量化误差

step3: 前向计算

step4: 伪量化输出(float32->量化->int8->反量化->float32)引入激活误差

step5: 反向传播,遇到伪量化节点使用STE(Straight Through Estimator)传递梯度

【待补充】

为了实现自定义的 QAT 训练,最推荐也最快速的方法之一,就是通过为每一层显式命名的方式进行标记。这也是 TensorFlow 官方推荐的做法。

在 QAT 训练开始前,我们通常会逐层遍历模型 ,使用 annotate_layer 对需要量化的层打上标记,并通过 clone_function 将模型复制一遍。

然后,使用 quantize_apply() 对复制后的模型进行包装,此操作会根据指定的量化方案,在所有标记过的层中插入对应的伪量化节点(包括权重和激活)

接下来,只需像普通模型一样调用 compile()fit(),即可进入标准的训练流程啦!

相关推荐
nn在炼金12 分钟前
FlashAttention 1 深度解读:原理、价值、应用与实战
人工智能·算法
沐雪轻挽萤12 分钟前
pytorch模型部署基础知识
人工智能·pytorch·python
极客BIM工作室18 分钟前
从GAN到Sora:生成式AI在图像与视频领域的技术演进全景
人工智能·生成对抗网络·计算机视觉
nix.gnehc18 分钟前
PyTorch数据加载与预处理
人工智能·pytorch·python
skywalk816321 分钟前
用Trae的sole模式来模拟文心快码comate的Spec Mode模式来做一个esp32操作系统的项目
人工智能·comate·trae·esp32c3
*星星之火*26 分钟前
【大白话 AI 答疑】第5篇 从 “窄域专精” 到 “广谱通用”:传统机器学习与大模型的 6 大核心区别
人工智能·机器学习
roman_日积跬步-终至千里27 分钟前
【模式识别与机器学习(7)】主要算法与技术(下篇:高级模型与集成方法)之 扩展线性模型(Extending Linear Models)
人工智能·算法·机器学习
张飞签名上架27 分钟前
苹果TF签名:革新应用分发的解决方案
人工智能·安全·ios·苹果签名·企业签名·苹果超级签名
xcLeigh30 分钟前
AI 绘制图表专栏:用豆包轻松实现 HTML 柱状图、折线图与饼图
前端·人工智能·html·折线图·柱状图·图表·豆包
玖日大大32 分钟前
LongCat-Flash-Omni:5600 亿参数开源全模态模型的技术革命与产业实践
人工智能·microsoft·语言模型