Skip to content

Model Quantization

通过降低模型权重的数值精度,在不显著损失质量的前提下大幅度减小模型体积并加快推理速度。

概述

量化是将浮点数权重(通常是 FP32 或 FP16)映射到低位整数(INT8、INT4、INT2)或更紧凑的浮点数格式(BF16、FP8)的过程。这是部署大模型到生产环境、尤其是边缘设备的关键技术。

量化基础

精度格式对比

格式位数内存节省典型用途
FP3232-bit基准训练、高精度场景
FP1616-bit50%混合精度训练
BF1616-bit50%训练(更大指数范围)
FP88-bit75%Hopper 架构推理
INT88-bit75%通用推理优化
INT44-bit87.5%极致压缩部署
INT2/NF42-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 模型

量化精度对比(近似)

量化方法位宽质量损失推理速度提升适用框架
FP16160%1x所有
INT8 (GPTQ)8~0.5%1.5-2xvLLM, TGI
INT4 (GPTQ)4~1-3%2-3xvLLM, 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

工程实践

量化部署流程

  1. 评估: 在全精度模型上建立基准指标
  2. 选位宽: 根据硬件和能力要求(INT8 高精度 vs INT4 极致压缩)
  3. 校准: 准备领域相关的校准数据集
  4. 量化: 使用 AutoGPTQ、llama.cpp、AWQ 等工具
  5. 验证: 在量化后模型上运行基准评测,确认质量损失在可接受范围

硬件支持

硬件加速的量化格式
NVIDIA GPU (Turing+)INT8 Tensor Cores
NVIDIA GPU (Ada/Hopper)FP8, INT4 (vLLM)
Apple SiliconFP16, INT4 (MLX/llama.cpp)
Intel CPUINT8 (AVX-512), INT4 (VNNI)
AMD GPUFP16, INT4 (ROCm)

常见误区

  • 量化一定大幅降低质量? → 70B+ 模型在 INT4 下质量损失通常 ❤️%
  • 量化模型不能微调? → QLoRA 可在 4-bit 量化模型上微调
  • 所有层对量化敏感度相同? → 注意力层通常比 MLP 层更敏感

相关概念

参考来源

  • 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)

AI Knowledge Base — 持续积累