大语言模型推理速度优化之模型量化
00 分钟
2025-6-14
2025-6-15
type
status
date
summary
slug
tags
category
password
URL
icon

背景

模型压缩在尽可能保证模型性能的前提下,可以减少模型的资源占用,提高推理速度,对于实时在线的场景作用非常大。
notion image

名词解释

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量化需要准备校准数据集。
优点:
  1. 量化速度较快
  1. 模型性能损耗较小(4位量化的情况下,仍能接近于全精度模型的性能)
  1. 内存占用大幅降低(量化后的175B模型可在单个A100-80GPU运行,未量化需5块GPU)
  1. 推理速度提升(在生成任务中,3位量化的模型在A100 GPU上实现了约3.25倍提速)
缺点:
  1. 依赖校准数据(数据质量差则效果差)
  1. 可能存在过拟合校准集,导致模型在校准集之外的场景下性能下降
  1. 只支持新显卡(Nvidia 30系以上)

AWQ(激活感知的权重量化)

思想:仅保护激活幅度最大的1%权重,此部分权重精度不变,将其余部分权重精度降低至4-bit。
优点:
  1. 泛化性强(不同场景表现稳定)
  1. 可以自动识别关键参数(无需人工指定)
缺点:
  1. 不支持复杂模型结构(比如MoE专家网络)
  1. 需简单调参

BitsandBytes(动态反量化)

思想:权重以int4/int8存储,计算时动态反量化为FP16。
优点:
  1. 无需校准或导出,可直接使用
  1. 支持4/8-bit混合精度
缺点:
  1. 存在性能损失,4-bit量化精度下降较明显
  1. 推理过程中的反量化会增加10%的延迟

QLoRA(量化低秩微调)

思想:基础权重使用4-bit存储,低秩适配器使用BF16精度进行训练
优点:
  1. 可极致降低模型微调使用的显存,比如微调65B模型仅需48G显存;
缺点:
  1. 低秩适配器需要手动调参
  1. 在某些任务上,QLoRA微调的模型精度可能比不上全量微调模型

模型评估

当模型量化压缩完成后,我们需评估新模型的性能。此时,我们可以借助
lm-evaluation-harness
EleutherAIUpdated Jun 16, 2025
,一个开源的大语言模型评测框架。该框架集成了60多个LLM标准学术基准,包括数百个子任务以及变体。

安装

使用命令行评测

 

动手实践

使用AWQ量化DeepSeek-R1-Distill-Qwen-1.5B模型

硬件配置

  • GPU-12G
  • 运行内存-32G
  • CPU 6核12线程

工具介绍

使用教程:
README.md
vllm-project

原始模型导入

校准数据准备

量化压缩代码

量化压缩耗时约10分钟,部分日志输出如下
模型压缩前的文件大小约为3.5G,压缩后的模型文件大小为1.5G

模型评估代码

量化前、后的模型评估结果如下
coqa
量化前
0.4232(0.0204)
量化后
参考资料:
  1. lm-evaluation-harness
    EleutherAIUpdated Jun 16, 2025
  1. README.md
    vllm-project
上一篇
ubuntu多用户管理(添加、删除用户,给用户配置权限)
下一篇
@Transcational注解为什么没有生效?