SVD-LLM:大型语言模型压缩的奇异值分解[arXiv]
王鑫1 , 于正2 , 中卫万1 , 米章1
1俄亥俄州立大学、 2密歇根州立大学
大型语言模型 (LLM) 的进步因其巨大的规模而受到阻碍,这需要 LLM 压缩方法来进行实际部署。奇异值分解 (SVD) 为 LLM 压缩提供了一种有前景的解决方案。然而,最先进的基于 SVD 的 LLM 压缩方法有两个关键限制:截断较小的奇异值可能会导致更高的压缩损失,以及 SVD 截断后压缩权重缺乏更新。在这项工作中,我们提出了 SVD-LLM,一种新的基于 SVD 的 LLM 压缩方法,解决了现有方法的局限性。 SVD-LLM 结合了截断感知数据白化策略,以确保奇异值和压缩损失之间的直接映射。此外,SVD-LLM采用分层封闭式模型参数更新策略来补偿高压缩比下的精度下降。我们在四个不同尺度的来自三个不同 LLM 系列的总共 10 个数据集和 8 个模型上评估 SVD-LLM。我们的结果证明了 SVD-LLM 相对于最先进技术的优越性,特别是在高模型压缩比下。
请保持 Transformers 包的版本完全等于 4.35.2,因为 LLM 的 svd 压缩版本的模型结构略有变化(在component/.
文件夹中)。
pip install -r requirements.txt
bash compress_llama.sh
该脚本将以 20% 的压缩率压缩 LLaMA-7B 模型,并自动运行评估代码,包括压缩模型的困惑度和效率。
我们使用两种不同的流程来实现 SVD-LLM:
在低压缩比(推荐比<= 0.3)下,我们首先运行LLM的数据白化,并保存权重和白化信息。
python SVDLLM.py
--step 1
--ratio COMPRESSION_RATIO
--model HUGGINGFACE_MODEL_REPO
--whitening_nsamples WHITENING_SAMPLE_NUMBER
--dataset WHITENING_DATASET
--seed SAMPLING_SEED
--model_seq_len MODEL_SEQ_LEN
--save_path WHITENING_INFO_SAVING_PATH
在高压缩比(推荐比> 0.3)下,我们可以进一步应用逐层封闭式更新来更新第一个管道之后的权重矩阵,以提高精度。
python SVDLLM.py
--step 2
--ratio COMPRESSION_RATIO
--model HUGGINGFACE_MODEL_REPO
--whitening_nsamples WHITENING_SAMPLE_NUMBER
--updating_nsamples UPDATING_SAMPLE_NUMBER
--dataset WHITENING_DATASET
--seed SAMPLING_SEED
--model_seq_len MODEL_SEQ_LEN
--save_path WHITENING_INFO_SAVING_PATH
我们还提供了仅在 SVD-LLM 中运行分层闭合形式更新的实现。虽然这个版本不如上面两个版本的 SVD-LLM,但仍然比现有的基线要好。
python SVDLLM.py
--step 3
--ratio COMPRESSION_RATIO
--model HUGGINGFACE_MODEL_REPO
--updating_nsamples UPDATING_SAMPLE_NUMBER
--dataset WHITENING_DATASET
--seed SAMPLING_SEED
--model_seq_len MODEL_SEQ_LEN
--save_path WHITENING_INFO_SAVING_PATH
上述两个管道中任一管道的压缩模型也可以与 LoRA 微调相结合,以获得更好的精度。我们借用了LLM-Pruner的LoRA微调代码,配置相同。
python LoRA.py
--prune_model COMPRESSED_MODEL_PATH
--data_path yahma/alpaca-cleaned
--output_dir LORA_OUTPUT_PATH
--lora_r 8
--num_epochs 2
--learning_rate 1e-4
--batch_size 64
SVD-LLM 还可以与量化方法集成以实现更好的压缩。下面是如何将 SVD-LLM(20% 压缩比)与 GPTQ-4bit 集成来压缩 LLaMA-7B 的示例
bash svdllm_gptq.sh
python SVDLLM.py
--step 4
--model_path COMPRESSD_MODEL_SAVING_PATH
我们使用与 SparseGPT 中相同的 c4 数据集。由于原下载链接无效,请直接从此链接下载,并将两个json文件添加到utils/.
文件夹。
python SVDLLM.py
--step 5
--model_path COMPRESSD_MODEL_SAVING_PATH
如果您觉得这篇文章有用,请引用
@article{wang2024svd,
title={Svd-llm: Truncation-aware singular value decomposition for large language model compression},
author={Wang, Xin and Zheng, Yu and Wan, Zhongwei and Zhang, Mi},
journal={arXiv preprint arXiv:2403.07378},
year={2024}
}