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 压缩比典型用途
FP3232-bit4 bytes1×训练基线、高精度推理
BF1616-bit2 bytes2×训练和推理的主流格式
FP1616-bit2 bytes2×GPU 推理标准格式
FP8 (E4M3)8-bit1 byte4×Hopper+ GPU 生产级推理
INT88-bit1 byte4×通用量化基线
INT44-bit0.5 byte8×显存受限的极致压缩

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 量化生态形成了三大主流方案,各自有明确的技术路线和适用场景。理解它们的差异是做出正确选型的前提。

┌──────────────────────────────────────────────────────────────┐
│                    量化方案决策矩阵                            │
├──────────────────────────────────────────────────────────────┤
│  目标硬件                                                     │
│  ├── CPU / Apple Silicon / 边缘设备 ──────→ GGUF             │
│  ├── NVIDIA GPU(纯推理) ─────────────────→ GPTQ 或 AWQ      │
│  └── Hopper+ GPU(生产级) ────────────────→ FP8             │
│                                                              │
│  核心需求                                                     │
│  ├── 追求极致吞吐量 ──────────────────────→ GPTQ + Marlin    │
│  ├── 追求最佳质量保留 ────────────────────→ AWQ              │
│  └── 追求跨平台灵活性 ────────────────────→ GGUF             │
└──────────────────────────────────────────────────────────────┘

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

实战代码

from transformers import AutoModelForCausalLM, GPTQConfig, AutoTokenizer

quantization_config = GPTQConfig(
    bits=4,
    dataset="c4",
    group_size=128,
    desc_act=True,
)

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B",
    quantization_config=quantization_config,
    device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")

text = "The future of AI is"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

2.2 AWQ:激活感知的权重量化

AWQ(Lin et al., 2023)换了思路:不做 GPTQ 式的二阶误差补偿,而是从激活分布出发——按激活幅值统计只有约 1% 的关键权重通道对精度影响最大,量化前用逐通道缩放保护它们即可。校准无需 Hessian 与反向传播,速度快且对多模态/视觉语言模型泛化更稳,因此 VLM 生产量化几乎默认 AWQ。

from awq import AutoAWQForCausalLM

model = AutoAWQForCausalLM.from_pretrained("Qwen/Qwen2.5-7B-Instruct")
model.quantize(tokenizer, quant_config={"w_bit": 4, "q_group_size": 128})
model.save_quantized("qwen25-7b-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. 选型对比与工程清单

方案位宽优化对象典型场景生态
GPTQINT4/INT3权重(Hessian 补偿)GPU 高并发服务AutoGPTQ / llm-compressor
AWQINT4权重(激活感知)多模态/VLM、快速校准AutoAWQ / TensorRT-LLM
GGUFQ2-Q8 混合权重 + KV本地/边缘推理llama.cpp / Ollama
FP88-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。) 本文面向授权安全研究与防御建设,未经授权对任何系统实施文中技术属违法行为。