type
status
date
summary
slug
tags
category
password
URL
icon
背景
模型压缩在尽可能保证模型性能的前提下,可以减少模型的资源占用,提高推理速度,对于实时在线的场景作用非常大。

名词解释
Prefill阶段:预填充阶段,该阶段会对输入的prompt中的所有token进行并行计算,同时缓存已经生成的输入token的KV键值对;
Decode阶段:解码阶段 ,会复用prefill阶段的KV缓存,逐个生成输出Token(每个输出Token都以来前置的所有Token),由于有依赖关系,因此该阶段不可并行;
模型量化:模型量化是一种用于减少神经网络模型大小和计算量的技术,将模型参数(如权重或激活参数)从高精度数据类型(比如Float32)转换为低精度数据类型(如:int8或者fp4)。模型量化通过以更少的位数表示数据,可以减少模型尺寸,今儿减少在推理时的内存消耗,并且在一些低精度运算较快的处理器上可以增加推理速度,同时尽可能的不降低模型性能。
Weight && Activations:Weight参数表示权重参数,Activations表示激活参数,我们有时会见到W8A16、W6A16这类数据,W8A16就表示权重8bit+激活16bit,W6A16就表示权重6bit+激活16bit。
理论知识
常见的数据类型
数据类型 | 位宽 | 符号位 | 指数位 | 尾数位 | 十进制有效数字 | 动态范围 | 相对内存 |
FP64 | 64 | 1 | 11 | 52 | 15-17位 | 10^308 | 8x |
FP32 | 32 | 1 | 8 | 23 | 6-7位 | 10^38 | 4x |
BF16 | 16 | 1 | 8 | 7 | 2-3位 | 10^38 | 2x |
FP16 | 16 | 1 | 5 | 10 | 3-4位 | 10^5 | 2x |
FP8(E4M3) | 8 | 1 | 4 | 3 | ~1位 | 10^2 | 1x |
FP8(E5M2) | 8 | 1 | 5 | 2 | <1位 | 10^4 | 1x |
INT8 | 8 | ㅤ | ㅤ | ㅤ | 2-3位 | 10^2 | 1x |
INT4 | 4 | ㅤ | ㅤ | ㅤ | 1位 | 10^1 | 0.5x |
模型量化分类
量化感知训练(QAT):在模型训练过程中加入伪量化算子,通过训练时统计输入输出的数据范围可以提升量化后模型的精度,适用于对模型精度要求较高的场景;其量化目标无缝地集成到模型的训练过程中。这种方法使LLM在训练过程中适应低精度表示,增强其处理由量化引起的精度损失的能力。这种适应旨在量化过程之后保持更高性能。
量化感知微调(QAF):在微调过程中对LLM进行量化。主要目标是确保经过微调的LLM在量化为较低位宽后仍保持性能。通过将量化感知整合到微调中,以在模型压缩和保持性能之间取得平衡。
训练后量化(PTQ):在LLM训练完成后对其参数进行量化,只需要少量校准数据,适用于追求高易用性和缺乏训练资源的场景。主要目标是减少LLM的存储和计算复杂性,而无需对LLM架构进行修改或重新训练。PTQ的主要优势在于其简单性和高效性。但PTQ可能会在量化过程中引入一定程度的精度损失。
特性 | 训练后量化(PTQ) | 量化感知微调(QAF) | 量化感知训练(QAT) |
介入阶段 | 训练完成后 | 训练中后期微调 | 从零开始训练 |
精度损失 | 中(3-5%) | 低(<1%) | 理论最低 |
时间成本 | 分钟级 | GPU小时级 | GPU周级 |
硬件要求 | 无 | 需支持低精度训练 | 需定制硬件 |
开源支持 | AutoGPTQ, GGUF | NNCF, Brevitas | FP6-LLM代码库 |
产业应用 | ★★★★★ | ★★★★☆ | ★☆☆☆☆ |
量化方法
GPTQ(高精度训练后权重量化)
思想:仅量化权重,其中模型权重被量化为int4数值类型,而激活值则保留在FP16。GPTQ将权重分组为多个子矩阵,然后对每个子矩阵内的所有参数逐个量化,每个参数量化后,需要适当调整这个子矩阵内其他未量化的参数,来弥补量化造成的精度损失。GPTQ量化需要准备校准数据集。
优点:
- 量化速度较快
- 模型性能损耗较小(4位量化的情况下,仍能接近于全精度模型的性能)
- 内存占用大幅降低(量化后的175B模型可在单个A100-80GPU运行,未量化需5块GPU)
- 推理速度提升(在生成任务中,3位量化的模型在A100 GPU上实现了约3.25倍提速)
缺点:
- 依赖校准数据(数据质量差则效果差)
- 可能存在过拟合校准集,导致模型在校准集之外的场景下性能下降
- 只支持新显卡(Nvidia 30系以上)
AWQ(激活感知的权重量化)
思想:仅保护激活幅度最大的1%权重,此部分权重精度不变,将其余部分权重精度降低至4-bit。
优点:
- 泛化性强(不同场景表现稳定)
- 可以自动识别关键参数(无需人工指定)
缺点:
- 不支持复杂模型结构(比如MoE专家网络)
- 需简单调参
BitsandBytes(动态反量化)
思想:权重以int4/int8存储,计算时动态反量化为FP16。
优点:
- 无需校准或导出,可直接使用
- 支持4/8-bit混合精度
缺点:
- 存在性能损失,4-bit量化精度下降较明显
- 推理过程中的反量化会增加10%的延迟
QLoRA(量化低秩微调)
思想:基础权重使用4-bit存储,低秩适配器使用BF16精度进行训练
优点:
- 可极致降低模型微调使用的显存,比如微调65B模型仅需48G显存;
缺点:
- 低秩适配器需要手动调参
- 在某些任务上,QLoRA微调的模型精度可能比不上全量微调模型
模型评估
当模型量化压缩完成后,我们需评估新模型的性能。此时,我们可以借助,一个开源的大语言模型评测框架。该框架集成了60多个LLM标准学术基准,包括数百个子任务以及变体。
lm-evaluation-harness
EleutherAI • Updated Jun 15, 2025
安装
使用命令行评测
动手实践
使用AWQ量化DeepSeek-R1-Distill-Qwen-1.5B模型
硬件配置
- GPU-12G
- 运行内存-32G
- CPU 6核12线程
工具介绍
‣
原始模型导入
校准数据准备
量化压缩代码
量化压缩耗时约10分钟,部分日志输出如下
模型压缩前的文件大小约为3.5G,压缩后的模型文件大小为1.5G
模型评估代码
量化前、后的模型评估结果如下
ㅤ | coqa |
量化前 | 0.4232(0.0204) |
量化后 | ㅤ |
参考资料:
- ‣
- ‣
- ‣
- ‣
- ‣
- ‣
- ‣
- ‣
- ‣
- ‣
- ‣
- ‣
- 作者:luxinfeng
- 链接:https://www.luxinfeng.top/article/%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%8E%8B%E7%BC%A9%E9%87%8F%E5%8C%96%E5%8A%A0%E9%80%9F%E6%8E%A8%E7%90%86
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。