生产量化:AWQ、GPTQ、GGUF K-quants、FP8、MXFP4/NVFP4 本节摘要:量化格式不是普适选择,而是硬件、推理引擎、工作负载三者的函数。GGUF Q4KM 或 Q5KM 占据 CPU 与边缘,经 llama.cpp 和 Ollama 投递;GPTQ 在 vLLM 里要做多 LoRA 时胜出;AWQ 配 Marlin-AWQ 内核在 7B 级模型上跑出约 741 tok/s、INT4 里最佳 Pass@1——是 2026 数据中心生产的默认;FP8 在 Hopper、Ada、Blackwell 上是「近乎无损又广泛支持」的中间档;NVFP4 与 MXFP4(Blackwell 微缩放)激进,需逐 block 验证。
本节摘要:量化格式不是普适选择,而是硬件、推理引擎、工作负载三者的函数。GGUF Q4_K_M 或 Q5_K_M 占据 CPU 与边缘,经 llama.cpp 和 Ollama 投递;GPTQ 在 vLLM 里要做多 LoRA 时胜出;AWQ 配 Marlin-AWQ 内核在 7B 级模型上跑出约 741 tok/s、INT4 里最佳 Pass@1——是 2026 数据中心生产的默认;FP8 在 Hopper、Ada、Blackwell 上是「近乎无损又广泛支持」的中间档;NVFP4 与 MXFP4(Blackwell 微缩放)激进,需逐 block 验证。两个陷阱会咬团队:校准数据集必须匹配部署领域;KV 缓存与权重量化是分开的——AWQ 那句「我的模型现在 4 GB」忘掉了生产批次下 10~30 GB 的 KV 缓存。
对应原课程:Phase 17 · Lesson 09 ·
09-production-quantization(原英文phases/17-infrastructure-and-production/09-production-quantization/docs/en.md)。
阅读完本节,你应当能够:
量化降低内存与 HBM 带宽,而这正是 decode 所需要的。FP16 的 70B 模型权重 140 GB。把权重量化到 INT4(AWQ 或 GPTQ),模型变 35 GB——单张 H100 装得下还留了 KV 缓存的空间,而在 128 并发、2k 上下文时,光 KV 缓存就要 20~30 GB。
但量化不是免费的。激进量化损害质量,尤其推理密集任务;不同格式配不同引擎;不同硬件原生支持不同精度。2026 的格式动物园是真的,你没法照抄别人的选择——必须按自己的栈来选。
| 格式 | 位宽 | 最佳命中点 | 引擎 |
|---|---|---|---|
| GGUF Q4_K_M / Q5_K_M | 4~5 | CPU、边缘、笔记本 | llama.cpp、Ollama |
| GPTQ | 4~8 | vLLM 多 LoRA | vLLM、TGI |
| AWQ | 4 | 数据中心 GPU 生产 | vLLM(Marlin-AWQ)、TGI |
| FP8 | 8 | Hopper/Ada/Blackwell 数据中心 | vLLM、TRT-LLM、SGLang |
| MXFP4 | 4 | Blackwell 多用户 | TRT-LLM |
| NVFP4 | 4 | Blackwell 多用户 | TRT-LLM |
GGUF 是文件格式,本身不是量化方案——它把 K-quant 变体(Q2_K、Q3_K_M、Q4_K_M、Q5_K_M、Q6_K、Q8_0)打成一个容器。Q4_K_M 与 Q5_K_M 是生产默认:4~5 位下接近 BF16 质量。CPU/边缘服务的最佳选择,因为 llama.cpp 远是最快的 CPU 推理引擎。
在 vLLM 里的吞吐惩罚:7B 上约 93 tok/s——这格式不为 GPU 内核优化。部署目标是 CPU/边缘才用 GGUF,否则不用。
GPTQ 是带校准通的训练后量化算法。Marlin 内核让它 GPU 上很快(相对非 Marlin GPTQ 提速 2.6 倍)。7B 上约 712 tok/s。
独特优势:GPTQ-Int4 在 vLLM 里支持 LoRA 适配器。如果你在服务一个基座 + 10~50 个微调变体(各为一个 LoRA),GPTQ 就是你的路。NVFP4 截至 2026 年初还不支持 LoRA。
激活感知权重量化(Activation-aware Weight Quantization)。量化时保护约 1% 最显著的权重。Marlin-AWQ 内核:相对朴素实现提速 10.9 倍。7B 上约 741 tok/s,INT4 格式里最佳 Pass@1。
新 GPU 服务选 AWQ,除非你要多 LoRA(GPTQ)或激进的 Blackwell FP4(NVFP4)。
8-bit 浮点。近乎无损、广泛支持。Hopper 张量核原生加速 FP8,Blackwell 继承。质量不可妥协时(推理、医疗、代码生成),FP8 是 2026 安全默认。内存节省是 INT4 的一半,但质量风险低得多。
微缩放 FP4。每个权重 block 有自己的 scale 因子。激进但 Blackwell 张量核硬件加速。相对 FP8 每字节 token 数翻倍——这是第 07 节经济收益的来源。
注意:
AWQ 与 GPTQ 需要校准数据集——通常是 C4 或 WikiText。对领域模型(代码、医疗、法律),用通用网页文本校准会让算法对「保护哪些权重」做出错误决定。HumanEval 上 Pass@1 可能掉好几分。
修复:用领域内数据校准。几百条领域样本通常够。上线前在评测集测。
AWQ 把权重压到 4 位。KV 缓存是另一回事,保持 FP16/FP8。对一个 AWQ 的 70B 模型:
天真说「我把模型量化到 4 GB」忘掉了另外 30~50 GB。整体规划 HBM。
另外,KV 缓存量化(FP8 KV 或 INT8 KV)是另一个独立选择,有自己的权衡——它直接影响注意力精度,不是免费午餐。
思维链、数学、长上下文代码生成——这些对激进量化肉眼可见地敏感。AWQ INT4 在 MATH 上掉约 3~5 分。推理密集负载,上 FP8 或 BF16,接受内存成本。
原课程 code/main.py 跨六种格式、一系列模型大小,算内存占用(权重 + KV + 激活)与相对吞吐,展示 KV 缓存在哪主导、权重压缩在哪划算、FP8 在哪是安全选择。下面给最小可读的内存预算骨架。
def total_hbm(num_params_b, weight_bits, kv_bits, concurrency, ctx_tokens, kv_per_token_bytes_per_bit=None, activation_gb=5): """估算某量化配置下的总 HBM 占用。 参数: num_params_b: 参数量(十亿) weight_bits: 权重位宽(BF16=16, FP8=8, INT4=4) kv_bits: KV 缓存位宽(FP16=16, FP8=8) concurrency: 并发序列数 ctx_tokens: 单序列上下文 token 数 activation_gb: 激活近似 GB 返回: (权重GB, KV GB, 总GB) """ weights_gb = num_params_b * (weight_bits / 8) # KV: 每层每头每 token 的 K+V,简化为按位宽比例缩放 # 参考基线: 70B FP16 KV ≈ 每(并发×千token)约 0.1 GB * (16/kv_bits 倒过来) kv_gb = (concurrency * ctx_tokens / 1000) * 0.1 * (kv_bits / 16) * (num_params_b / 70) total = weights_gb + kv_gb + activation_gb return round(weights_gb, 2), round(kv_gb, 2), round(total, 2) # 案例:70B 模型,128 并发,2k 上下文,四种配置 configs = [("BF16 权重+FP16 KV", 16, 16), ("INT4 权重+FP16 KV (AWQ)", 4, 16), ("INT4 权重+FP8 KV", 4, 8), ("FP8 权重+FP8 KV", 8, 8)] for label, wb, kb in configs: w, k, t = total_hbm(70, wb, kb, 128, 2000) fits = "✓ 装得下 H100 80GB" if t <= 80 else "✗ 装不下" print(f"{label}: 权重 {w}GB + KV {k}GB + 激活 ≈ {t}GB {fits}")
💡 「我的模型量化到 4 GB」是最常见的幻觉。把权重、KV、激活三者一起算,才是真实的 HBM 预算——这也是为什么 70B AWQ 模型实际占 60 GB 而非 35 GB。
| 格式 | 位宽 | 最佳引擎 | 7B 吞吐参考 | 多 LoRA | 质量风险 |
|---|---|---|---|---|---|
| GGUF Q4_K_M | 4~5 | llama.cpp/Ollama | 93 tok/s(vLLM 里) | 否 | 低(CPU 场景) |
| GPTQ | 4~8 | vLLM/TGI | 712 tok/s | 是(vLLM) | 中 |
| AWQ | 4 | vLLM(Marlin)/TGI | 741 tok/s | 否 | 中(推理任务高) |
| FP8 | 8 | vLLM/TRT-LLM/SGLang | 高(硬件加速) | 是 | 低 |
| MXFP4/NVFP4 | 4 | TRT-LLM | 极高(Blackwell) | 否(2026 初) | 高(需评测) |
心法:CPU/边缘 → GGUF;GPU 常规 → AWQ;GPU 多 LoRA → GPTQ;推理/医疗 → FP8;Blackwell 极致 → NVFP4(评测后)。
本节产出 outputs/skill-quantization-picker.md(原课程目录)。给定硬件、模型大小、工作负载类型、质量容忍度,它选出格式并产出校准/验证计划:
跑通计算器:运行 code/main.py。对 70B 模型、128 并发、2k 上下文,算每种格式的总 HBM。哪种能装进单张 H100 80GB?
选型:你有一个 7B 代码模型。选一种格式并论证。如果你对质量容忍度判断错了,恢复路径是什么?
校准大小:为一个医疗领域模型校准 AWQ,算需要多少校准数据。为什么更多数据不一定更好?
读内核:读 Marlin-AWQ 内核论文或发布说明,用三句话解释为什么 AWQ 在 7B 上跑到 741 tok/s,而裸 GPTQ 约 712。
组合选择:什么时候 AWQ 权重 + FP8 KV 比保持 BF16 KV 更合理?
下一节,我们转向 serverless 的最大痛点——冷启动:看模型预加载、检查点恢复、暖池策略如何把「从零到首 token」从几分钟压到秒级。