第 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 权重映射到低精度整数。核心公式(对称量化):
是位宽, 是缩放因子。反量化 。误差来源是舍入——量化研究的全部艺术都在「怎么选缩放、怎么补偿误差」。
| 路线 | 做法 | 适用 |
|---|---|---|
| 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 公式里的 因子( 显存减半)。实践中 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):把权重 ,,压缩存储。理论优雅,实际对已训练权重效果一般(大矩阵低秩近似损失大),更多用于 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 章的分层评估在这里再次出场)。
本章要点回顾
- 压缩四路线:量化(主路线)、剪枝、蒸馏、低秩分解/共享/NAS。
- 量化核心是缩放因子与误差补偿;PTQ 首选、QAT 保精度;AWQ/GPTQ 是 INT4 权重量化的两大主流。
- KV 量化直接命中第 4 章公式的 因子,是长上下文显存减半的关键。
- GGUF 是端侧事实格式:量化 + 打包 + 一键加载。
- 结构化剪枝省显存但伤精度,非结构化剪枝缺生态;MoE 是「训练时稀疏」,剪枝是「事后砍」。
- 蒸馏(尤其黑盒)是现代小模型的诞生方式:大模型生成数据,小模型继承。
- 压缩决策铁律:业务评测 + 端到端压测双把关;长尾能力最先崩。
习题
- 7B 模型 INT4 量化后权重从 14GB 降到约 3.5GB。如果量化不改变 batch 数,为什么单 token 延迟还能降低?用 memory-bound 解释。
- GPTQ 和 AWQ 的量化粒度与补偿思路有何不同?各自在什么场景更优?
- 你的 70B 模型 W4A8 量化后在业务集上掉 3 分,但 MMLU 只掉 0.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),以及延迟-吞吐-成本三角。