Model Pruning 是一个用于压缩大语言模型(LLM)并加速推理的技能,核心是介绍 Wanda、SparseGPT 等剪枝技术,以及结构化剪枝和 N:M 稀疏。
用途 该技能适用于以下场景:将模型体积减少 40-60% 且精度损失小于 1%;通过硬件友好的稀疏性加速推理(2-4 倍加速);部署到受限硬件(移动端、边缘设备);使用一次性方法在不重新训练的情况下压缩模型;通过降低内存占用实现高效服务。
主要技术 资料列出的关键技术包括:Wanda(权重 × 激活值)、SparseGPT(二阶)、结构化剪枝、N:M 稀疏。相关论文为 Wanda ICLR 2024(arXiv 2306.11695)和 SparseGPT(arXiv 2301.00774)。
安装 资料提供了以下安装命令: Wanda 实现: git clone https://github.com/locuslab/wanda cd wanda pip install -r requirements.txt 可选 SparseGPT: git clone https://github.com/IST-DASLab/sparsegpt cd sparsegpt pip install -e . 依赖: pip install torch transformers accelerate
使用方式 资料给出了 Wanda 剪枝的快速开始示例:加载模型(如 meta-llama/Llama-2-7b-hf),准备少量校准数据,通过前向钩子收集激活统计,然后按 |weight| × activation 计算重要性并生成掩码进行剪枝,最后保存模型。示例中 sparsity=0.5 表示 50% 稀疏度,一次性完成,无需重新训练。 SparseGPT 示例:加载模型后初始化 SparseGPT,使用约 128 个校准样本,调用 prune 方法,可设置 sparsity、prunen/prunem(非结构化或 N:M 结构化)以及 percdamp(Hessian 逆的阻尼)。资料称其在 50% 稀疏度下接近无损。 N:M 结构化剪枝示例:nm_prune 函数保留每 M 个连续权重中的 N 个(如 2:4 表示每 4 个保留 2 个),兼容 NVIDIA 稀疏张量核心(2:4、4:8)。资料称 2:4 稀疏在 A100 上可实现 2 倍加速。
核心概念 剪枝准则包括:幅度剪枝(基线,按权重绝对值)、Wanda(|weight| × input_activation,考虑使用情况)、SparseGPT(使用 Hessian 二阶信息,更准确但计算开销更大)。 结构化与非结构化:非结构化剪枝针对单个权重,质量更高但无硬件加速;结构化剪枝针对整个神经元、头或层,质量较低但有硬件加速;半结构化 N:M 兼顾两者,50% 稀疏(2:4)在 NVIDIA GPU 上可获 2 倍加速且精度损失最小。
剪枝策略 资料介绍了三种策略:渐进式幅度剪枝(训练中逐步提高稀疏度)、逐层剪枝(不同层使用不同稀疏度,早期层剪枝更少)、迭代剪枝 + 微调(多次剪枝并在其间微调,高稀疏度下精度优于一次性剪枝)。
生产部署与评估 资料提供了一个完整的剪枝流水线示例,包括加载模型、加载校准数据(如 wikitext)、应用 Wanda 或 SparseGPT、可选微调恢复精度、保存模型。评估部分使用 lm_eval 对原始模型与剪枝模型在 arc_easy、hellaswag、winogrande 等任务上对比。资料称 50% 稀疏度下典型结果:Wanda 精度损失 <1%,SparseGPT <0.5%,幅度剪枝 2-3%。
最佳实践 稀疏度选择:30% 较保守(<0.5% 损失),50% 为推荐平衡(约 1% 损失),70% 较激进(2-5% 损失),90% 极端(显著退化)。方法选择:无重训预算用 Wanda(更快),追求最佳质量用 SparseGPT,需要硬件加速用 N:M 结构化。常见陷阱:不使用校准数据、一次性设置过高稀疏度。
性能对比 资料给出 50% 稀疏度下 LLaMA-7B 的对比:幅度剪枝精度损失 -2.5%、速度 1.0×、内存 -50%、无需重训;Wanda -0.8%、1.0×、-50%、无需重训;SparseGPT -0.4%、1.0×、-50%、无需重训;N:M (2:4) -1.0%、2.0×、-50%、无需重训;结构化 -3.0%、2.0×、-50%、无需重训。
限制 资料未提供关于具体收费、价格、平台支持范围或商业使用限制的信息。部分性能数据(如加速倍数、精度损失)来自资料引用的论文与示例,实际效果可能因模型和硬件而异。