Appearance
Model Quantization
通过降低模型权重的数值精度,在不显著损失质量的前提下大幅度减小模型体积并加快推理速度。
概述
量化是将浮点数权重(通常是 FP32 或 FP16)映射到低位整数(INT8、INT4、INT2)或更紧凑的浮点数格式(BF16、FP8)的过程。这是部署大模型到生产环境、尤其是边缘设备的关键技术。
量化基础
精度格式对比
| 格式 | 位数 | 内存节省 | 典型用途 |
|---|---|---|---|
| FP32 | 32-bit | 基准 | 训练、高精度场景 |
| FP16 | 16-bit | 50% | 混合精度训练 |
| BF16 | 16-bit | 50% | 训练(更大指数范围) |
| FP8 | 8-bit | 75% | Hopper 架构推理 |
| INT8 | 8-bit | 75% | 通用推理优化 |
| INT4 | 4-bit | 87.5% | 极致压缩部署 |
| INT2/NF4 | 2-4 bit | ~93% | 实验性极低精度 |
量化方式
PTQ (Post-Training Quantization):训练完成后对权重做量化,无需重新训练。
- 速度快,只需要少量校准数据
- 大模型精度损失通常较小
QAT (Quantization-Aware Training):在训练中模拟量化效果,模型学会适应低精度。
- 精度更高,尤其是 INT4 以下
- 训练成本高,需要完整训练流程
主流量化方法与工具
GPTQ (Frantar et al. 2022)
基于近似二阶优化的权重量化方法。
- 支持 FP32 → INT3/INT4/INT8
- 需要少量校准数据集(128 samples)
- 多 GPU 场景效果较好
- 格式:
.safetensors+ 量化配置
GGUF / llama.cpp
社区主导的模型格式和推理框架,支持广泛的量化格式:
- q2_k / q3_k / q4_0 / q4_k / q5_0 / q5_k / q6_k / q8_0
- K-quant (q4_k, q5_k) 在保留关键层精度的同时压缩普通层
- 所有格式在 llama.cpp 生态中直接加载
- 非常适合 CPU + CPU offload 推理
AWQ (Activation-aware Weight Quantization)
基于激活模式感知的量化方法,由 MIT/CMU 提出。
- 保留对激活影响最大的权重通道的精度
- 通常优于 GPTQ 同等位宽
- 支持 INT4 推理
- vLLM、TensorRT-LLM 原生支持
Bitsandbytes (BNB)
Hugging Face 生态的标准量化库:
- 8-bit: LLM.int8() 方法,保留 outlier channel 为 FP16
- 4-bit: NF4(NormalFloat4)和 FP4 格式
- QLoRA: 4-bit 量化 + LoRA 微调,能在单张 24GB 显卡上微调 70B 模型
量化精度对比(近似)
| 量化方法 | 位宽 | 质量损失 | 推理速度提升 | 适用框架 |
|---|---|---|---|---|
| FP16 | 16 | 0% | 1x | 所有 |
| INT8 (GPTQ) | 8 | ~0.5% | 1.5-2x | vLLM, TGI |
| INT4 (GPTQ) | 4 | ~1-3% | 2-3x | vLLM, TGI |
| q4_K_M (GGUF) | 4.5 | ~1-2% | 3-4x (CPU) | llama.cpp |
| q3_K_M (GGUF) | 3.5 | ~3-5% | 4-5x (CPU) | llama.cpp |
| NF4 (BNB) | 4 | ~2-4% | — (显存节省) | transformers |
工程实践
量化部署流程
- 评估: 在全精度模型上建立基准指标
- 选位宽: 根据硬件和能力要求(INT8 高精度 vs INT4 极致压缩)
- 校准: 准备领域相关的校准数据集
- 量化: 使用 AutoGPTQ、llama.cpp、AWQ 等工具
- 验证: 在量化后模型上运行基准评测,确认质量损失在可接受范围
硬件支持
| 硬件 | 加速的量化格式 |
|---|---|
| NVIDIA GPU (Turing+) | INT8 Tensor Cores |
| NVIDIA GPU (Ada/Hopper) | FP8, INT4 (vLLM) |
| Apple Silicon | FP16, INT4 (MLX/llama.cpp) |
| Intel CPU | INT8 (AVX-512), INT4 (VNNI) |
| AMD GPU | FP16, INT4 (ROCm) |
常见误区
- 量化一定大幅降低质量? → 70B+ 模型在 INT4 下质量损失通常 ❤️%
- 量化模型不能微调? → QLoRA 可在 4-bit 量化模型上微调
- 所有层对量化敏感度相同? → 注意力层通常比 MLP 层更敏感
相关概念
- Model Inference & Deployment — 推理优化与部署框架
- Fine-tuning / Full FT vs LoRA vs QLoRA — 量化训练技术
- Knowledge Distillation — 知识蒸馏(模型压缩的互补技术)
- Mixture of Experts — MoE 模型的量化挑战(部分专家被激活)
参考来源
- Frantar et al. (2022). "GPTQ: Accurate Post-Training Quantization for Generative Pre-Trained Transformers."
- Lin et al. (2023). "AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration."
- Dettmers et al. (2022). "LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale."
- Dettmers et al. (2023). "QLoRA: Efficient Finetuning of Quantized Language Models."
- llama.cpp GGUF 格式文档 (github.com/ggerganov/llama.cpp)