SVD-LLM: Singulärwertzerlegung für die Komprimierung großer Sprachmodelle [arXiv]
Xin Wang 1 , Yu Zheng 2 , Zhongwei Wan 1 , Mi Zhang 1
1 Die Ohio State University, 2 Michigan State University
Die Fortschritte bei Large Language Models (LLMs) wurden durch ihre beträchtliche Größe behindert, die für den praktischen Einsatz LLM-Komprimierungsmethoden erfordert. Singular Value Decomposition (SVD) bietet eine vielversprechende Lösung für die LLM-Komprimierung. Moderne SVD-basierte LLM-Komprimierungsmethoden weisen jedoch zwei wesentliche Einschränkungen auf: Das Abschneiden kleinerer Singulärwerte kann zu einem höheren Komprimierungsverlust führen und dazu, dass das komprimierte Gewicht nach der SVD-Abschneidung nicht aktualisiert wird. In dieser Arbeit schlagen wir SVD-LLM vor, eine neue SVD-basierte LLM-Komprimierungsmethode, die die Einschränkungen bestehender Methoden beseitigt. SVD-LLM beinhaltet eine abschneidungsbewusste Datenaufhellungsstrategie, um eine direkte Zuordnung zwischen Einzelwerten und Komprimierungsverlust sicherzustellen. Darüber hinaus verwendet SVD-LLM eine schichtweise geschlossene Modellparameter-Aktualisierungsstrategie, um die Genauigkeitsverschlechterung bei hohen Komprimierungsverhältnissen auszugleichen. Wir bewerten SVD-LLM anhand von insgesamt 10 Datensätzen und acht Modellen aus drei verschiedenen LLM-Familien in vier verschiedenen Maßstäben. Unsere Ergebnisse zeigen die Überlegenheit von SVD-LLM gegenüber modernsten Modellen, insbesondere bei hohen Modellkomprimierungsverhältnissen.
Bitte belassen Sie die Version des Transformers-Pakets genau bei 4.35.2, da die svd-komprimierte Version von LLM eine leichte Änderung der Modellstruktur aufweist (im Ordner component/.
).
pip install -r requirements.txt
bash compress_llama.sh
Dieses Skript würde das LLaMA-7B-Modell mit einem Komprimierungsverhältnis von 20 % komprimieren und den Evaluierungscode automatisch ausführen, einschließlich sowohl der Verwirrung als auch der Effizienz des komprimierten Modells.
Wir implementieren SVD-LLM mit zwei verschiedenen Pipelines:
Unter dem niedrigen Komprimierungsverhältnis (empfohlenes Verhältnis <= 0,3) führen wir zunächst die Datenaufhellung des LLM durch und speichern das Gewicht zusammen mit den Aufhellungsinformationen.
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
Unter dem hohen Komprimierungsverhältnis (empfohlenes Verhältnis > 0,3) können wir weiterhin eine schichtweise Aktualisierung in geschlossener Form anwenden, um die Gewichtsmatrix nach der ersten Pipeline zu aktualisieren und die Genauigkeit zu verbessern.
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
Wir bieten auch die Implementierung zur Ausführung einer schichtweisen Aktualisierung in geschlossener Form nur in SVD-LLM an. Obwohl diese Version nicht so gut ist wie die beiden oben genannten Versionen von SVD-LLM, ist sie dennoch besser als die vorhandenen Basisversionen.
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
Das komprimierte Modell aus einer der beiden oben genannten Pipelines kann auch mit der LoRA-Feinabstimmung kombiniert werden, um eine bessere Genauigkeit zu erzielen. Wir haben den LoRA-Feinabstimmungscode von LLM-Pruner mit derselben Konfiguration ausgeliehen.
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 kann auch mit Quantisierungsverfahren integriert werden, um eine bessere Komprimierung zu erreichen. Hier ist das Beispiel für die Integration von SVD-LLM (20 % Komprimierungsverhältnis) mit GPTQ-4bit, um LLaMA-7B zu komprimieren
bash svdllm_gptq.sh
python SVDLLM.py
--step 4
--model_path COMPRESSD_MODEL_SAVING_PATH
Wir verwenden denselben c4-Datensatz wie in SparseGPT. Da der ursprüngliche Download-Link ungültig ist, laden Sie ihn bitte direkt über diesen Link herunter und fügen Sie die beiden JSON-Dateien unter utils/.
Ordner.
python SVDLLM.py
--step 5
--model_path COMPRESSD_MODEL_SAVING_PATH
Wenn Sie diese Arbeit nützlich finden, zitieren Sie sie bitte
@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}
}