当前位置: 首页 > news >正文

大模型-QAT介绍

一、量化技术简介

近年来,随着Transformer、MOE架构的提出,使得大模型轻松突破上万亿规模参数,从而导致模型变得越来越大,因此,需要一些大模型压缩技术来降低模型部署的成本,并提升模型的推理性能。 目前的模型压缩技术主要分为如下几类:

模型剪枝Pruning

知识蒸馏(Knowledge Distillation

模型量化

模型量化是一种用于减少神经网络模型大小和计算量的技术,将模型参数(如:权重)从高精度数据类型(如:float32)转换为低精度数据类型(如:int8 或 fp4)。模型量化通过以更少的位数表示数据,可以减少模型尺寸,进而减少在推理时的内存消耗,并且在一些低精度运算较快的处理器上可以增加推理速度,同时仍然可以保持模型的性能。目前量化技术从大的角度上可以分成 量化感知训练QAT(Quantization-Aware Training)和训练后量化PTQ(Post Training Quantization)。

PTQ:

PTQ 的主要优势在于其简单和高效,无需对 LLM 架构进行修改或重新训练,仅使用有限的校准数据进行校准即可。然而,值得注意的是,PTQ可能会在量化过程中引入一定程度的精度损失。PTQ特别适合需要大幅度压缩模型的场景。对于通常包含数十亿参数的 LLMs 来说,量化感知训练(QAT)的训练成本过高,PTQ 因此成为一种更实际的替代方案。缺点是精度的损失会比较的大。目前量化在大模型领域的实践中,我们发现 PTQ 在 4bit或8bit 以及以上还行,但是再往下量化效果就不太行了,精度损失比较大。

QAT:

在量化感知训练(QAT)中,量化过程被无缝地集成到大型语言模型(LLMs)的训练中,使这些模型能够适应低精度表示,在量化处理时保持其原始的输出分布,确保性能损失最小化,从而减轻了精度损失。因为通常涉及整个模型的重新训练,通常需要大量的训练数据和计算资源,这对QAT的实施构成了潜在的瓶颈。不幸的是,当前最好的低于8比特的PTQ方法也会导致模型质量急剧下降。因此,对于更高的量化水平,人们发现有必要使用量化感知训练(QAT)。在本文我们介绍下量化技术中的量化感知训练QAT(Quantization-Aware Training) 。

二、Quantization-Aware Training (QAT)

2.1 QAT的原理

当前针对LLM的QAT方法分为两类:全参数重新训练和参数-高效再训练

  • 全参数重新训练是一种在量化LLM时对LLM进行完整的参数重新训练的方法,通过使用数据生成方法以及QAT和蒸馏技术,这样可以保留原始模型的涌现能力,同时减少内存使用和计算量。

  • 参数-高效再训练是指采用参数高效的方法重新训练LLM。其中,QLoRA和QA-LoRA[4]提出了将组量化集成到QLoRA中,缓解量化与低秩适应之间的不平衡问题。此外,还有如冻结量化指数并仅微调量化参数、使用二进制量化等。这些方法在具有相对可接受的计算预算下,采用低秩适应来重新训练量化LLM。

PTQ中模型训练和量化是分开的,而QAT则是在模型训练时加入了伪量化节点, 通过在模型训练过程中模拟低精度计算(如 8 位整数计算)来减少推理阶段的精度损失。QAT 的核心思想是让模型在训练过程中意识到量化带来的误差,以便更好地适应量化后的环境。

在量化感知训练过程中,模型的权重和激活在前向传播时会被模拟量化,而反向传播时则继续使用高精度的浮点数进行梯度更新。这种方法既能保持训练的精度,又能让模型意识到推理阶段量化带来的误差,从而在反向传播中对权重的优化过程中进行误差补偿。

QAT 往往比 PTQ 更精确,因为在训练过程中已经考虑了量化。在训练过程中,引入了所谓的“伪”量化(fake quants)。这是指首先将 weights 量化为例如 INT4,然后再反量化回 FP32 的过程, 此过程允许模型在训练期间考虑量化过程、损失计算和weights更新。

QAT的流程归总如下:

  1. 首先在数据集上以FP32精度进行模型训练,得到训练好的baseline模型;

  2. 在baseline模型中插入伪量化节点,得到QAT模型,并且在数据集上对QAT模型进行finetune;

  3. 伪量化节点会模拟推理时的量化过程并且保存finetune过程中计算得到的量化参数;

  4. finetune完成后,使用3步骤 中得到的量化参数对QAT模型进行量化得到INT4模型,并部署至推理框架中进行推理。

  5. QAT方式需要重新对插入节点之后的模型进行finetune,通过伪量化操作,可以使得网络各层的weights和activation输出分布更加均匀,相对于PTQ可以获得更高的精度。

伪量化节点

那么什么是伪量化呢?伪量化实际上是quantization+dequantization的结合,实际上就是模拟量化round引起的误差,上图中的fake quants 的这个过程。

伪量化的操作看起来输入输出没变,但是实际上在其中模拟了量化round操作,将这种误差当做一种训练的噪声,在QAT finetune的同时,模型会去适应这种噪声,从而在最后量化为INT8时,减少精度的损失。

伪量化节点插入位置就是需要进行量化操作的位置,在weights输入conv之前(weight quantization)以及activation之后(activation quantizaion)插入了伪量化节点,QAT训练时所有计算都使用FP32单精度。如下图所示:

下面的公式是一个量化的举例说明示例:

伪量化节点会保存finetune过程中的量化参数,伪量化节点的计算公式中[a, b]即为FP32浮点数值的范围,这个值将会在finetune过程中进行估计与更新,下面介绍伪量化节点weight quantization以及activation quantizaion:

  • 对于weight quantization的量化节点,直接将a, b 设置为weights的最小值与最大值即可,即 a=min_w , b=max_w ;

  • 对于activation quantizaion,处理方式类似于batch norm,使用了指数移动平均,在finetune的每个batch动态地更新 [a, b];

这个是指数移动平均的一般实现:

最后量化模型的时候,得到了缩放系数和量化零点值。

为什么伪量化能减少误差

假设模型损失函数是 L(θ,x),其中 θ 是模型的权重,x 是输入。在量化感知训练中,前向传播会引入量化误差 ϵ,因此损失函数变为:

这个损失函数不仅仅依赖于模型参数 θ 本身,还依赖于由量化误差 ϵ 引入的偏差。

反向传播阶段,模型通过高精度的浮点数权重 θ 来计算梯度并更新weights。此时,损失函数的梯度计算会涉及量化误差。

由上式可知,通过调整权重,模型使其在量化误差 ϵ 存在的情况下对输出影响最小。换句话说,即 QAT 让模型在优化过程中学习,如何在这些误差存在的情况下进行自我调整,使模型最终能够适应量化误差,从而在推理阶段的低精度环境下表现更好。

QAT量化的挑战和优化思路

使用QAT量化LLM在几个主要方面面临挑战:

  • 对数据要求高。如果训练数据域太窄或者与原始预训练数据分布存在显著不同,则可能会损害模型的性能。

  • 对算力要求高。大模型的训练对于算力资源要求比较集中,通常需要大量的训练数据和计算资源。

  • 由于LLM训练及其复杂,因此,很难准确地复现原始的训练设置。

因此针对目前的QAT的量化方法,优化点或者说突破点主要就是如下两点:

减少数据需求

为了减少数据需求,LLM-QAT引入了一种无数据的方法,利用原始FP16的大模型生成训练数据,然后利用预训练模型生成的结果来实现无数据蒸馏。具体来说,LLM-QAT使用词表中的每个token作为生成句子的起始token。基于生成的训练数据,LLM-QAT应用了基于蒸馏的工作流来训练量化的LLM,以匹配原始FP16大模型的输出分布。

减少计算量

为了减少计算量,许多方法采用高效参数微调(parameter-efficient tuning,PEFT)策略来加速QAT。

  • QLoRA[3]将大模型的权重量化为4位,随后在BF16中对每个4位权重矩阵使用LoRA来对量化模型进行微调。

  • LoftQ[5]指出,在QLoRA中用零初始化LoRA矩阵对于下游任务是低效的。作为一种替代方案,LoftQ建议使用原始FP16权重与量化权重之间差距的奇异值分解(Singular Value Decomposition,SVD)来初始化LoRA矩阵。LoftQ迭代地应用量化和奇异值分解来获得更精确的原始权重近似值。

  • PEQA是一种新的量化感知技术,可以促进模型压缩并加速推理。它采用了双阶段过程运行。在第一阶段,每个全连接层的参数矩阵被量化为低比特整数矩阵和标量向量。在第二阶段,对每个特定下游任务的标量向量进行微调。这种策略大大压缩了模型的大小,从而降低了部署时的推理延迟并减少了所需的总体内存。 同时,快速的微调和高效的任务切换成为可能。

后面我们看下经典的论文来对这些技术进行了解学习。

三、附录

[1 ]S.-y. Liu, Z. Liu, X. Huang, P. Dong, and K.-T. Cheng, “Llm-fp4: 4-bit floating-point quantized transformers,” in The 2023 Conference on Empirical Methods in Natural Language Processing, 2023.

[2] L. Li, Q. Li, B. Zhang, and X. Chu, “Norm tweaking: Highperformance low-bit quantization of large language models,” arXiv preprint arXiv:2309.02784, 2023.

[3] T. Dettmers, A. Pagnoni, A. Holtzman, and L. Zettlemoyer, “Qlora: Efficient finetuning of quantized llms,” Advances in Neural Information Processing Systems, vol. 36, 2024.

[4] Y. Xu, L. Xie, X. Gu, X. Chen, H. Chang, H. Zhang, Z. Chen,X. Zhang, and Q. Tian, “Qa-lora: Quantization-aware lowrank adaptation of large language models,” arXiv preprintarXiv:2309.14717, 2023.

[5] Y. Li, Y. Yu, C. Liang, P. He, N. Karampatziakis, W. Chen, and T. Zhao, “Loftq: Lora-fine-tuning-aware quantization for large language models,” arXiv preprint arXiv:2310.08659, 2023

[6] Quantization and training of neural networks for efficient integer-arithmetic-only inference

[7] BitNet: Scaling 1-bit Transformers for Large Language Models https://arxiv.org/pdf/2310.11453

http://www.dtcms.com/a/328205.html

相关文章:

  • Product Hunt 每日热榜 | 2025-08-12
  • DeepSeek-R1-0528 推理模型完整指南:领先开源推理模型的运行平台与选择建议
  • 论区间dp:常用模型(附极角排序教程)
  • 项目实战2——LAMP_LNMP实践
  • @系统管理-WindowsLinux-补丁管理工具
  • SpringBoot项目部署
  • 浪潮推出首个“人工智能工厂”,工业化模式加速技术落地
  • RS485+DMA+空闲中断+HAL库收发数据
  • 无人机智能返航模块技术分析
  • element-table的合并行的使用-指定某些字段允许相邻数据能进行合并,通过传递的key键进行判断-公共方法
  • LaTeX 教程:从入门到专业的排版模板
  • UGUI源码剖析(6):遮罩的“魔法”与“算法”——从C#到Shader,彻底揭示Mask与RectMask2D的原理
  • 13.深度学习——Minst手写数字识别
  • git config的配置全局或局部仓库的参数: local, global, system
  • java面试题储备4: 谈谈对es的理解
  • 【银行测试】外贸信托项目与电子资金项目(面试项目讲解)
  • Java面试题储备11: mysql优化全面讲一下,及你遇到的对应业务场景
  • 不废话,UE5极速云渲染操作方法
  • B.10.02.3-分布式一致性:电商业务场景下的理论与工程实践
  • 使用 RealSense D435 获取红外图像:完整 Python 脚本解析
  • 扣子空间深度解析
  • 堆排序以及实现
  • 飞算 JavaAI -智慧城市项目实践:从交通协同到应急响应的全链路技术革新
  • 【Go】Gin 超时中间件的坑:fatal error: concurrent map writes
  • FPGA即插即用Verilog驱动系列——UART串口接收
  • 医疗智慧大屏系统 - Flask + Vue实现
  • nextTick和setTimeout的区别
  • Docker概述与安装Dockerfile文件
  • k8s-scheduler 解析
  • 1小时 MySQL 数据库基础速通