生产量化:AWQ、GPTQ、GGUF K-quants、FP8、MXFP4/NVFP4


文档摘要

生产量化: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 验证。

生产量化:AWQ、GPTQ、GGUF K-quants、FP8、MXFP4/NVFP4

本节摘要:量化格式不是普适选择,而是硬件、推理引擎、工作负载三者的函数。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)。

学习目标

阅读完本节,你应当能够:

  1. 说出 2026 年六种生产量化格式及其最佳命中点。
  2. 给定硬件(CPU vs GPU,Hopper vs Blackwell)、引擎(vLLM、TRT-LLM、llama.cpp)、工作负载(常规聊天、推理、多 LoRA),选出格式。
  3. 算出所选格式节省的权重内存,以及未动的 KV 缓存占用。
  4. 点名会让量化模型在领域流量上掉分的校准数据集陷阱。

一、问题与直觉

量化降低内存与 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 —— CPU/边缘默认

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 —— vLLM 多 LoRA

GPTQ 是带校准通的训练后量化算法。Marlin 内核让它 GPU 上很快(相对非 Marlin GPTQ 提速 2.6 倍)。7B 上约 712 tok/s。

独特优势:GPTQ-Int4 在 vLLM 里支持 LoRA 适配器。如果你在服务一个基座 + 10~50 个微调变体(各为一个 LoRA),GPTQ 就是你的路。NVFP4 截至 2026 年初还不支持 LoRA。

AWQ —— 数据中心 GPU 默认

激活感知权重量化(Activation-aware Weight Quantization)。量化时保护约 1% 最显著的权重。Marlin-AWQ 内核:相对朴素实现提速 10.9 倍。7B 上约 741 tok/s,INT4 格式里最佳 Pass@1。

新 GPU 服务选 AWQ,除非你要多 LoRA(GPTQ)或激进的 Blackwell FP4(NVFP4)。

FP8 —— 可靠的中间档

8-bit 浮点。近乎无损、广泛支持。Hopper 张量核原生加速 FP8,Blackwell 继承。质量不可妥协时(推理、医疗、代码生成),FP8 是 2026 安全默认。内存节省是 INT4 的一半,但质量风险低得多。

MXFP4 / NVFP4 —— Blackwell 激进档

微缩放 FP4。每个权重 block 有自己的 scale 因子。激进但 Blackwell 张量核硬件加速。相对 FP8 每字节 token 数翻倍——这是第 07 节经济收益的来源。

注意:

  • 截至 2026 年初不支持 LoRA。
  • 推理密集负载上质量掉分肉眼可见。
  • 每个模型要在评测集上验证。

校准陷阱

AWQ 与 GPTQ 需要校准数据集——通常是 C4 或 WikiText。对领域模型(代码、医疗、法律),用通用网页文本校准会让算法对「保护哪些权重」做出错误决定。HumanEval 上 Pass@1 可能掉好几分。

修复:用领域内数据校准。几百条领域样本通常够。上线前在评测集测。

KV 缓存陷阱

AWQ 把权重压到 4 位。KV 缓存是另一回事,保持 FP16/FP8。对一个 AWQ 的 70B 模型:

  • 权重:约 35 GB(INT4,从 140 GB)。
  • KV 缓存(128 并发 × 2k 上下文):约 20 GB。
  • 激活:约 5 GB。
  • 合计:约 60 GB——H100 80GB 装得下。

天真说「我把模型量化到 4 GB」忘掉了另外 30~50 GB。整体规划 HBM

另外,KV 缓存量化(FP8 KV 或 INT8 KV)是另一个独立选择,有自己的权衡——它直接影响注意力精度,不是免费午餐。

AWQ INT4 对推理有害

思维链、数学、长上下文代码生成——这些对激进量化肉眼可见地敏感。AWQ INT4 在 MATH 上掉约 3~5 分。推理密集负载,上 FP8 或 BF16,接受内存成本

2026 选型指南

  • CPU/边缘服务:GGUF Q4_K_M。完。
  • GPU 服务、常规聊天、无 LoRA:AWQ。
  • GPU 服务、多 LoRA:GPTQ 配 Marlin。
  • 推理工作负载:FP8。
  • Blackwell 数据中心、质量已验证:NVFP4 + FP8 KV。
  • 模糊不清:对每个候选格式跑 1000 样本评测。

三、从零实现:跨格式的内存与吞吐对比

原课程 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(原课程目录)。给定硬件、模型大小、工作负载类型、质量容忍度,它选出格式并产出校准/验证计划:

  1. 格式推荐:基于硬件 × 引擎 × 负载三轴决策表。
  2. 校准计划:领域数据集大小、采样策略、保护权重比例。
  3. HBM 预算:权重 + KV + 激活的完整占用,判断是否装得下目标 GPU。
  4. 评测门槛:上线前必须通过的任务(代码→HumanEval、推理→MATH、聊天→MT-Bench)与降分阈值。

六、练习

  1. 跑通计算器:运行 code/main.py。对 70B 模型、128 并发、2k 上下文,算每种格式的总 HBM。哪种能装进单张 H100 80GB?

  2. 选型:你有一个 7B 代码模型。选一种格式并论证。如果你对质量容忍度判断错了,恢复路径是什么?

  3. 校准大小:为一个医疗领域模型校准 AWQ,算需要多少校准数据。为什么更多数据不一定更好?

  4. 读内核:读 Marlin-AWQ 内核论文或发布说明,用三句话解释为什么 AWQ 在 7B 上跑到 741 tok/s,而裸 GPTQ 约 712。

  5. 组合选择:什么时候 AWQ 权重 + FP8 KV 比保持 BF16 KV 更合理?

本节要点回顾

  1. 量化是 f(硬件, 引擎, 负载):没有普适选择,要按自己栈选。
  2. GGUF Q4_K_M/Q5_K_M 占 CPU/边缘:经 llama.cpp/Ollama,GPU 上慢(约 93 tok/s)。
  3. GPTQ 在 vLLM 多 LoRA 胜出:INT4 支持 LoRA 适配器,NVFP4 还不行。
  4. AWQ 是数据中心 GPU 默认:Marlin-AWQ 内核,7B 约 741 tok/s,INT4 最佳 Pass@1。
  5. FP8 是可靠中间档:Hopper/Ada/Blackwell 原生加速,近乎无损,质量不可妥协时选它。
  6. NVFP4/MXFP4 激进:Blackwell 微缩放,经济收益翻倍,但需逐模型评测。
  7. 校准陷阱:通用文本校准让领域模型掉分,要用领域内数据。
  8. KV 缓存陷阱:权重 4 位不代表总占用 4 GB——KV(20~30 GB)与激活要一起算。
  9. AWQ INT4 对推理有害:思维链/数学/长上下文掉 3~5 分,推理负载上 FP8/BF16。

下一节,我们转向 serverless 的最大痛点——冷启动:看模型预加载、检查点恢复、暖池策略如何把「从零到首 token」从几分钟压到秒级。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U