SVD-LLM: Dekomposisi Nilai Singular untuk Kompresi Model Bahasa Besar [arXiv]
Xin Wang 1 , Yu Zheng 2 , Zhongwei Wan 1 , Mi Zhang 1
1 Universitas Negeri Ohio, 2 Universitas Negeri Michigan
Kemajuan dalam Model Bahasa Besar (LLM) terhambat oleh ukurannya yang besar, sehingga memerlukan metode kompresi LLM untuk penerapan praktis. Dekomposisi Nilai Singular (SVD) menawarkan solusi yang menjanjikan untuk kompresi LLM. Namun, metode kompresi LLM berbasis SVD yang canggih memiliki dua keterbatasan utama: memotong nilai tunggal yang lebih kecil dapat menyebabkan kehilangan kompresi yang lebih tinggi, dan kurangnya pembaruan pada bobot kompresi setelah pemotongan SVD. Dalam karya ini, kami mengusulkan SVD-LLM, metode kompresi LLM berbasis SVD baru yang mengatasi keterbatasan metode yang ada. SVD-LLM menggabungkan strategi pemutihan data yang peka terhadap pemotongan untuk memastikan pemetaan langsung antara nilai tunggal dan kerugian kompresi. Selain itu, SVD-LLM mengadopsi strategi pembaruan parameter model bentuk tertutup berlapis-lapis untuk mengkompensasi penurunan akurasi pada rasio kompresi tinggi. Kami mengevaluasi SVD-LLM pada total 10 kumpulan data dan delapan model dari tiga kelompok LLM berbeda pada empat skala berbeda. Hasil kami menunjukkan keunggulan SVD-LLM dibandingkan yang canggih, terutama pada rasio kompresi model yang tinggi.
Harap pertahankan versi paket transformator sama persis dengan 4.35.2 karena versi LLM terkompresi svd memiliki sedikit perubahan struktur model (dalam folder component/.
).
pip install -r requirements.txt
bash compress_llama.sh
Skrip ini akan mengompresi model LLaMA-7B di bawah rasio kompresi 20% dan secara otomatis menjalankan kode evaluasi, termasuk kompleksitas dan efisiensi model terkompresi.
Kami mengimplementasikan SVD-LLM dengan dua jalur pipa berbeda:
Di bawah rasio kompresi rendah (rasio yang disarankan <= 0,3), pertama-tama kami menjalankan pemutihan data LLM dan menyimpan bobot bersama dengan informasi pemutihan.
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
Di bawah rasio kompresi tinggi (rasio yang disarankan > 0,3), kita selanjutnya dapat menerapkan pembaruan bentuk tertutup berdasarkan lapisan untuk memperbarui matriks bobot setelah pipeline pertama guna meningkatkan akurasi.
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
Kami juga menyediakan implementasi untuk menjalankan pembaruan bentuk tertutup berdasarkan lapisan hanya di SVD-LLM. Walaupun versi ini tidak sebaik kedua versi SVD-LLM di atas, namun masih lebih baik dari baseline yang ada.
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
Model terkompresi dari salah satu dari dua jalur pipa di atas juga dapat dikombinasikan dengan penyesuaian LoRA untuk mendapatkan akurasi yang lebih baik. Kami meminjam kode fine-tuning LoRA dari LLM-Pruner dengan konfigurasi yang sama.
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 juga dapat diintegrasikan dengan metode kuantisasi untuk mencapai kompresi yang lebih baik. Berikut contoh cara mengintegrasikan SVD-LLM (rasio kompresi 20%) dengan GPTQ-4bit untuk mengompresi LLaMA-7B
bash svdllm_gptq.sh
python SVDLLM.py
--step 4
--model_path COMPRESSD_MODEL_SAVING_PATH
Kami menggunakan dataset c4 yang sama seperti di SparseGPT. Karena tautan dowload asli tidak valid, silakan langsung unduh dari tautan ini dan tambahkan dua file json di bawah file utils/.
map.
python SVDLLM.py
--step 5
--model_path COMPRESSD_MODEL_SAVING_PATH
Jika Anda merasa karya ini bermanfaat, silakan kutip
@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}
}