知识库 / 训练与推理
GitHub
← 训练与推理

LAYER 03 / TRAINING & INFERENCE

量化、蒸馏与模型压缩

所属: 训练推理平台层。本页边界: 怎样用近似降低模型的权重、激活或缓存成本。

#核心公式

q=clip⁡ ⁣(round⁡ ⁣(xs)+z,qmin⁡,qmax⁡),x^=s(q−z) q=\operatorname{clip}\!\left(\operatorname{round}\!\left(\frac{x}{s}\right)+z,q_{\min},q_{\max}\right),\qquad\hat x=s(q-z)

#符号说明

符号 含义 单位/条件
x, x^x,\ \hat x 原始浮点值与反量化后的近似值 浮点数
qq 存储或计算使用的整数码 整数
ss 量化步长/尺度 正实数
zz 表示实数零点的整数偏移 整数
qmin⁡,qmax⁡q_{\min},q_{\max} 目标整数类型可表示的上下界 整数
ΔW,Δx\Delta W,\Delta x 后文中的权重与激活量化误差 与原张量同形状
TT 蒸馏 softmax 温度 正实数
pteacher(T),pstudent(T)p_{\mathrm{teacher}}^{(T)},p_{\mathrm{student}}^{(T)} 温度 TT 下教师与学生的输出分布 概率分布
LKD, DKL\mathcal L_{\mathrm{KD}},\ D_{\mathrm{KL}} 知识蒸馏损失、KL 散度 非负标量
W, ΔW, ΔxW,\ \Delta W,\ \Delta x 原权重、权重量化误差、激活量化误差 张量
y, y^y,\ \hat y 原计算输出与量化后输出 张量
HH 后文二阶损失近似中的 Hessian 矩阵
gg 量化分组大小 正整数
α\alpha SmoothQuant 中控制难度迁移比例的超参数 [0,1][0,1]

若发生截断,误差不再受最近邻取整的 s/2s/2 上界约束;逐元素误差小也不保证生成质量不变。

#技术要点

  • PTQ 在训练后量化;QAT 在训练中模拟量化误差。EfficientQAT 通过两阶段设计将 2-bit Llama-2-70B 量化时间压缩到单卡 41 小时。
  • 权重量化主要减容量和带宽;KV 量化还面对动态分布。
  • 激活量化比权重量化困难,原因是激活中存在系统性的离群值,且离群值在通道间分布高度不均匀。SmoothQuant 通过数学等价变换将量化难度从激活迁移到权重。
  • 蒸馏让学生拟合教师 logits、特征或轨迹。反馈驱动的知识蒸馏通过学生反馈生成针对性训练数据。
  • 结构化剪枝删除通道或层以直接减少计算;非结构化剪枝仅减少参数计数,不保证加速。
  • 联合压缩(剪枝+量化)在相同压缩率下比单独量化平均提升 20% 性能。
  • 误差小不保证生成质量不变。

#原理与演进

#量化的近似从哪里来

  • ss 是量化步长,zz 是零点,[qmin⁡,qmax⁡][q_{\min},q_{\max}] 是整数范围;取整与截断把连续值映射到有限整数,再用 x^\hat x 近似恢复。
  • 权重的离群值会迫使整体尺度变大,普通值精度变差。按通道或按组设尺度能改善误差,但增加元数据与实现复杂度。
  • PTQ 不更新或少量校准权重,成本低;QAT 在训练中模拟量化误差,让参数主动适应,训练成本更高。
  • 权重低 bit 只保证存储量下降;若核函数先反量化到高精度且计算受限,延迟收益可能很小。
  • 在未发生截断、使用最近邻取整时,标量误差满足下式;超出量化范围而被裁剪时,此上界不再成立。层间误差还会传播,所以单层误差小不保证最终生成稳定。
∣x−x^∣≤s/2 |x-\hat x|\leq s/2

#蒸馏传递的是分布或行为

LKD=T2DKL ⁣(pteacher(T)∥pstudent(T)) \mathcal L_{\mathrm{KD}}=T^2 D_{\mathrm{KL}}\!\left(p_{\mathrm{teacher}}^{(T)}\Vert p_{\mathrm{student}}^{(T)}\right)
  • 温度 TT 平滑教师与学生的输出分布;学生除真实标签外,还学习“其他候选有多可能”。
  • 对大模型还可蒸馏中间特征、生成轨迹或偏好;轨迹质量差会把教师错误传给学生。

#压缩技术解决不同成本

技术 降低什么 可能新增问题
权重量化 容量、权重带宽 离群值误差、kernel 适配
KV 量化 长上下文缓存占用 注意力误差随生成累积
蒸馏 模型规模与单次推理成本 学生容量不足、长尾退化
结构化剪枝 层/头/通道规模 需重训练并验证任务退化

端侧为什么更在意这些取舍,见边缘约束。

#1. 量化的误差是如何累积的

对式(1)所示线性层,量化后得到式(2),于是

式(1):

y=Wx y=Wx

式(2):

y^=(W+ΔW)(x+Δx) \hat y=(W+\Delta W)(x+\Delta x) y^−y=ΔWx+WΔx+ΔWΔx. \hat y-y=\Delta W x+W\Delta x+\Delta W\Delta x.

权重量化影响 ΔW\Delta W,激活量化影响 Δx\Delta x;两者同时存在会产生交叉项。单元素 MSE 小并不意味着最终生成一致,因为后续非线性、归一化和自回归生成会传播偏差。

对称量化通常取下式,实现简洁但非对称分布利用率可能不足;非对称量化用零点适配范围,额外引入零点处理。Per-tensor、per-channel、group-wise 的粒度越细,通常误差越小、元数据和核实现越复杂。

z=0 z=0

#1.1 分组量化与元数据成本

分组量化将权重矩阵按列方向分为大小为 gg 的组,每组独立计算量化尺度 ss 和零点 zz。设权重矩阵为 dout×dind_{\mathrm{out}}\times d_{\mathrm{in}},整数权重占用 qdoutdinq d_{\mathrm{out}} d_{\mathrm{in}} 比特,缩放因子和零点额外占用 doutdin/gd_{\mathrm{out}}d_{\mathrm{in}}/g 个参数。gg 越小,量化精度越高,但元数据占比越大:满足式(1)时元数据约占权重存储的 3%–5%;满足式(2)时可达 10%–15%。这是一个精度与存储开销之间的显式权衡,不是“越细越好”的单调关系。

式(1):

g=128 g=128

式(2):

g=32 g=32

#2. PTQ 为什么需要校准

训练后量化(PTQ)用少量代表性输入估计激活范围、离群值和敏感层。若校准集缺少长上下文、代码、专业术语或真实部署格式,得到的尺度会对这些样本失准。量化感知训练(QAT)在前向模拟取整/截断,用近似梯度更新权重;可恢复精度,但要再次训练。

路线:全精度权重 → FP16/BF16 降低带宽与容量 → INT8 PTQ 保持较低误差 → INT4 等低 bit 权重量化(离群值和分组关键)→ 激活/KV 量化(进一步降内存,但动态分布更难)→ QAT 或混合精度修补敏感部分。

对象 何时确定分布 主要困难
权重 训练完成后固定 离群通道、不同层敏感度
激活 随输入变化 极值、动态范围漂移
KV Cache 随历史和层变化 长序列误差、在线缩放代价

#2.1 AWQ:激活感知的通道缩放

AWQ 的核心发现是权重的重要性应该通过激活分布而非权重本身来判断。传统方法用权重的 L2 范数或绝对值判断重要性,但实验表明这种策略在 LLM 量化中效果与随机选择相当。AWQ 的计算方式为:对输入激活 XX,计算每个输入通道的平均激活幅度

sX(i)=1n∑j=1n∣Xij∣ s_X(i)=\frac1n\sum_{j=1}^n|X_{ij}|

激活幅度最大的前 0.1%–1% 通道被视为显著通道。

AWQ 不采用混合精度(将显著通道保留 FP16),因为混合精度需要处理不同数据类型,硬件实现效率低。取而代之的是按通道缩放:对显著通道的权重乘以下式所示缩放因子,同时将输入的逆缩放 α−1\alpha^{-1} 折叠到前一层。这一变换在数学上等价,不改变模型输出,但显著通道的权重量化相对误差被降低——因为权重被放大了,相同的绝对量化误差对应的相对误差更小。

α>1 \alpha>1

从激活敏感性的统一理论框架看,AWQ 是对激活敏感性的一种近似:它假设下游梯度均匀,从而将敏感性简化为激活幅度。这一假设在多数 LLM 层中大致成立,但在某些层可能失效。

#2.2 GPTQ:二阶误差补偿

GPTQ 将量化建模为逐层的二次优化问题。对第 ℓ\ell 层的权重 W(ℓ)W^{(\ell)} 和校准数据 X(ℓ)X^{(\ell)},目标是最小化 ∥W(ℓ)X(ℓ)−W^(ℓ)X(ℓ)∥F2\|W^{(\ell)}X^{(\ell)}-\widehat W^{(\ell)}X^{(\ell)}\|_F^2。该目标关于权重的 Hessian 可高效计算如下。

H(ℓ)=X(ℓ)X(ℓ)T H^{(\ell)}=X^{(\ell)}X^{(\ell)T}

GPTQ 按列从左到右逐列量化。量化第 qq 列后,其误差通过 Hessian 逆矩阵传播到所有未量化列:

δ=−W:,q−quant⁡(W:,q)[H−1]qqH:,(q+1): \delta=-\frac{W_{:,q}-\operatorname{quant}(W_{:,q})}{[H^{-1}]_{qq}}H_{:,(q+1):}

这一更新规则将量化误差“补偿”到后续列中,使整体量化误差最小化。GPTQ 使用 Cholesky 分解更新 Hessian 逆矩阵,比 OBQ 的逐行删除数值更稳定。为减少数据传输,GPTQ 将更新限制在包含当前列的小块 BB 内,块外的列在块处理完毕后一次性更新。

GPTQ 可在数小时内将 OPT-175B 和 BLOOM-176B 压缩到 3–4 bit 且精度几乎不受影响。从统一敏感性框架看,GPTQ 是对激活敏感性的另一种近似:它使用输入协方差作为 Hessian 代理,但忽略激活尺度本身的结构。

#2.3 SmoothQuant:激活量化的等价变换

激活量化比权重量化困难,根本原因是激活中存在系统性的离群值:少数通道的激活幅度远大于其他通道,且这些离群值在所有 token 上表现出一致的通道分布模式。如果直接对激活做 per-tensor 量化,离群值会拉伸量化范围,使非离群通道的有效量化位仅剩 2–3 位。

SmoothQuant 的观察是:不同 token 在通道间的变化模式是相似的。基于这一观察,SmoothQuant 在离线阶段执行数学等价的逐通道缩放变换:

Y=XW=(Xdiag⁡(s)−1)⋅(diag⁡(s)W) Y=XW=(X\operatorname{diag}(s)^{-1})\cdot(\operatorname{diag}(s)W)

其中平滑因子见式(1),超参数 α\alpha 控制将多少量化难度从激活迁移到权重。式(2)是均衡点,使对应通道的权重和激活具有相似的最大值,共享相同的量化难度。

式(1):

sj=max⁡(∣Xj∣)α/max⁡(∣Wj∣)1−α s_j=\max(|X_j|)^\alpha/\max(|W_j|)^{1-\alpha}

式(2):

α=0.5 \alpha=0.5

关键工程细节:由于输入 XX 通常由前一层(如 LayerNorm 或线性层)产生,平滑因子可以折叠到前一层参数中,不引入额外的 kernel 调用开销。这是 SmoothQuant 相比 LLM.int8() 的混合精度分解方案的核心优势——后者将离群值用 FP16 处理、其余用 INT8,硬件实现效率低。

#2.4 QAT 的工程实现

EfficientQAT 通过两阶段设计使 QAT 可行。第一阶段 Block-AP 以块为单位训练所有参数,这是首个直接在块级别训练全部参数的方法,通过扩大优化空间降低低比特场景的精度损失。第二阶段 E2E-QP 仅端到端训练量化参数(步长),考虑所有子模块之间的交互。在 Llama-2-70B 上,EfficientQAT 在单张 A100-80GB 上 41 小时获得 2-bit 模型,精度退化不到 3 个点(69.48 vs 72.41)。

QAT 的缩放律:对 268 次 QAT 实验的拟合表明,量化误差随模型规模增大而减小,随训练 token 数增加而增大,随量化分组粒度变粗而增大。这一趋势与训练后量化的观察一致:训练越充分的模型对量化越脆弱。

#3. 蒸馏为何不等于压缩文件

蒸馏改变学生参数的学习目标。硬标签损失只把正确类设为 1;教师软分布提供类别之间的相对信息。温度升高后教师输出更平,T2T^2 因子常用于保持梯度量级,但不同实现的蒸馏目标需检查定义。

学生容量小,未必能同时保留教师的所有能力:高频简单任务可能维持,长尾知识、长上下文、复杂推理常先退化。只在教师生成样本上蒸馏还会继承教师错误和分布偏差。

#3.1 蒸馏方法的分类与选择

对 11 种 LLM 知识蒸馏方法的系统分析将其分为五类:散度基(拟合教师输出分布)、奖励基(用强化学习优化学生行为)、数据基(通过数据选择或生成传递知识)、任务特定(针对特定能力蒸馏)和混合方法。研究表明,最优蒸馏方法取决于模型规模、任务特性和效率需求,不存在通用最优选择。方法范式已从简单的输出分布“模仿”演进为上下文感知的“教学”范式。

反馈驱动的知识蒸馏是一个值得注意的方向:利用学生模型对教师提问,根据学生的反馈生成针对性的训练数据。这一机制让学生主动暴露其知识盲区,教师据此生成学生最需要的示范,而不是在固定数据集上被动蒸馏。这改变了蒸馏的信息流向——不再是教师单向输出,而是学生引导的知识获取。

#3.2 贝叶斯知识蒸馏

BayesKD 针对资源受限微调场景设计了三个组件:Logits 双重缩放处理教师和学生输出分布的尺度差异,知识对齐模块在特征空间中对齐教师和学生的表示,贝叶斯蒸馏优化将蒸馏损失建模为概率推断问题。这一设计使紧凑模型在有限微调预算下获得更稳定的知识迁移。

#4. 剪枝与低秩近似的区别

非结构化剪枝将部分权重置零,理论参数数减少,但普通密集核仍可能同样耗时;要加速,需要硬件支持的稀疏格式。结构化剪枝删除层、头或通道,更容易得到实际加速,却可能破坏网络功能,通常需微调恢复。

#4.1 结构化剪枝的方法演进

OOPS 采用三组件设计:异常值感知的剪枝单元选择、基于二次规划的重建、逐层蒸馏。前两个组件使 OOPS 在无需重训练的情况下即可优于现有免重训练方法;加入逐层蒸馏后,以更低计算成本超越基于重训练的方法。在 4 个 LLM 家族的 11 个模型上验证了这一设计。

AdaPruner 针对结构化剪枝中校准数据和重要性估计两个环节进行优化,引入样本感知的自适应策略。在 20% 剪枝率下实现了显著的性能保持。

PIP 采用双视角迭代剪枝:结合权重空间和激活空间两个视角的信息进行剪枝决策,参数数减少约 20% 时保留超过 85% 的原始准确率。

SlimLLM 关注剪枝效率与精度的平衡,提出了一种快速结构化剪枝方法。SPRINT 的发现具有反直觉性:选择性剪枝某些注意力头可以提升推理性能,尤其在困难任务上。这一现象提示剪枝不仅是压缩手段,也可能作为能力调节机制。

#4.2 低秩近似与 LoRA 的区别

低秩近似写作下式,理论乘法成本从 O(dindout)O(d_{\mathrm{in}}d_{\mathrm{out}}) 变为 O(r(din+dout))O(r(d_{\mathrm{in}}+d_{\mathrm{out}}));若 rr 不够低,额外 kernel 启动和中间张量抵消收益。它与 LoRA 不同:LoRA 常在冻结 WW 上添加低秩更新,并未把 WW 本身替换成低秩矩阵。

W≈UV⊤ W\approx UV^\top

#5. 评价压缩应同时看四个量

报告权重大小、实际峰值内存、目标硬件上的吞吐/延迟、任务质量。模型文件变小不代表 KV Cache 变小;FLOPs 变少不代表在小批 decode 上更快。特定任务至少保留长上下文、少数语言、专业事实与错误案例分层评测。

#5.1 语义保持压缩率

SrCr 指标量化模型压缩与语义保持之间的权衡,解决了此前评估框架未能准确捕捉压缩模型真实退化模式的问题。基于 SrCr 的优化显示,剪枝与量化的联合配置在相同理论压缩率下比纯量化模型平均提升 20% 性能。这说明压缩技术不是相互独立的——剪枝改变了权重分布,进而影响量化的误差特征;量化后的权重结构也可能更适合进一步剪枝。

#5.2 智能体能力的压缩评估

ACBench 是首个评估压缩对 LLM 智能体能力影响的基准。初步结果显示,压缩使真实应用准确率下降 10%–15%,这一降幅通常大于标准 NLP 基准上的退化。ACBench 引入 ERank(有效秩)、Top-k 排序相关性和 Energy 三个指标来系统化分析压缩对智能体行为的影响。这一发现的方法论意义是:压缩后的模型在传统语言理解任务上可能表现良好,但在需要多步工具调用、状态跟踪和错误恢复的智能体场景中退化更严重,因为智能体能力依赖于更多样的中间表示和更长的推理链。

#6. 为什么逐权重误差最小不一定最优

模型最终关心输出变化,不是权重矩阵的逐元素距离。对小扰动 ΔW\Delta W,损失可作二阶近似:

ΔL≈∇WL⊤ΔW+12ΔW⊤HΔW \Delta\mathcal L\approx\nabla_W\mathcal L^\top\Delta W+\frac12\Delta W^\top H\Delta W

在接近局部驻点时一阶项较小,Hessian HH 的高敏感方向会让相同大小的量化误差造成更大损失。实际方法通常用近似曲率、激活统计或校准样本识别敏感通道,而非显式计算巨大 Hessian。

激活敏感性统一框架将 AWQ 和 GPTQ 统一为同一敏感性度量在不同假设下的近似。激活敏感性定义为通道级扰动对损失的期望影响,通过一阶 Taylor 展开可表示为梯度加权激活的平方范数:

sensitivityc∝E[(∇θℓ⋅xc)2] \text{sensitivity}_c\propto\mathbb E[(\nabla_\theta\ell\cdot x_c)^2]

这一度量同时捕获激活幅度和下游误差传播两个因素。AWQ 可视为在“下游梯度均匀”假设下对敏感性的近似,GPTQ 可视为在“激活无关协方差”假设下的近似。两者覆盖了敏感性的不同侧面,因此在某些层上 AWQ 更优、在另一些层上 GPTQ 更优。

这解释了为何混合精度有意义:对敏感层保留较高位宽,对容忍误差的层使用低 bit。代价是存储格式和 kernel 更复杂,未必比统一量化更快。

#7. 压缩前后任务分布可能不同

若只用短文本校准 PTQ,长上下文时激活/KV 的值域可能变化;若只用通用聊天数据蒸馏,专业任务表现可能下降。评测应包含:校准集内、校准集外、长输入、稀有语言、结构化输出和多步推理。压缩后的“平均准确率只下降 1%”可能掩盖某个关键子群明显退化。

路线:参数量过大 → 量化降低存储 → 发现离群值/敏感层 → 分组与混合精度 → 激活/KV 进一步压缩 → 校准分布变化与生成误差成为新瓶颈。

关联概念: 存储层次解释带宽为何影响低 bit 收益;推理与 KV Cache解释缓存量化对象;分布式训练与 LoRA解释参数高效更新和量化基座的区别;端侧约束解释压缩后的实际设备目标。

#原始资料

本页由仓库中的 Markdown 生成。具体技术结论请结合正文引用与实验条件理解。

输入关键词,探索整个知识库

↑ ↓ 选择 ↵ 打开36 篇笔记,一次搜索