SVD-LLM: Descomposición de valores singulares para la compresión de modelos de lenguaje grandes [arXiv]
Xin Wang 1 , Yu Zheng 2 , Zhongwei Wan 1 , Mi Zhang 1
1 Universidad Estatal de Ohio, 2 Universidad Estatal de Michigan
Los avances en los modelos de lenguajes grandes (LLM) se han visto obstaculizados por sus tamaños sustanciales, que requieren métodos de compresión LLM para su implementación práctica. La descomposición de valores singulares (SVD) ofrece una solución prometedora para la compresión LLM. Sin embargo, los métodos de compresión LLM de última generación basados en SVD tienen dos limitaciones clave: truncar valores singulares más pequeños puede provocar una mayor pérdida de compresión y la falta de actualización del peso comprimido después del truncamiento de SVD. En este trabajo, proponemos SVD-LLM, un nuevo método de compresión LLM basado en SVD que aborda las limitaciones de los métodos existentes. SVD-LLM incorpora una estrategia de blanqueamiento de datos consciente del truncamiento para garantizar un mapeo directo entre valores singulares y pérdida de compresión. Además, SVD-LLM adopta una estrategia de actualización de parámetros del modelo de forma cerrada por capas para compensar la degradación de la precisión en altas relaciones de compresión. Evaluamos SVD-LLM en un total de 10 conjuntos de datos y ocho modelos de tres familias diferentes de LLM en cuatro escalas diferentes. Nuestros resultados demuestran la superioridad de SVD-LLM sobre los de última generación, especialmente en relaciones de compresión de modelo altas.
Mantenga la versión del paquete de transformadores exactamente igual a 4.35.2 ya que la versión comprimida con svd de LLM tiene un ligero cambio en la estructura del modelo (en la carpeta component/.
).
pip install -r requirements.txt
bash compress_llama.sh
Este script comprimiría el modelo LLaMA-7B con una relación de compresión del 20% y ejecutaría automáticamente el código de evaluación, incluyendo tanto la perplejidad como la eficiencia del modelo comprimido.
Implementamos SVD-LLM con dos canales diferentes:
Con una relación de compresión baja (relación recomendada <= 0,3), primero ejecutamos el blanqueamiento de datos del LLM y guardamos el peso junto con la información de blanqueamiento.
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
Con una relación de compresión alta (relación recomendada> 0,3), podemos aplicar aún más una actualización de formulario cerrado por capas para actualizar la matriz de peso después de la primera canalización para mejorar la precisión.
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
También proporcionamos la implementación para ejecutar actualizaciones de formulario cerrado por capas solo en SVD-LLM. Aunque esta versión no es tan buena como las dos versiones anteriores de SVD-LLM, sigue siendo mejor que las líneas de base existentes.
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
El modelo comprimido de cualquiera de los dos canales anteriores también se puede combinar con el ajuste fino de LoRA para obtener una mayor precisión. Tomamos prestado el código de ajuste fino de LoRA de LLM-Pruner con la misma configuración.
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 también se puede integrar con métodos de cuantificación para lograr una mejor compresión. Aquí está el ejemplo de cómo integrar SVD-LLM (relación de compresión del 20%) con GPTQ-4bit para comprimir LLaMA-7B
bash svdllm_gptq.sh
python SVDLLM.py
--step 4
--model_path COMPRESSD_MODEL_SAVING_PATH
Usamos el mismo conjunto de datos c4 que en SparseGPT. Dado que el enlace de descarga original no es válido, descárguelo directamente desde este enlace y agregue los dos archivos json en utils/.
carpeta.
python SVDLLM.py
--step 5
--model_path COMPRESSD_MODEL_SAVING_PATH
Si encuentra útil este trabajo, cite
@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}
}