模型剪枝:削减参数而不崩精度
大语言模型的参数规模与推理成本几乎同步增长。把一个 70B 模型塞进单卡、把延迟压到可交互范围,往往不是”换更大机器”就能解决。模型剪枝(Pruning)的目标很直接:移除模型中”贡献小”的权重或结构,让网络更稀疏、更小,同时尽量保留精度。本文把剪枝的核心分类、挑选待剪参数的方法、剪后重训练,以及它与量化、蒸馏的分工讲清楚。
为什么剪枝:更小、更快、更省
剪枝的收益主要体现在三方面,这些收益在边缘设备和批量推理场景尤为明显:
- 体积更小:权重置零后可用稀疏格式存储,模型文件显著缩小,便于分发与部署。
- 推理更快:稀疏矩阵乘法在支持硬件上跳过零元素,降低计算量,提升吞吐。
- 显存更省:激活与缓存占用随参数减少而下降,同等显存可跑更大批或更长上下文。
需要明确:剪枝不是免费午餐。稀疏度越高,精度损失通常越大,并且需要一次重训练来恢复表现。收益能否真正落地,取决于硬件与推理框架是否支持对应的稀疏模式(见末节)。
非结构化剪枝 vs 结构化剪枝
两者最大的区别在于”剪的单位”:
- 非结构化(细粒度)剪枝:直接把单个权重置零,可达成极高稀疏度(如 90% 权重为零),但得到的是不规则稀疏矩阵,通用硬件难以加速,常需专用库或编译优化。
- 结构化剪枝:按”整行/整列/整个注意力头/整个通道”为单位删除,得到的仍是稠密的小模型,普通硬件和现成框架即可加速,代价是同等稀疏度下精度损失更大。
经验法则:追求极致压缩比且能改推理栈,用非结构化;追求开箱即用的加速,用结构化。两者也可组合:先结构化粗剪、再非结构化精修。
怎么挑要剪的参数:幅度与重要性度量
最常用、最廉价的是幅度剪枝(Magnitude Pruning):权重的绝对值越小,越可能”不重要”,直接按阈值或比例置零。它实现简单、效果稳健,是多数剪枝流程的默认起点(已核验)。稀疏度定义如下:
稀疏度 s = 1 - (保留的非零权重数 / 总权重数)
更精细的重要性度量还包括:
- 基于梯度的度量(如 Taylor 展开近似),同时考虑权重大小与对损失的影响。
- 基于激活的重要性(如 BN 缩放因子、激活响应),用于结构化剪枝判断整通道价值。
- 一次剪枝(One-shot)与迭代剪枝(Iterative):前者一次性剪到目标稀疏度,后者”剪一点、训一点”循环进行,通常恢复更好。
一个常见误区是”稀疏度越高越好”。实践中常存在拐点:稀疏度超过某个阈值后,重训练也难以挽回精度,这个阈值因模型与任务而异(待核实,需按具体模型做扫描实验)。
剪枝之后:微调与”彩票假说”
剪枝会改变模型已学到的表示,因此剪后必须做一轮微调(重训练)来恢复精度,这几乎是标准流程。稀疏度越高,需要的微调步数与数据越多。
一个值得了解的理论视角是”彩票假说”(Lottery Ticket Hypothesis,Frankle & Carbin 2019):一个随机初始化的稠密网络里,存在一个子网络(中奖彩票),如果从原始初始化单独训练,能达到与原网络相当的精度(已核验)。这暗示剪枝得到的稀疏结构本身可能携带关键信息,剪枝加恰当重训不只是”修补”,也可能找到更高效的子网络。工程上更实用的做法是”剪枝加少量微调”,而非真的从头重训子网络。
剪枝、量化、蒸馏的关系与硬件注意
三者都属于模型压缩,但作用层面不同,常组合使用:
- 剪枝:减少”参数数量/连接”,产出稀疏或更小结构。
- 量化:降低”每个参数的位数”(如 fp16 降到 int8/int4),不改参数个数。
- 蒸馏:用大模型教小模型,改变的是”训练数据来源”,产出仍是稠密小模型。
硬件注意点:
- NVIDIA 从 A100 起在稀疏张量核心上支持 2:4 结构化稀疏(每 4 个元素里至少 2 个为零),可获近似 2 倍矩阵乘加速,但要求稀疏模式严格对齐(已核验)。
- 非结构化稀疏在通用 CPU/GPU 上往往无法自动加速,需要推理框架(如专门稀疏内核)或把稀疏转回结构化才能真正提速。
- 部署前务必在目标硬件和推理引擎(如 TensorRT、llama.cpp、vLLM)上实测端到端延迟,稀疏格式的解析开销可能抵消理论收益。
小结
- 剪枝通过移除低贡献权重或结构,换取更小体积、更快推理、更省显存,但需重训练补偿精度。
- 非结构化剪枝压缩比高但难加速,结构化剪枝开箱即用但损失更大,可按需组合。
- 幅度剪枝简单稳健,是默认起点;梯度/激活类度量更精细但成本更高。
- 剪后微调是标准动作,“彩票假说”提供了剪枝有效性的理论视角(已核验)。
- 剪枝与量化、蒸馏互补,实际加速依赖硬件对稀疏模式的支持,须端到端实测。
参考与延伸阅读
- Han S., Pool J., Tran J., Dally W. Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding. 2015. https://arxiv.org/abs/1509.05474
- Frankle J., Carbin M. The Lottery Ticket Hypothesis: Finding Sparse, Trainable Subnetworks. 2019. https://arxiv.org/abs/1803.03635
- Zhu M., Gupta S. To Prune, or Not to Prune: Exploring the Efficacy of Pruning for Model Compression. 2017. https://arxiv.org/abs/1710.01878
- NVIDIA. NVIDIA A100 Tensor Core GPU Architecture: Sparsity. https://www.nvidia.com/content/PDF/nvidia-ampere-ga-100-architecture-whitepaper.pdf
- Gholami A., Kim S., Dong Z., et al. A Survey of Quantization Methods for Efficient Neural Network Inference. 2021. https://arxiv.org/abs/2103.13630