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}
}