
量化压缩实战INT8 / INT4 / AWQ / GPTQ 全面对比《大模型知识与部署》系列 · No.12 / 35适合人群AI 工程师、后端开发阅读时间约 28 分钟写在前面上一篇我们讲了推理加速三板斧。这一篇我们讲另一个与放得下直接相关的工程武器——量化Quantization。如果说三板斧解决的是GPU 跑得满不满量化解决的就是模型放得下放不下——它通过把高精度权重压缩到低精度直接把显存占用砍掉 50-87.5%。这是个对工程师特别现实的话题。三个常见场景场景 1手头有张 H100 80G想跑 Llama-3-70B。FP16 要 140 GB放不下。INT4 只要 35 GB单卡富余。场景 2DeepSeek V3 671B 太大8 卡 H100 都装不下。INT8 量化后 670 GB刚好能塞进 8×96GB H100。场景 3想在 409024GB上跑 14B 模型。FP16 要 28 GB 装不下INT4 只要 7 GB富余 17 GB 给 KV Cache。但量化不是免费午餐。下面这些问题你一定碰过量化后效果掉了多少怎么评估INT8 / INT4 / AWQ / GPTQ / FP8到底用哪个量化是不是越激进越好不同硬件支持哪种量化量化后推理是更快还是更慢读完本文你将能理解量化的基本原理所有方法的共同底层区分 5 大主流量化方法的差异、优劣、适用场景用 GPTQ / AWQ 实际量化一个模型用 vLLM 部署量化模型并实测性能知道每种业务该用什么量化方案我们开始。一、为什么量化是大模型部署的必修课1.1 量化能带来什么量化在三个维度同时给力维度FP16 → INT8FP16 → INT4显存占用减 50%减 75%推理速度30-80%50-150%能耗减 40%减 60%具体到主流大模型模型FP16 显存INT8 显存INT4 显存Llama-3-8B16 GB8 GB4 GBQwen3-32B64 GB32 GB16 GBLlama-3-70B140 GB70 GB35 GBQwen3-72B144 GB72 GB36 GBDeepSeek-V3 671B1342 GB671 GB336 GB最关键的工程意义8B / 14B 模型可以在消费级显卡上跑4090、509032B 模型可以单 H100 跑70B 模型可以单 H100 跑INT4671B 大模型可以 8 卡跑INT8这就是为什么量化是从消费级到数据中心通吃的技术。1.2 为什么推理速度也变快很多人直觉以为量化只省显存速度应该不变。错了。回忆第 11 篇我们讲的Decode 阶段是 memory-bound——GPU 显存带宽是瓶颈。GPU 算力远超带宽能喂的速度。量化把权重从 16 bit 压到 8 bit每秒能读取的逻辑权重翻倍——推理直接提速。实测以 H100 跑 Llama-3-70B精度单序列吞吐 (tokens/s)显存FP1624140 GBINT84270 GBINT46535 GBINT4 比 FP16快 2.7×省 4× 显存。1.3 但代价是「精度损失」量化不是无损的——把连续的浮点数压到离散的整数必然有信息丢失。不同量化方法的精度损失有数量级差异。我们用 MMLU 评测做对比Llama-3-70B 基线 79.5%方法MMLU损失FP16 baseline79.5%-FP879.4%-0.1INT8 (LLM.int8)79.2%-0.3AWQ INT478.9%-0.6GPTQ INT478.7%-0.8BNB NF478.3%-1.2INT4 (朴素)72.1%-7.4 ⚠️关键认知INT8 几乎无损 0.5% 掉点INT4 用对方法AWQ/GPTQ损失约 1%INT4 朴素量化损失巨大——这就是为什么需要 AWQ / GPTQ 这些聪明的算法下面我们就来理解这些算法的本质。二、量化的基本原理所有量化方法的共同底层只有一件事把浮点数映射到整数。2.1 最基础的量化公式设你有一组 FP16 权重W要量化到 INT8范围 -128 ~ 127# 找到 W 的最大绝对值 max_val max(abs(W)) # 计算缩放因子 scale max_val / 127 # 量化 W_int8 round(W / scale).clip(-128, 127) # 反量化推理时用 W_recovered W_int8 * scale核心问题原始[0.0023, -1.5, 4.7, 0.001, 8.9, -2.3, ...] 量化[0, -21, 67, 0, 127, -33, ...] ← 损失特别是小值0.0023、0.001全都变成 0——信息丢失。这就是为什么朴素量化效果差。2.2 量化的两个关键维度维度 1对称 vs 非对称对称量化用 max(|W|) 作为 scale零点固定为 0。简单快激活分布对称时好用非对称量化用 (max - min) 作为 scale 零点偏移。对偏斜分布友好LLM 权重通常用对称量化分布对称激活有时用非对称。维度 2量化粒度per-tensor ── 整个张量一个 scale ← 粗但快 per-channel ── 每个输出通道一个 scale ← 中 per-group ── 每 N 个权重一个 scale ← 细精度高主流选择权重per-channel 或 per-groupgroup128激活per-tensor速度优先更细的粒度 更高精度 更多存储 scale 的开销。Group-128 是当下平衡点。2.3 W4A16 vs W8A16 vs W8A8LLM 量化的命名约定W{x}A{y} Weight 量化到 x bitActivation 量化到 y bit主流组合方案权重激活适用场景W8A16INT8FP16易实现、几乎无损W4A16INT4FP16最常见AWQ/GPTQ 标配W8A8INT8INT8极致速度精度损失大W4A4INT4INT4实验性仅个别场景核心认知激活很难量化好动态范围大、跨样本变化大所以保 FP16 / BF16 通常是最稳妥的。这是为什么主流量化方案都叫 W4A16 / W8A16——只量化权重激活保持高精度。2.4 量化的三种姿势PTQ (Post-Training Quantization) ── 训完模型后直接量化不重训 ── 主流因为简单 QAT (Quantization-Aware Training) ── 训练时就模拟量化误差 ── 精度更高但要重训 GPTQ / AWQ ── 介于两者之间 ── 用少量校准数据 优化算法 ── 接近 QAT 精度PTQ 成本下面我们就重点讲 GPTQ 和 AWQ——它们是当下 INT4 量化的事实标准。三、主流量化方法详解3.1 LLM.int8()开启 LLM 量化时代2022最早的 LLM 量化方案之一作者 Tim Dettmers也是 QLoRA 作者。核心问题朴素 INT8 量化会让 LLM 效果显著下降——因为 LLM 激活值有少数极端 outlier远大于均值强行量化会损坏所有数值的精度。LLM.int8() 的解法混合精度——大部分用 INT8outlier 用 FP16检测哪些是 outlier一种启发式规则把 outlier 单独拎出来保持 FP16 运算其余用 INT8 矩阵乘法再合并优点几乎无损 0.5% 掉点不需要重训缺点速度提升有限要做 outlier 检测 双精度计算INT8 上限当下地位被 bitsandbytes 库实现是 HuggingFace 的默认 INT8 方案。但生产推理已经被更新的方案替代。3.2 SmoothQuant把 outlier 平滑掉LLM.int8() 处理 outlier 的方式是特殊照顾。SmoothQuant 想能不能消灭 outlier核心思想观察outlier 主要在激活不在权重数学等价变换activation × weight (activation / s) × (weight × s)选合适的s把激活的 outlier挪到权重里权重相对容易量化结构稳定激活也变得平滑效果W8A8 量化可用了速度更快比 LLM.int8 简单当下地位在某些硬件场景仍在用A100、L40但 H100 时代已经被 FP8 取代。3.3 GPTQ基于二阶信息的精确量化GPTQ2022 末是INT4 量化的开山之作。核心思想量化某个权重时用 Hessian 矩阵的二阶信息找最优量化方向利用少量校准数据128-1024 样本估计 Hessian逐层、逐权重地量化每次量化都补偿前面的误差直观朴素量化[w10.7→1] [w20.4→0] [w30.6→1] ... GPTQ 量化 w1 后调整 w2 的目标值让总误差最小 量化 w2 后调整 w3 的目标值 ...优点INT4 几乎无损MMLU 掉 0.8% 左右量化过程相对快70B 模型约 4-8 小时不需要重训缺点需要校准数据集算法实现复杂当下地位INT4 量化主流之一HuggingFace、vLLM、TensorRT-LLM 都支持。3.4 AWQ激活感知权重量化2023AWQActivation-aware Weight Quantization和 GPTQ 几乎同时出现思路不同但效果类似。核心洞察LLM 的权重不是同等重要那些配合大激活的权重量化误差影响更大那些配合小激活的权重量化误差可以忽略做法用校准数据找出重要的权重通道在量化前给这些通道乘一个 scale把它们放大量化后再除回去重要权重的精度损失被压缩到几乎为零优点INT4 几乎无损MMLU 掉 0.6% 左右比 GPTQ 略好量化速度比 GPTQ 快~ 30 分钟搞定 70B推理速度更快更适合 GPU 优化缺点仍需校准数据实现相对新部分老硬件支持差当下地位与 GPTQ 平分秋色多数场景 AWQ 略优。3.5 BNB NF4QLoRA 用的那个NF4Normal Float 4是 QLoRA 论文中提出的 4-bit 量化方案。核心思想LLM 权重经验上呈正态分布设计 16 个专为正态分布优化的 INT4 编码点量化时把权重映射到最近的 NF4 点优点最简单无需校准对训练友好QLoRA 的基础缺点精度略差于 AWQ / GPTQ掉点约 1.2%主要用于训练而非推理当下地位训练QLoRA首选推理用得少。3.6 FP8新硬件时代的宠儿FP8 不是新的量化算法而是新的数值格式——8 bit 浮点数。两种变种E4M31 符号 4 指数 3 尾数 ← 精度高范围小推理主流 E5M21 符号 5 指数 2 尾数 ← 精度低范围大训练用优势比 INT8 精度更高指数位带来动态范围H100、H200、B200 原生硬件支持速度和 INT8 一样量化几乎无损 0.1% 掉点劣势仅 H100 及以上硬件支持老 GPUA100不能用当下地位H100 时代的 KV Cache 和模型量化首选。3.7 一表打尽方法比特校准数据MMLU 损失适用硬件当下地位LLM.int88不需要-0.3%全部已被替代SmoothQuant8少量-0.5%A100/L40部分场景FP88不需要-0.1%H100新主流GPTQ4128-1024 样本-0.8%全部主流AWQ4128-1024 样本-0.6%全部主流NF44不需要-1.2%全部训练专用INT4 朴素4不需要-7%全部不要用四、实战量化 部署完整流程4.1 用 AWQ 量化 Qwen3-32B AWQ 量化完整脚本 依赖pip install autoawq transformers accelerate fromawqimportAutoAWQForCausalLMfromtransformersimportAutoTokenizer MODEL_PATHQwen/Qwen3-32B-InstructQUANT_PATH./qwen3-32b-awq# 量化配置quant_config{zero_point:True,# 用 zero point非对称量化更稳q_group_size:128,# group 大小w_bit:4,# INT4version:GEMM,# 推理 kernel}# 1. 加载模型modelAutoAWQForCausalLM.from_pretrained(MODEL_PATH,device_mapauto)tokenizerAutoTokenizer.from_pretrained(MODEL_PATH)# 2. 准备校准数据256-1024 条业务相关样本calib_data[解释一下大模型推理优化的核心原理。,请总结这段技术文档...,如何用 Python 实现一个简单的 web 服务,# ... 加更多业务相关样本]*50# 3. 量化耗时约 30-60 分钟model.quantize(tokenizer,quant_configquant_config,calib_datacalib_data,)# 4. 保存model.save_quantized(QUANT_PATH)tokenizer.save_pretrained(QUANT_PATH)print(f量化完成模型保存到{QUANT_PATH})print(f原始大小: ~64 GB)print(fAWQ INT4 大小: ~17 GB)关键提示校准数据必须和业务相关——否则精度损失会比 benchmark 数字大256-1024 条样本足够太多反而过拟合校准集量化时不要量化lm_head输出层——容易掉点4.2 用 GPTQ 量化 Qwen3-32B GPTQ 量化完整脚本 依赖pip install auto-gptq optimum transformers accelerate fromtransformersimportAutoTokenizerfromauto_gptqimportAutoGPTQForCausalLM,BaseQuantizeConfig MODEL_PATHQwen/Qwen3-32B-InstructQUANT_PATH./qwen3-32b-gptq# 量化配置quant_configBaseQuantizeConfig(bits4,group_size128,desc_actFalse,# True 更精确但更慢)modelAutoGPTQForCausalLM.from_pretrained(MODEL_PATH,quantize_configquant_config,)tokenizerAutoTokenizer.from_pretrained(MODEL_PATH)# 准备校准数据calib_data...# 同上# 量化耗时约 4-8 小时比 AWQ 慢model.quantize([tokenizer(text,return_tensorspt)fortextincalib_data])model.save_quantized(QUANT_PATH)4.3 用 vLLM 部署量化模型vLLM 对各种量化的支持# AWQ 模型vllm serve ./qwen3-32b-awq\--quantizationawq\--dtypehalf# GPTQ 模型vllm serve ./qwen3-32b-gptq\--quantizationgptq\--dtypehalf# FP8 模型H100vllm serve Qwen/Qwen3-32B-Instruct\--quantizationfp8\--kv-cache-dtype fp8# BnB INT8不推荐生产vllm serve Qwen/Qwen3-32B-Instruct\--quantizationbitsandbytes4.4 真实业务性能对比我们用 Qwen3-32B 做完整对比实验H100 80G、batch16、prompt2K、生成512量化方案显存吞吐 (tok/s)TTFTMMLUFP1664 GB1850320ms82.1FP8 (WKV)32 GB2900280ms82.0INT8 (W8A16)32 GB2400290ms81.9AWQ INT417 GB3200250ms81.5GPTQ INT417 GB3100260ms81.3关键观察FP8 和 AWQ INT4 是 2026 年的双子星——前者精度最佳后者显存最省INT4 比 FP16 快 1.7×显存带宽优势精度损失都在 1% 以内——业务场景几乎感知不到五、避坑 决策建议5.1 5 大常见量化坑坑 1用错校准数据症状用通用语料校准业务场景效果掉得厉害。对策用业务真实分布的数据校准。比如做客服模型就用客服对话作校准。坑 2量化输出层 / Embedding症状模型输出乱码或概率分布异常。对策lm_head不量化强烈建议部分 embedding 层不量化AWQ/GPTQ 默认会跳过这些层坑 3硬件不匹配症状量化模型部署后速度反而变慢。对策INT8 在 A100 / L40 / H100 都好INT4AWQ/GPTQ在 A100 主流支持FP8 仅 H100老硬件用不了T4 / V100 上量化收益有限kernel 不优化坑 4迷信越激进越好症状用 INT2 或更激进方案业务效果崩盘。对策生产场景止步于 INT4INT2 / 1.58 bit 是研究方向不要轻易上生产坑 5忽视任务敏感性症状通用任务量化没问题特定任务数学、代码量化后明显退化。对策数学、代码、推理任务对量化更敏感建议这些场景用 INT8 / FP8而非 INT4对量化后模型做业务真实评测不要只跑通用 benchmark5.2 决策树你的硬件是 │ ├─ H100 / H200 / B200 │ │ │ ├─ 模型 单卡显存FP8 装得下 → FP8 (推理框架原生支持) │ └─ 模型大 → AWQ INT4 FP8 KV Cache │ ├─ A100 / L40 (Ampere) │ │ │ ├─ 模型不大 → INT8 / W8A16 │ └─ 模型大 → AWQ INT4 │ ├─ 4090 / 5090 (消费级) │ └─ AWQ INT4 几乎必选显存有限 │ └─ 旧硬件V100 / T4 └─ INT8 还行INT4 收益小5.3 业务场景推荐业务场景推荐方案理由通用对话AWQ INT4损失小、速度快、显存省客服 / 知识问答AWQ INT4同上代码生成FP8 / INT8代码对精度敏感数学 / 推理FP8 / INT8推理链精度敏感长上下文 (1M)INT4 FP8 KV Cache显存压力大端侧 / 移动INT4 (llama.cpp Q4_K_M)极致压缩生产高并发FP8 / AWQ INT4吞吐优先5.4 部署 Checklist部署量化模型前必做在业务真实数据上跑准确率评测在 hold-out 测试集上跑通用 benchmark看灾难性退化实测显存占用和峰值实测吞吐和延迟长时间稳定性测试24 小时不间断跑对抗性测试prompt injection / 长输入等边缘场景六、扩展话题与下一篇预告6.1 端侧极致量化llama.cpp 的 K-Quantsllama.cpp 为端侧推理设计了一套独特的量化方案方案平均比特备注Q8_08.5接近无损Q6_K6.6中等Q4_K_M4.85端侧标配Q3_K_M3.9极限压缩Q2_K2.6实验Q4_K_M 是端侧大模型部署的事实标准——iPhone、Mac、消费级电脑上跑大模型基本都用它。 详见系列第 33 篇端侧大模型。6.2 KV Cache 量化另一个维度上一篇我们讲过 KV Cache 量化——它和权重量化是独立的两个维度可以叠加使用权重 INT4 (AWQ) KV Cache INT8 综合显存省 60% 权重 FP8 KV Cache FP8 H100 最佳组合6.3 量化感知微调QAT-LoRA如果纯 PTQ 效果不够可以做量化后微调1. 量化模型AWQ/GPTQ 2. 加 LoRA 适配器FP16 3. 在业务数据上做小数据量微调 4. 推理时合并这种方式能恢复 70-90% 的量化损失且训练成本很低。6.4 量化的未来趋势观察 2025-2026 的方向FP8 全面普及——H100/H200 加 B200 时代的默认1.58 bit 探索BitNet——极致压缩的研究方向混合精度量化——不同层用不同精度量化感知预训练——从 0 开始训 INT8 模型节省训练显存结语量化是部署工程师的核心武器读完本文你应该明白量化能在三个维度显存、速度、能耗同时给力AWQ 和 GPTQ 是 INT4 的双子星——AWQ 略优GPTQ 历史更久FP8 是 H100 时代的新主流——精度几乎无损业务场景下FP8 / AWQ INT4 是 80% 场景的最佳选择校准数据 业务真实评测 是量化成功的关键下一篇我们继续推理优化第 13 篇Flash Attention 原理与实践—— 这是另一个推理和训练的杀手锏把 attention 计算的显存从 O(n²) 降到 O(n)速度提升 2-4×。我们会讲透它的 IO 优化思想 怎么在实际部署中启用。之后是投机解码第 14 篇、长上下文优化第 15 篇。我们下篇见。关于「码海寻道」这里是一个聚焦 AI 工程化、大模型部署、后端架构实战的技术专栏。写最一线的踩坑经验做最务实的技术拆解。如果这篇文章对你有启发欢迎点赞、转发、关注。我们下篇见。