结构化剪枝和非结构化剪枝有什么区别?
简化版
非结构化剪枝删除单个权重,稀疏率灵活、同等参数量下通常更容易保质量,但产生不规则稀疏,通用 GPU 需要专用 Kernel 才能加速。结构化剪枝删除完整通道、Head、Neuron、层或块,直接缩小 Dense 矩阵,更容易获得真实延迟收益,但每次删除影响更大。
选择取决于目标:只压存储可用非结构化;追求通用硬件加速优先结构化;硬件支持 N:M 时可做半结构化折中。无论哪种,都要渐进剪枝、恢复训练,并在目标硬件上验证质量、显存、TTFT/TPOT 和吞吐。
详细版
| 维度 | 结构化 | 非结构化 |
|---|---|---|
| 粒度 | 层/头/通道/块 | 单权重 |
| 矩阵形状 | 变小 | 通常不变 |
| Dense Kernel | 可直接利用 | 无法跳过零值 |
| 质量灵活度 | 较低 | 较高 |
| 部署复杂度 | 中 | 稀疏 Kernel 依赖高 |
importance -> prune small fraction -> recovery tuning
-> re-estimate -> repeat -> export -> benchmark
参数减少率、理论 FLOPs 和墙钟延迟是三种不同指标;面试回答必须说明部署硬件能否利用相应稀疏结构。
完整版教学
1. 非结构化剪枝是什么
按权重粒度将低重要性元素置零,原矩阵尺寸保持不变。它可以在任意位置达到目标稀疏率。
若仍用 Dense GEMM,零值照样参与搬运和计算,所以模型“稀疏”但不一定更快。
2. 结构化剪枝是什么
删除完整通道、MLP Neuron、Attention Head、层或规则块,导出后矩阵实际变小。
它能复用成熟 Dense Kernel,但粗粒度删除更容易损伤能力,并可能改变残差与维度依赖。
导出时必须真正重建参数形状和模型配置;仅将整通道乘零 Mask,仍不会减少 Dense 矩阵尺寸,也就难以获得部署收益。
3. 半结构化 N:M
每 M 个权重保留 N 个,例如 2:4。它比任意稀疏规则,又比删整通道细腻。
收益依赖特定硬件与数据类型;不支持的设备可能先展开或回退 Dense。
4. 重要性如何计算
可用幅值、权重×梯度、Hessian 近似、激活贡献或删除后的 Loss 增量。
score_i ≈ |w_i × grad_i|
幅值便宜但忽略任务;二阶方法更精细但计算和内存更高。
5. 结构化对象有哪些
| 对象 | 直接收益 | 主要风险 |
|---|---|---|
| Attention Head | 减少注意力投影 | 破坏特定关系能力 |
| MLP Neuron | 缩小 FFN | 损失知识通道 |
| 隐藏通道 | 多矩阵联动变小 | 维度依赖复杂 |
| Transformer 层 | 深度直接下降 | 推理能力显著退化 |
| 规则块 | 兼顾粒度与硬件 | 需块稀疏 Kernel |
不同对象不能仅按参数数量直接比较。
6. 为什么渐进剪枝更稳
一次删除大量参数会造成突然分布偏移。分多轮小比例删除,并在每轮恢复训练,剩余参数有机会重新适配。
重要性应重新计算,因为删除后各结构的边际贡献会变化。
7. 全局还是逐层阈值
全局阈值让冗余层多剪、敏感层少剪,但可能把某层几乎清空;逐层固定比例更稳定,却忽略差异。
常用做法是全局评分加每层最小保留约束,并对首尾/敏感层设置独立上限。
评分还需做层间归一化,否则数值尺度较小的层会被系统性高估为“不重要”。最终阈值用独立验证集选择。
8. 恢复训练怎么做
低学习率微调,混合目标任务与通用回放;结构变化较大时可用原模型蒸馏输出或隐藏状态。
若反复恢复仍无法达到门槛,应降低稀疏目标,而非只增加训练轮数过拟合验证集。
恢复期间保持剪枝 Mask 或压缩结构固定,防止已删除权重重新长出;若采用动态稀疏训练,则需明确允许连接重新分配的规则。
9. 稀疏存储有什么代价
非结构化模型需要索引、压缩格式和解码,极低稀疏率下元数据可能抵消存储收益。
小 Batch、短矩阵时索引开销尤其明显。压缩文件大小不能代替运行时峰值内存。
10. Attention Head 剪枝的边界
Head 数减少可能需要同步调整 Q/K/V/O 投影与并行切分。GQA 模型的 Query Head 与 KV Head 依赖更复杂。
删 Head 前确认模型配置和 Kernel 支持,避免导出后仍用 Mask 模拟删除。
11. 如何比较公平
固定数据、训练/恢复预算和目标硬件,对比原模型、结构化、非结构化和同参数量小模型。
报告任务/长尾/安全质量、文件、显存、加载、真实延迟和单位成本;只比 FLOPs 不完整。
对稀疏方案还要确认实际执行 Kernel 和稀疏格式转换时间;预处理成本若每次启动发生,应计入冷启动与发布成本。
12. 什么时候选哪种
边缘或通用 GPU 追求低延迟,优先删层/通道等结构化;只做传输与存储压缩,可考虑非结构化;支持稀疏 Tensor Core 时评估 N:M。
若模型服务框架无法加载变形结构,结构化收益也可能被工程成本抵消。
实际选型可先做小规模 Pareto 实验:在同一质量下比较三种方案的目标设备延迟,再把维护复杂度和跨硬件可移植性纳入决策。
13. 如何上线
量化/剪枝配置纳入模型版本,离线回归后在目标卡型灰度。观察 P99、Schema/工具成功、安全和 Fallback。
保留原 Dense 模型回滚;硬件或引擎升级后重新跑性能回归,防止稀疏路径失效。
剪枝是否成功,不由零值比例决定,而由目标硬件上的有效性能收益和关键能力保留共同决定。
14. 常见误区与追问
- 误区:50% 零权重就能加速 50%。 Dense Kernel 仍可能计算全部元素。
- 误区:结构化剪枝一定质量更差。 取决于粒度、重要性和恢复训练。
- 误区:理论 FLOPs 等于墙钟延迟。 访存、索引与 Kernel 决定实效。
- 误区:一次剪到目标最省事。 突然扰动通常更难恢复。
- 误区:所有层同一稀疏率最公平。 层敏感度不同。
- 追问:N:M 属于哪类? 半结构化稀疏,是硬件友好折中。
- 追问:如何选策略? 从目标硬件、运行时和质量门槛反推。
15. 加强记忆
- 先分粒度:单权重对整结构。
- 再看形状:非结构化不变,结构化真正缩矩阵。
- 再看硬件:Dense、稀疏 Kernel 或 N:M 支持。
- 再估重要性:幅值、梯度、Hessian 与消融。
- 再渐进剪:小步删除、恢复、重估。
- 再做公平基线:同预算、同硬件、同质量集。
- 最后看实效:延迟、显存、吞吐与长尾能力。