第 13 章 LLM量化GPTQ

第 13 章 模型压缩

第 13 章 模型压缩

学习目标

  • 掌握量化的原理:PTQ/QAT、INT8/INT4/FP8、AWQ/GPTQ、GGUF;
  • 理解剪枝(结构化/非结构化)与稀疏化;
  • 理解知识蒸馏的三种形态与「教师-学生」设计;
  • 理解低秩分解、权重共享、神经架构搜索;
  • 建立 LLM 压缩的权衡心智:精度 vs 延迟 vs 吞吐 vs 成本。

13.1 为什么压缩:把大模型装进现实

第 4 章的量级账:70B BF16 权重 140GB,推理一张卡放不下;7B BF16 也要 14GB,消费卡勉强、端侧不可能。压缩的目标:在尽量不损失能力的前提下,把模型变小、变快、变省。 压缩的四条路线:

%%{init: {"themeVariables": {"primaryTextColor": "#000000", "textColor": "#000000", "labelColor": "#000000", "nodeTextColor": "#000000", "labelTextColor": "#000000", "scaleLabelColor": "#000000"}}}%%
mindmap
  root((模型压缩))
    量化
      权重/激活低精度
      PTQ 免训练
      QAT 训练感知
      AWQ/GPTQ 感知量化
      GGUF 文件格式
    剪枝
      结构化
      非结构化
    蒸馏
      白盒软标签
      黑盒生成数据
    低秩分解
      SVD 近似
      LoRA 化
    权重共享
      ALBERT 式
    神经架构搜索
      自动化找小结构

13.2 量化:把浮点压成定点

13.2.1 原理与 PTQ/QAT

量化把 FP16/BF16 权重映射到低精度整数。核心公式(对称量化):

xint=round(xs),s=maxx2b11x_{\text{int}} = \text{round}\left(\frac{x}{s}\right),\quad s = \frac{\max |x|}{2^{b-1} - 1}

bb 是位宽,ss 是缩放因子。反量化 xxint×sx \approx x_{\text{int}} \times s。误差来源是舍入——量化研究的全部艺术都在「怎么选缩放、怎么补偿误差」

路线 做法 适用
PTQ(训练后量化) 训练完直接量化,少量校准数据 快速、成本低、默认首选
QAT(量化感知训练) 训练时模拟量化误差,让权重适应 精度要求高、位宽低(INT4 以下)
动态 vs 静态 动态按输入算缩放;静态用校准集预计算 静态快但敏感,动态稳

13.2.2 从 INT8 到 INT4:AWQ、GPTQ

  • INT8:成熟的 W8A8(权重+激活都 8bit),精度损失可忽略,主要省带宽与计算(Tensor Core 支持);
  • INT4/INT8 权重量化:只量化权重、激活保持高精度。这里诞生了两大主流方法:
    • GPTQ(Optimal Brain Quantization 家族):逐层用二阶信息(Hessian)补偿舍入误差,把「逐元素量化」变成「有全局补偿的量化」——经典 PTQ,生态成熟;
    • AWQ(Activation-aware Weight Quantization):洞察不是所有通道同等重要——保留激活值大的少数通道为高精度,其余 4bit,并做缩放重排。AWQ 的核心观察「激活感知」被后续方法广泛沿用;
    • SmoothQuant:把激活的量化难度「平滑」到权重上(迁移缩放),让 W8A8 可行。

13.2.3 量化对 KV Cache 与激活

第 3、4 章的 KV Cache 也是显存大头。KV 量化(FP8/INT8 存 KV)能砍一半甚至更多的 KV 显存,代价是长上下文下精度略降——这正好命中第 4 章 KV Cache 公式里的 pp 因子p=21p=2\to1 显存减半)。实践中 KV 量化常与权重量化叠加(W4A8 + KV8 是 2024-2025 的常见组合)。

13.2.4 GGUF:端侧的事实格式

GGUF(由 llama.cpp 定义)不是量化算法,而是文件格式 + 量化方案打包:把模型权重、tokenizer、超参、各类量化(Q4_0/Q4_K_M/Q8_0 等)统一封装,端侧推理引擎(llama.cpp、Ollama)直接加载。工程意义:让「下载一个模型文件就能本地跑」成为可能——第 18 章端侧部署的事实标准。

# llama.cpp 量化 7B 到 Q4_K_M(常用平衡档)
llama-quantize ./llama-2-7b-fp16.gguf ./llama-2-7b-Q4_K_M.gguf Q4_K_M
# 结果:14GB → ~4GB,显存要求大降

13.3 剪枝与稀疏化

剪枝:删掉不重要的参数/结构。

  • 非结构化剪枝:把权重矩阵里绝对值小的元素置零。稀疏度高但需要稀疏格式与稀疏 kernel 才真提速(普通稠密计算白剪)——软件生态不成熟,LLM 上收益兑现难;
  • 结构化剪枝:删掉整行/整列/整个头/整层(如删注意力头、删 FFN 维度)。形状规则,直接省显存与计算,但精度损失大,常需微调恢复。

稀疏化(Sparse) 与 MoE(第 4 章)共享「只激活部分参数」的思想,但 MoE 是训练时设计的结构稀疏,剪枝是事后砍。

13.4 蒸馏:让学生继承教师

第 7 章已讲过蒸馏的两种信号。回到压缩语境,蒸馏是**「用小结构 + 教师知识」替代大模型**的路线:

维度 白盒蒸馏 黑盒蒸馏
需要教师权重 是(软标签 logits) 否(生成数据)
信息量 高(类间关系) 中(只有教师输出文本)
适用 有教师模型的开源场景 闭源 API 当教师
代表 DistilBERT、MiniLLM Alpaca、WizardLM 类

蒸馏的现代实践(Phi 系列、Llama 3.2 小模型、DeepSeek-R1-Distill):大模型生成高质量数据(推理链、代码、指令)→ 小模型 SFT。它与「合成数据」(第 6 章)是同一件事的两面:合成数据 + 小模型 = 黑盒蒸馏。端侧模型几乎全部走这条路——不是把大模型「缩」成小的,而是让小的「学」大的。

13.5 低秩分解、权重共享、神经架构搜索

  • 低秩分解(SVD):把权重 WUVW \approx U V^\topURd×rU \in \mathbb{R}^{d \times r},压缩存储。理论优雅,实际对已训练权重效果一般(大矩阵低秩近似损失大),更多用于 LoRA 这类「训练时低秩」而非「事后压缩」;
  • 权重共享:ALBERT 的跨层共享、Transformer 的 Embedding 与输出层 tie weights(第 4 章参数账里已含)——省参数但能力有损,主流 LLM 较少用;
  • 神经架构搜索(NAS):自动搜一个小而强的结构。成本高、周期长,LLM 时代被「蒸馏 + 量化已有大模型」的路线取代——工程上更划算的是把大模型变小,而不是从小搜索大

13.6 LLM 压缩专题:精度、延迟、吞吐、成本

压缩不是免费的。四个维度此消彼长:

维度 压缩带来的 代价
显存 权重变小(4bit=1/4)、KV 量化 精度风险
延迟 每 token 读权重更少(memory-bound 提速,第 4 章) 精度风险
吞吐 同显存塞更多 batch 精度风险
成本 GPU 需求降级、每 token 成本降 需评估收益是否覆盖精度损失

压缩的决策流程(工程铁律):

%%{init: {"themeVariables": {"primaryTextColor": "#000000", "textColor": "#000000", "labelColor": "#000000", "nodeTextColor": "#000000", "labelTextColor": "#000000", "scaleLabelColor": "#000000"}}}%%
flowchart TD
    A[业务评测集] --> B[BF16 基线分]
    B --> C[INT8 量化
精度变化 <1%?] C -->|是| D[上线 INT8] C -->|否| E[INT4 + 校准调优] E --> F{精度可接受?} F -->|是| G[上线 INT4] F -->|否| H[QAT / 蒸馏补偿
或退回高精度] D --> I[端到端压测
延迟/吞吐/成本] G --> I

关键认知:量化精度损失不能只看 MMLU 均值——长尾任务(代码、数学、结构化输出、多轮一致)往往先崩。压缩选型必须用业务评测集 + 端到端压测双把关(第 9 章的分层评估在这里再次出场)。


本章要点回顾

  1. 压缩四路线:量化(主路线)、剪枝、蒸馏、低秩分解/共享/NAS。
  2. 量化核心是缩放因子与误差补偿;PTQ 首选、QAT 保精度;AWQ/GPTQ 是 INT4 权重量化的两大主流。
  3. KV 量化直接命中第 4 章公式的 pp 因子,是长上下文显存减半的关键。
  4. GGUF 是端侧事实格式:量化 + 打包 + 一键加载。
  5. 结构化剪枝省显存但伤精度,非结构化剪枝缺生态;MoE 是「训练时稀疏」,剪枝是「事后砍」。
  6. 蒸馏(尤其黑盒)是现代小模型的诞生方式:大模型生成数据,小模型继承。
  7. 压缩决策铁律:业务评测 + 端到端压测双把关;长尾能力最先崩。

习题

  1. 7B 模型 INT4 量化后权重从 14GB 降到约 3.5GB。如果量化不改变 batch 数,为什么单 token 延迟还能降低?用 memory-bound 解释。
  2. GPTQ 和 AWQ 的量化粒度与补偿思路有何不同?各自在什么场景更优?
  3. 你的 70B 模型 W4A8 量化后在业务集上掉 3 分,但 MMLU 只掉 0.5 分。分析可能原因并给出修复路径。
  4. 为什么说「黑盒蒸馏 = 合成数据 + 小模型」?它和「量化大模型」在工程上有何本质差异?
  5. 设计一个量化发布实验:选哪个位宽、用什么评测集、怎么决定上线还是回退?

延伸阅读

  • Frantar et al., GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers, 2022
  • Lin et al., AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration, 2023
  • Xiao et al., SmoothQuant: Accurate and Efficient Post-Training Quantization for LLMs, 2022
  • Dettmers et al., QLoRA: Efficient Finetuning of Quantized LLMs, 2023(NF4)
  • Hinton et al., Distilling the Knowledge in a Neural Network, 2015
  • llama.cpp / GGUF 官方文档
  • NVIDIA TensorRT-LLM 量化文档(FP8/INT4 生态)

下一章预告

第 14 章推理优化:KV Cache 的管理艺术(PagedAttention)、连续批处理、投机解码、算子融合与推理引擎(vLLM/TGI/TensorRT-LLM),以及延迟-吞吐-成本三角。