SVD-LLM: разложение по сингулярным значениям для сжатия больших языковых моделей [arXiv]
Синь Ван 1 , Ю Чжэн 2 , Чжунвэй Ван 1 , Ми Чжан 1
1 Университет штата Огайо, 2 Университет штата Мичиган
Развитие моделей больших языков (LLM) сдерживается их значительными размерами, что требует применения методов сжатия LLM для практического применения. Разложение по сингулярным значениям (SVD) предлагает многообещающее решение для сжатия LLM. Однако современные методы сжатия LLM на основе SVD имеют два ключевых ограничения: усечение меньших сингулярных значений может привести к более высоким потерям при сжатии, а также к отсутствию обновления сжатого веса после усечения SVD. В этой работе мы предлагаем SVD-LLM, новый метод сжатия LLM на основе SVD, который устраняет ограничения существующих методов. SVD-LLM включает в себя стратегию отбеливания данных с учетом усечения, чтобы обеспечить прямое сопоставление между сингулярными значениями и потерями при сжатии. Более того, SVD-LLM использует стратегию послойного обновления параметров модели в закрытой форме, чтобы компенсировать ухудшение точности при высоких степенях сжатия. Мы оцениваем SVD-LLM в общей сложности на 10 наборах данных и восьми моделях из трех разных семейств LLM в четырех разных масштабах. Наши результаты демонстрируют превосходство SVD-LLM над современными моделями, особенно при высоких степенях сжатия модели.
Пожалуйста, оставьте версию пакета преобразователей точно равной 4.35.2, поскольку версия LLM, сжатая с помощью svd, имеет небольшое изменение структуры модели (в папке component/.
).
pip install -r requirements.txt
bash compress_llama.sh
Этот сценарий сжимает модель LLaMA-7B до степени сжатия 20% и автоматически запускает оценочный код, включая как недоумение, так и эффективность сжатой модели.
Мы реализуем 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. Хотя эта версия и не так хороша, как две вышеописанные версии СВД-ЛЛМ, она все же лучше существующих базовых моделей.
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 для повышения точности. Код тонкой настройки LoRA мы позаимствовали у LLM-Pruner с той же конфигурацией.
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
Мы используем тот же набор данных c4, что и в SparseGPT. Поскольку исходная ссылка для загрузки недействительна, загрузите ее напрямую по этой ссылке и добавьте два файла 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}
}