ARTICLE / ai
模型量化与压缩技术:GPTQ、AWQ、GGUF与FP8的工程实践指南
大语言模型的参数规模在过去五年呈指数级增长——从 GPT-2 的 15 亿参数到 LLaMA-3.1-405B 的 4050 亿参数,再到 DeepSeek-V3 的 6710 亿参数。然而 GPU 的显存容量增长远不及模型规模的扩张速度。以 FP16 精度存储一个 70B 模型需要约 140GB 显存,而一块 H100 SXM5 的显存仅为 80GB。量化(Quantization) 正是打破这一瓶颈的关键技术。
2025-2026 年,量化技术生态已经高度成熟:GPTQ、AWQ、GGUF 三大方案各有明确的适用场景,FP8 在 Hopper/Blackwell GPU 上成为生产级部署的"黄金标准",KV Cache 量化则让长上下文推理成为可能。本文将从量化基础原理出发,系统梳理当前主流量化方案的技术差异、精度表现与工程实践,帮助工程师在精度、速度和显存之间找到最优平衡点。
1. 量化基础:从浮点到定点的核心原理
1.1 为什么需要量化?
量化的核心思路是将模型的权重和/或激活值从高精度浮点数(FP32/BF16)转换为低精度数值表示(INT8/INT4/FP8),从而:
- 压缩显存:INT4 相比 FP16 可节省 75% 显存(140GB → 35GB for 70B 模型)
- 加速推理:低精度计算吞吐量更高(H100 FP8 理论峰值 3958 TFLOPS,FP16 仅 1979 TFLOPS)
- 降低带宽压力:Transformer 解码阶段往往受内存带宽约束,更小的数据宽度直接减少内存读取量
核心挑战:简单截断取整会引入量化误差,导致模型质量下降。量化研究的精髓在于如何以最小精度损失换取最大压缩比。
1.2 数值精度体系
在深入量化算法之前,需要先理解常见的数值格式:
| 精度格式 | 位宽 | 每参数存储 | 相对 FP32 压缩比 | 典型用途 |
|---|---|---|---|---|
| FP32 | 32-bit | 4 bytes | 1× | 训练基线、高精度推理 |
| BF16 | 16-bit | 2 bytes | 2× | 训练和推理的主流格式 |
| FP16 | 16-bit | 2 bytes | 2× | GPU 推理标准格式 |
| FP8 (E4M3) | 8-bit | 1 byte | 4× | Hopper+ GPU 生产级推理 |
| INT8 | 8-bit | 1 byte | 4× | 通用量化基线 |
| INT4 | 4-bit | 0.5 byte | 8× | 显存受限的极致压缩 |
BF16 vs FP16:BF16 保留了 FP32 的指数范围(8 位指数),数值范围更大但精度略低;FP16 精度更高(10 位尾数)但动态范围较小。对于深度学习,BF16 在训练中更稳定,FP16 在推理中更常用。
1.3 均匀量化的核心公式
量化将连续的浮点值映射到离散的整数网格上。给定输入张量 $X$:
量化公式: $$X_q = \text{clamp}\left(\text{round}\left(\frac{X}{s}\right) + z,\ 0,\ 2^b - 1\right)$$
反量化公式: $$\hat{X} = s \cdot (X_q - z)$$
其中 $s$ 是缩放因子(scale),$z$ 是零点(zero-point),$b$ 是量化位宽。
对称量化($z = 0$)适合权重——因为权重分布往往近似对称。非对称量化($z \neq 0$)适合激活值——因为 ReLU 等激活函数产生的分布通常偏向正值。
量化误差由两部分组成:截断误差(极值被裁剪)和舍入误差(精度损失)。分组量化(Group Quantization)将权矩阵分成若干组(如每 128 个元素一组),每组独立计算缩放因子,是当前所有主流量化方案的共同策略。
2. 三大主流量化方案:GPTQ、AWQ、GGUF
当前 LLM 量化生态形成了三大主流方案,各自有明确的技术路线和适用场景。理解它们的差异是做出正确选型的前提。
2.1 GPTQ:基于 Hessian 的精确权重量化
GPTQ(Frantar et al., ICLR 2023)是目前 GPU 推理场景中最成熟的后训练量化(Post-Training Quantization, PTQ)方法之一。
核心原理
GPTQ 源自最优脑手术(Optimal Brain Surgeon, OBS)框架,其核心思想是:在量化每个权重时,利用 Hessian 矩阵的逆来最小化输出误差,并将量化误差补偿到同层的剩余权重上。
对于权重矩阵 $W$,GPTQ 求解的优化目标为:
$$\min_{\hat{W}} |WX - \hat{W}X|_F^2$$
其中 $H = X^TX$ 是 Hessian 矩阵,提供了损失函数曲率的关键信息。
关键特性
- 量化级别:支持 8/4/3/2-bit 权重量化
- 校准数据:需要少量校准数据(通常 128-512 条样本)来计算 Hessian 信息
- 逐层处理:按层独立量化,误差在层内补偿
- 推理时动态反量化:权重在计算时从 INT4 动态反量化回 FP16
实战代码
2.2 AWQ:激活感知的权重量化
AWQ(Lin et al., 2023)换了思路:不做 GPTQ 式的二阶误差补偿,而是从激活分布出发——按激活幅值统计只有约 1% 的关键权重通道对精度影响最大,量化前用逐通道缩放保护它们即可。校准无需 Hessian 与反向传播,速度快且对多模态/视觉语言模型泛化更稳,因此 VLM 生产量化几乎默认 AWQ。
2.3 GGUF:llama.cpp 生态的容器格式
GGUF 不是单一算法而是容器格式:权重(多种量化类型)、分词器、对话模板与元数据打包成单文件。K-quants(Q4_K_M、Q5_K_M)用超级块对 attention/FFN 矩阵混合分配位宽,同体积下质量优于早期均匀量化;配合 CPU/GPU 混合 offload,成为本地与边缘推理的事实标准(Ollama/LM Studio 均基于它)。
2.4 FP8:训练与推理的新基线
FP8(E4M3 存权重/激活、E5M2 存梯度)是 Hopper 之后 GPU 的原生格式:70B 级模型精度损失可忽略、吞吐接近翻倍。与 INT4 的本质区别在于 FP8 无需校准数据、支持在线量化、可直接用于训练,是数据中心新一代默认选择;代价是显存压缩率不如 INT4 激进。
3. 选型对比与工程清单
| 方案 | 位宽 | 优化对象 | 典型场景 | 生态 |
|---|---|---|---|---|
| GPTQ | INT4/INT3 | 权重(Hessian 补偿) | GPU 高并发服务 | AutoGPTQ / llm-compressor |
| AWQ | INT4 | 权重(激活感知) | 多模态/VLM、快速校准 | AutoAWQ / TensorRT-LLM |
| GGUF | Q2-Q8 混合 | 权重 + KV | 本地/边缘推理 | llama.cpp / Ollama |
| FP8 | 8-bit | 权重+激活 | 数据中心吞吐与训练 | vLLM / TensorRT-LLM |
工程清单:① 上线前必须跑困惑度 + 任务评测(MMLU 子集/HumanEval)+ 业务冒烟,单一指标不可信;② 校准数据要代表线上分布,跨域校准质量骤降;③ 长上下文瓶颈常在 KV cache,INT8/FP8 KV 量化收益可能超过权重量化;④ 微调合并权重后必须重新量化,旧 scale 不可复用。
4. 总结
量化的演进,是从"省显存的技巧"变成"推理成本结构的核心杠杆"。经验法则:本地单卡 → GGUF 或 AWQ;GPU 服务拼吞吐 → FP8;极限压缩跑长尾任务 → GPTQ INT3/2 并配严格评测。每一 bit 的节省都是对模型质量的一次押注——押注可以用评测结算,量化才从玄学变成工程。 (数据来源:GPTQ/AWQ/LLM.int8()/FP8 原始论文(arXiv 2022-2024)与 llama.cpp、vLLM、TensorRT-LLM 公开文档,整理截至 2026-10。) 本文面向授权安全研究与防御建设,未经授权对任何系统实施文中技术属违法行为。