剪枝
什么是剪枝
剪枝是一种大模型压缩技术的关键技术,旨在保持推理精度的基础上,减少模型的复杂度和计算需求,以便大模型推理加速。
剪枝的一般步骤是: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 #安装
模型剪枝
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请使用剪枝处理后的模型。具体参考启动推理服务。