模型部署与推理优化

剪枝:非结构化与结构化

kp-010核心25 分钟03-剪枝与蒸馏

一句话定义

剪枝(Pruning)把"不重要"的权重删掉以缩小模型:非结构化剪枝产生稀疏矩阵(需要专用硬件/kernel 才能加速),结构化剪枝按整块(注意力头、FFN 通道、整层)删除(任何硬件都能加速),LLM 时代实用的几乎都是后者加少量微调。

为什么重要

量化只减字节不减结构,剪枝(尤其层/通道级)能真正减少计算与显存的两头开销,是把模型从 7B 变成 5B 的主要手段;同时"哪些权重重要"的判断逻辑与量化互为印证,理解剪枝有助于理解所有压缩方法的共同地基——重要性度量。

前置知识

  • kp-001(减字节主线);矩阵维度与参数量换算(删一半 FFN 隐维 ≈ 删约 1/3 参数)。

核心概念

  • 非结构化剪枝:按单个权重删除,产生稀疏矩阵。50% 稀疏在 GPU 上靠通用 kernel 不快,只有 NVIDIA Ampere+ 的 2:4 半结构化稀疏(每 4 个连续权重保留 2 个)配专用 tensor core 才有约 1.3–1.6 倍实际加速。
  • 结构化剪枝:删注意力头(head pruning)、删 FFN 中间维、删整层(层跳跃/深度剪枝)。参数与计算按整块减少,无需专用支持。
  • 重要性度量:幅度 |w|;一阶敏感度 |w|·‖x‖(激活加权的幅度,Wanda 的核心);层间敏感度分析(逐层试探性删除后测损失增量)。
  • One-Shot 剪枝:SparseGPT 把剪枝表述为与 GPTQ 同构的逐层二次重建问题,一次前向完成;Wanda 用 |w|·‖x‖ 排序直接删,零校准训练。
  • 恢复训练:结构化剪枝后用少量数据做知识蒸馏式微调(kp-011)可挽回大部分精度。

原理与机制

剪枝成立的前提是"参数对输出的贡献不均匀":幅度小的权重、或落在弱激活通道上的权重,删除后其影响能被邻层吸收。非结构化剪枝保留细粒度自由但需要硬件模式(2:4)才能兑现速度;结构化剪枝牺牲粒度换取任意硬件上的确定性收益——两者是"粒度 vs 可部署性"同一权衡的两端,微调恢复则负责把删掉的那部分能力从剩余权重里"练回来"。

公式与模型

Wanda 式重要性分数:

Iij = |Wij| × ‖X:i‖

第 i 个输入通道的激活范数放大了"常被强激活的权重"的重要性——比纯幅度更贴近输出误差。结构化剪枝的维度账:删 FFN 中间维从 d_ff 到 d_ff/2,该层参数约减半(注意力不动),全模型参数约减 1/3。

实例或案例

把 7B 模型剪到约 5.3B(删 1/3 FFN 通道)+ 2 小时蒸馏微调:显存从 14GB(FP16)降到约 10.6GB,decode 因读取减少约提 20–25%,精度经微调后回到基线 98% 左右。对比单纯 W4 量化(显存 3.5GB):剪枝赢在"结构与计算同减",输在"操作复杂、需要训练资源",因此生产中量化优先、剪枝作补充。

常见误区

  • "稀疏度 50% = 快 2 倍":加速取决于硬件是否支持该稀疏模式;通用 GPU 上非结构化稀疏几乎无速度收益。
  • "剪枝不用微调":One-Shot 方法只是把掉点压小,结构化剪枝通常仍需恢复训练。
  • "删层一定伤得比删权重重":LLM 中后段存在高度冗余层,敏感度分析常发现可安全删除的层,但逐层差异大,必须实测。

自测题

  1. 为什么非结构化剪枝在通用 GPU 上不加速?

要点:稀疏索引访存不连续,通用 kernel 无法跳过零块,需 2:4 等硬件模式。

  1. Wanda 的重要性分数是什么,比纯幅度好在哪?

要点:|w|×‖x‖;把"被强激活通道上的权重"判为更重要,更贴近输出误差。

  1. 结构化剪枝删 FFN 一半中间维,全模型参数大约降多少?

要点:约 1/3(FFN 占Transformer 参数大头)。

与其他知识点的关系

kp-011 提供剪后的恢复训练手段;kp-012 编排"剪枝在流水线中的位置";SparseGPT 与 kp-007 的 GPTQ 共享同一逐层重建框架。

延伸阅读

《SparseGPT》(Frantar & Alistarh,2023)第 3 节展示了剪枝与量化的统一数学形式。

#剪枝#稀疏化#2:4 稀疏#结构化#Wanda#SparseGPT