
LLM-Pruner是一个用于结构化剪枝大型语言模型(LLM)的开源框架,由新加坡国立大学的研究人员开发。它的主要目标是在保持模型性能的同时,显著减小模型规模,提高模型的推理效率。
LLM-Pruner的主要特点包括:
目前LLM-Pruner支持的模型包括Llama 3/3.1、Llama 2、LLaMA、BLOOM、Vicuna、Baichuan、TinyLlama等。
要开始使用LLM-Pruner,只需按以下步骤操作:
pip install -r requirement.txt
bash script/llama_prune.sh
这个脚本会将LLaMA-7B模型压缩约20%的参数。所有预训练模型和数据集都会自动下载。
使用LLM-Pruner压缩模型主要包括三个阶段:
以LLaMA/Llama-2为例,使用以下命令进行约20%参数的剪枝:
python hf_prune.py --pruning_ratio 0.25 \ --block_wise \ --block_mlp_layer_start 4 --block_mlp_layer_end 30 \ --block_attention_layer_start 4 --block_attention_layer_end 30 \ --pruner_type taylor \ --test_after_train \ --device cpu --eval_device cuda \ --save_ckpt_log_name llama_prune
使用Alpaca数据集进行后训练:
CUDA_VISIBLE_DEVICES=X python post_training.py --prune_model prune_log/PATH_TO_PRUNE_MODEL/pytorch_model.bin \ --data_path yahma/alpaca-cleaned \ --lora_r 8 \ --num_epochs 2 \ --learning_rate 1e-4 \ --batch_size 64 \ --output_dir tune_log/PATH_TO_SAVE_TUNE_MODEL \ --wandb_project llama_tune
使用lm-evaluation-harness进行评估:
export PYTHONPATH='.' python lm-evaluation-harness/main.py --model hf-causal-experimental \ --model_args checkpoint=PATH_TO_PRUNE_MODEL,peft=PATH_TO_SAVE_TUNE_MODEL,config_pretrained=PATH_OR_NAME_TO_BASE_MODEL \ --tasks openbookqa,arc_easy,winogrande,hellaswag,arc_challenge,piqa,boolq \ --device cuda:0 --no_cache \ --output_path PATH_TO_SAVE_EVALUATION_LOG
LLM-Pruner为压缩大型语言模型提供了一个简单高效的开源解决方案。欢迎感兴趣的读者尝试使用,为项目贡献代码,或在自己的研究中引用相关工作。如有任何问题,也可以通过GitHub Issues与作者团队交流。