SuperAPI AI 工具集

model-pruning

智能体与模型

查看项目

更新于 10-21 16:18

技能介绍

用途

Model Pruning 用于压缩大语言模型(LLM),在无需重新训练的前提下减小模型体积并加速推理。典型目标包括:将模型体积减少 40%–60% 且精度损失小于 1%;利用硬件友好的稀疏性实现 2–4 倍推理加速;部署到移动端、边缘设备等受限硬件;通过一次性方法完成压缩;降低服务内存占用。

主要能力

技能覆盖以下剪枝技术:

  • Wanda:基于权重绝对值与输入激活的乘积进行重要性评估,一次性剪枝,无需重新训练。来源为 ICLR 2024(arXiv 2306.11695)。
  • SparseGPT:基于二阶(Hessian)信息的逐层重建剪枝,精度更高但计算开销更大。来源为 arXiv 2301.00774。
  • 结构化剪枝:剪除整个神经元、注意力头或层,硬件友好但精度损失相对更大。
  • N:M 稀疏(半结构化):每 M 个连续权重保留 N 个,例如 2:4 表示每 4 个保留 2 个,兼容 NVIDIA 稀疏张量核心(2:4、4:8),可实现约 2 倍加速。

技能还提供剪枝策略(渐进式幅度剪枝、逐层剪枝、迭代剪枝加微调)、稀疏度选择建议、方法选择建议以及常见陷阱提示。

使用方式

安装:

# Wanda implementation
git clone https://github.com/locuslab/wanda
cd wanda
pip install -r requirements.txt

# Optional: SparseGPT
git clone https://github.com/IST-DASLab/sparsegpt
cd sparsegpt
pip install -e .

# Dependencies
pip install torch transformers accelerate

快速开始(Wanda 一次性剪枝,50% 稀疏度,无需重新训练):加载模型与分词器,准备少量校准数据,注册前向钩子收集线性层输入激活统计,然后按 |weight| × activation 计算重要性并生成掩码应用剪枝,最后保存模型。技能中给出了完整的 wanda_prune 函数示例。

SparseGPT 使用示例:加载模型后初始化 SparseGPT(model),传入约 128 条校准数据,设置 sparsity=0.5、prunen=0、prunem=0、percdamp=0.01 进行逐层重建剪枝。

N:M 结构化剪枝示例:提供 nm_prune(weight, n=2, m=4) 函数,将权重按 M 分组后保留每组绝对值最大的 N 个,应用于所有线性层,可在 A100 稀疏张量核心上实现 2 倍加速。

适用场景

  • 需要在受限硬件(移动端、边缘设备)上部署 LLM。
  • 希望在不重新训练的情况下压缩模型。
  • 需要降低推理内存占用或提升服务效率。
  • 需要利用 NVIDIA 稀疏张量核心获得硬件加速。

限制与注意事项

  • 不同剪枝方法在 50% 稀疏度下的精度损失不同:幅度剪枝约 -2.5%,Wanda 约 -0.8%,SparseGPT 约 -0.4%,N:M (2:4) 约 -1.0%,结构化约 -3.0%。
  • 非结构化剪枝质量较高但无硬件加速;结构化剪枝有硬件加速但精度损失更大;N:M 需要特定硬件(NVIDIA)。
  • 应使用校准数据而非随机剪枝;避免一次性设置过高稀疏度(如 0.9),建议采用渐进或迭代方式。
  • 技能中给出的版本相关细节可能已过时,需对照所安装版本的官方文档确认。
  • 商业或公开发布前需检查模型与数据集许可证。
  • 涉及花费、占用共享 GPU 或云配额、触碰个人或患者数据、不可撤销的操作前应先询问。

相关技能

  • awq-quantization:激活感知权重量化,4 位 LLM 压缩,约 3 倍加速且精度损失极小。
  • quantizing-models-bitsandbytes:将 LLM 量化为 8 位或 4 位,内存减少 50%–75%,精度损失极小。
  • speculative-decoding:使用推测解码、Medusa 多头和前瞻解码加速 LLM 推理。