量化(GPTQ / AWQ / FP8 / INT4)

Quantization - GPTQ / AWQ / FP8

量化(Quantization)把模型权重和激活从 FP16/BF16 高精度降到 8 位、4 位甚至 3 位整数,最多把内存占用砍到原来 1/4,在精度下降 1% 以内的前提下让消费级卡也能跑大模型。

详细解释

量化(Quantization) 一句话:用更少的位数来存和算权重/激活,把一张卡能跑的模型大小翻 2 至 4 倍。 原始 70B Llama 用 BF16 存要 140G,得两张 A100-80G 才能放下(还是差 20G 需要 CPU 卸载)。但做了 4bit AWQ 量化 后只需要 35G 显存 —— 一张 4090 24G + 一部分 offload 到 CPU swap 就能跑,或者两张 3090 24G 跑舒服,单次推理成本砍到原来的 1/3 到 1/5,对中小企业是决定性技术。

量化不是”把所有数字统统砍掉后几位”那么暴力,它分为两大流派、2023-2024 五年出现了五代代表算法。

两大流派:权重量化 vs 权重量化+激活量化

  1. Weight-only 量化(只量化权重,不量化激活)
    • 代表算法:GPTQ、AWQ、GGUF(llama.cpp)、GPTQ-INT4
    • 实际落地占比 2025 年约 80%。因为只量化权重,推理时每次从 HBM 拉 4bit 权重上来 → 反量化回 BF16 再和 BF16 激活做矩阵乘。精度几乎无损(< 0.5% 下降),实现最简单,兼容性最好。
  2. Weight + Activation 双量化(W8A8 / W4A8)
    • 代表:NVIDIA FP8、SmoothQuant、GPTQ-INT8、QLoRA 的 INT4 weight + FP8 act
    • 能把矩阵乘整体搬到 INT8 / FP8 Tensor Core 上跑,不仅省显存还能加速(吞吐量 ×1.5 到 ×2)。但实现难、精度掉得更猛、不是所有算子都支持。2025 NVIDIA Blackwell GPU + FP8 原生之后才开始放量。

五代主流量化算法发展史

算法提出年份位宽精度下降速度生态 & 部署建议
INT8 朴素 Post-Training (HuggingFace bitsandbytes Linear8bitLt)2022W8A8(混合)-2%(小模型)慢(反量化成本高)不推荐了,历史产物
GPTQ(Generative PTQ)2023 IST 论文权重量化(INT4/3)-0.3%(4bit)快(推理时加载格式友好)如果是 2023 年的老模型就用 GPTQ,AutoGPTQ 生态庞大;新模型直接 AWQ
AWQ(Activation-aware Weight Quantization)2023 MIT / 2023 NeurIPS权重量化(INT4)-0.1%(接近无损!)快 + 显存占用最低2025 新模型 4bit 首选,vLLM / SGLang / llama.cpp 原生支持
GGUF (llama.cpp q4_k_m / q5_k_m)2023 community(ggerganov)4/5/6/8 bit 多种 K-quants-0.2%(q4_K_M)CPU 推理最快、GPU 也能 offloadMac / CPU / 边缘设备首选,消费级玩家生态
FP8(E4M3 / E5M2)H100/H200/GB200 原生硬件支持2022 H100 硬件首发FP8 per-tensor / per-channel-0.1% 几乎无损吞吐量 ×1.8(TensorCore 直接算)高端生产集群首选:H100 全上 FP8,不用 INT4,省钱又快

我的模型该选哪种量化?一张决策表

把 2025 年最常见的 4 个部署场景 + 推荐量化直接给你:

部署场景GPU 环境推荐模型规模推荐量化为什么
在线生产 API 集群(SLA ≥ 99.9%)H100 80G × N / Blackwell GB20070B / 110BFP8 原生(或 Mixtral 专家 FP8)精度 -0.1%,吞吐翻倍,SLA 最高
中小企业在线 API / 私有云A100-80G 或 L40S × 2-832B ~ 72BAWQ 4bit + vLLM显存缩 3.5 倍;吞吐只降 5%;单 A100 能跑 72B 4bit
单卡玩家本地推理 / 离线批处理RTX 4090 24G / 3090Ti7B ~ 34BAWQ 4bitGGUF q5_K_MAWQ vLLM 快;GGUF 灵活;两个都能跑 34B 4bit 在 24G 上
MacBook / 无显卡本地小模型Apple Silicon M2/M3 Pro3B ~ 14BGGUF q4_K_M (Metal)llama.cpp 对 M 系列 NEON + Metal 优化神了;3B 能跑 30 tok/s 用户体验流畅
QLoRA 微调(消费卡训 70B)RTX 4090 24G × 270B(Qwen/Llama)QLoRA INT4 (bitsandbytes NF4) + 梯度检查点这是 QLoRA 的本职,不是推理;推理导出后再选 AWQ/GGUF
移动端 / 边缘盒子(Raspberry Pi / RK3588)ARM NPU 10W 功耗1B ~ 3BGGUF q4_K_M(ARM NEON) / 或厂商 NCNN INT4选尽可能小的模型(TinyLlama 1.1B / Qwen 1.8B);q4_K_M 能跑 5 tok/s 能当离线小助手

关于 AWQ 版本升级:2024 Q4 出了 AWQ v2 + AutoAWQ 0.3.x,修复了老 AWQ 对 MoE、对 Qwen2 架构的校准 bug,精度比老版再高 0.2 到 0.4 个百分点。如果 HuggingFace 上下载别人的 AWQ 权重,一定要看 README 是用的哪个 AutoAWQ 版本量化的,避免踩老 bug。

量化精度下降主要发生在哪?如何规避

量化后最容易掉分的不是”一般任务选择题”(MMLU 能维持),而是长推理链、长生成、小数敏感的数学、长 Context 检索。三条规避经验:

  1. 别为了省显存强上 3bit:4bit 是 精度/速度/显存 甜点;3bit(GPTQ-3bit / GGUF q3)精度掉 2-3 个百分点,MoE 模型甚至能掉 10 分,不值得。
  2. RAG 长上下文量化时,Context 长度别超校准集的 2 倍:AWQ/GPTQ 量化时都有一个 calibration set(通常是 128 条维基百科 / c4 2048 token 长度);如果线上你给它塞 16k Token,最后那 14k 位置激活数值分布和校准集差很多,量化误差会爆炸。应对:做 calibration set 也用同长上下文的 c4/enron/books 数据 + 2048 至 8192 段混采校准
  3. 用 LoRA 做量化适配微调:对”量化后某个具体业务(比如你们的客服 SFT)掉分 3 分”这类情况,拿 500-2000 条你们自己的 SFT 数据,在量化权重上再做 1 epoch 小 LR QLoRA,叫 “Quantization-Aware Adapter”——通常能把丢失的 3 分里捞回 2.5 分,成本只需要花 1 小时。

唯元智创 的推理集群默认 70B 系列都用 FP8 + 4bit AWQ 双层 fallback:冷流量(< 100 req/min)跑 AWQ 省成本;热高峰(>2000 req/min)自动切 FP8 集群吃吞吐,客户控制台看的是同一个模型 ID,不用自己管路由。

常见问题

量化后会不会让模型变笨?肉眼可见的那种。
做对了(AWQ 4bit / FP8),绝大多数用户 100 条对话里 95 条分不出和 BF16 原版的区别。唯一能稳定感知的是:数学题里有很多小数 / 很多步长推理时,量化版更容易在最后一步算错一个数字(或者在写代码时某个边界条件 off-by-one),所以如果你做”自动数学竞赛系统 / 生产级代码生成器”这种对数字和细节死抠的场景,就用 BF16 或 FP8,别碰 4bit。其他场景(客服、摘要、翻译、文档问答、闲聊)4bit AWQ 完全够用。
FP8 和 AWQ 4bit 哪个显存更省?速度呢?
显存:AWQ 4bit < FP8(1:2 关系),4bit 显存只有 FP8 的一半;速度:FP8 反而比 AWQ 4bit 快,因为它直接跑硬件 TensorCore,AWQ 虽然省显存但要把 4bit 反量化回 BF16 再乘,HW 对 INT4 WMMA 的支持没 FP8 普及。所以选型思路是:显存不够 → 上 AWQ 4bit;显存够、吃吞吐 → 上 FP8。两者都是”比 BF16 精度降极少”的安全选项。
我自己量化一个模型,要准备多少数据?耗时多久?
校准集(Calibration)很小就够:128 到 512 条文本,每条 2048 字符左右;随便拿 c4/维基百科 / 你们自己的 RAG 文档 100 段都行,不要求标注。AWQ 量化在一张 A100-800G 上对 70B 模型做一次 4bit 校准大概 1-2 小时;GPTQ 慢一些(3-4 小时,因为要一层一层做)。做完之后把量化后的 safetensors 上传 HF Hub 或者你们私有仓库,推理端下次直接拉 AWQ 版就行。小模型(7B/14B)量化只需要 20-40 分钟。