0%

模型剪枝

模型剪枝

一句话定位:把”不重要”的权重删掉来减小模型。面试的关键不是剪枝算法,而是能不能分清理论 FLOPs 下降实际墙钟加速——这两件事经常完全脱节。

1. 非结构化剪枝

  • 做法:按重要性(如权重绝对值大小)逐个把权重置零,不考虑位置分布。
  • 优点:压缩率高——可以剪掉很高比例的权重而精度损失很小,因为剪枝的自由度最大。
  • 致命问题:产生的稀疏是不规则的(随机散布的零)。
    • 通用硬件(GPU/CPU)的矩阵乘依赖规整的稠密计算与合并访存,遇到不规则稀疏无法有效跳过零元素;
    • 稀疏格式(CSR 等)还带来索引开销与随机访存。
    • 结论:通用硬件上难获得实际加速,常常只省了存储、墙钟时间几乎不变(除非有专用稀疏加速支持,如 NVIDIA Ampere 的 2:4 结构化稀疏)。

2. 结构化剪枝

  • 做法:按规整的结构单元整块删除——整个通道(channel)、整个注意力头(head)、整个层(layer)、或 FFN 的整组神经元。
  • 优点:剪完的模型仍是一个更小的稠密模型,可直接用标准算子跑,能真实提速(矩阵变小,访存与计算同步下降),无需特殊 kernel。
  • 代价:精度损失更大——粒度粗,整块删除难免带走有用信息,通常需要剪后微调(或蒸馏,见 4.5)来恢复精度。

3. 面试要点:理论 FLOPs vs 实际墙钟加速

必须能讲清这一对区别:

  • 理论 FLOPs 下降:把被剪权重的乘加操作直接从计数里减掉,是纸面数字。非结构化剪枝 90% 稀疏 → FLOPs 号称降 10 倍。
  • 实际墙钟加速(wall-clock speedup):取决于硬件能否真正跳过这些计算。不规则稀疏无法被有效利用 → 加速比可能接近 1;此外 LLM decode 阶段是访存密集(见 4.1),减少 FLOPs 本身也未必减少耗时。

因此评估剪枝方案必须实测端到端延迟/吞吐,并纳入 4.7 的四维评估体系,而不是拿 FLOPs 或稀疏率汇报收益。

参考:论文《The State of Sparsity in Deep Neural Networks》;综述《A Survey on Deep Neural Network Pruning》