更新时间:2025-03-03 GMT+08:00
分享

剪枝

什么是剪枝

剪枝是一种大模型压缩技术的关键技术,旨在保持推理精度的基础上,减少模型的复杂度和计算需求,以便大模型推理加速。

剪枝的一般步骤是:1、对原始模型调用不同算法进行剪枝,并保存剪枝后的模型;2、使用剪枝后的模型进行推理部署。

常用的剪枝技术包括:结构化稀疏剪枝、半结构化稀疏剪枝、非结构化稀疏剪枝。

FASP剪枝

FASP剪枝是一种结构化稀疏剪枝方法,能有效降低模型显存以及需要部署的资源依赖,减小推理过程中的计算量,降低增量推理时延,提升吞吐。

FASP (Fast and Accurate Structured Pruning) 一种针对LLM进行结构化剪枝的算法,可以减少大模型对于内存和计算资源的需求,提升推理速度,同时其具备比较高的剪枝速度。使用FASP对大模型进行稀疏化剪枝,可以在几乎不影响推理精度情况下,可以有效提升推理性能(吞吐等)。

本文主要应用FASP对LLM进行剪枝压缩。

约束限制

FASP剪枝当前仅支持Llama系列、Llama2系列、Llama3系列、Qwen2系列的NLP模型。

安装AscendModelNano

AscendModelNano是FASP剪枝工具,适配代码存放在代码包AscendCloud-LLM-x.x.x.zip的llm_tools/ModelNano目录下。

AscendModelNano工具需要安装,执行命令如下。

cd ModelNano  # 进入ModelNano工具目录 
bash build.sh AscendModelNano   # 编译 
pip install dist/AscendModelNano-0.1.0-py3-none-any.whl  #安装

模型剪枝

可以在Huggingface开源社区获取需剪枝的模型权重或者获得业务上已预训练好的模型权重,通过AscendModelNano工具进行FASP剪枝。
CUDA_VISIBLE_DEVICES=0 python3 -m model_nano.prune_llama \  
 --model $MODEL_FILE \  
 --dataset $DATASET \  
 --nsamples $SAMPLE \ 
 --sparsity $SPARSITY \ 
 --save $SAVE_DIR \  
 --seed 0 \  
 --memory_efficient \ 
 --eval

参数介绍:

  • model:必选,要进行压缩的原始模型地址
  • save:必选,压缩后模型的保存的地址
  • dataset:可选,压缩模型所用的校准数据,可选范围["wikitext2","c4"],默认wikitext2。
  • nsamples:可选,压缩模型所用的校准数据样本数量,默认128。
  • seed:可选,随机数种子。
  • sparsity:可选,剪枝稀疏度,稀疏度越大剪枝压缩率越高,默认0.1。
  • memory_efficient:可选,优化剪枝过程中的显存使用,推荐传入。
  • eval:可选,是否进行压缩后模型的PPL评估。如果输入此参数,在wikitext2以及c4数据上进行PPL计算。

具体的代码示例如下。

GPU=0
SPARSITY=0.1
MODEL="llama-3-8b"
SAMPLE=128
DATASET="wikitext2" 
MODEL_FILE="/mnt/models/$MODEL" SAVE_DIR="/mnt/save_models/${MODEL}_${SPARSITY}_${DATASET}_n${SAMPLE}"  
CUDA_VISIBLE_DEVICES=$GPU 
python3 -m model_nano.prune_llama \
  --model $MODEL_FILE \
  --dataset $DATASET \
  --nsamples $SAMPLE \
  --sparsity $SPARSITY \
  --save $SAVE_DIR \
  --seed 0 \
  --memory_efficient \
  --eval

启动剪枝模型推理服务

使用剪枝特性时,启动推理服务时的model_path请使用剪枝处理后的模型。具体参考启动推理服务

相关文档