SVD-LLM: Decomposição de valores singulares para compactação de modelos de linguagem grande [arXiv]
Xin Wang 1 , Yu Zheng 2 , Zhongwei Wan 1 , Mi Zhang 1
1 Universidade Estadual de Ohio, 2 Universidade Estadual de Michigan
Os avanços nos Grandes Modelos de Linguagem (LLMs) foram prejudicados por seus tamanhos substanciais, que necessitam de métodos de compressão LLM para implantação prática. A decomposição de valores singulares (SVD) oferece uma solução promissora para compactação LLM. No entanto, os métodos de compactação LLM baseados em SVD de última geração têm duas limitações principais: truncar valores singulares menores pode levar a maior perda de compactação e à falta de atualização no peso compactado após o truncamento de SVD. Neste trabalho, propomos SVD-LLM, um novo método de compressão LLM baseado em SVD que aborda as limitações dos métodos existentes. O SVD-LLM incorpora uma estratégia de branqueamento de dados com reconhecimento de truncamento para garantir um mapeamento direto entre valores singulares e perda de compactação. Além disso, o SVD-LLM adota uma estratégia de atualização de parâmetros de modelo de formato fechado em camadas para compensar a degradação da precisão sob altas taxas de compressão. Avaliamos o SVD-LLM em um total de 10 conjuntos de dados e oito modelos de três famílias diferentes de LLM em quatro escalas diferentes. Nossos resultados demonstram a superioridade do SVD-LLM sobre o estado da arte, especialmente em altas taxas de compressão de modelos.
Por favor, mantenha a versão do pacote transformers exatamente igual a 4.35.2, pois a versão compactada em svd do LLM tem uma ligeira mudança na estrutura do modelo (na pasta component/.
).
pip install -r requirements.txt
bash compress_llama.sh
Este script compactaria o modelo LLaMA-7B com uma taxa de compactação de 20% e executaria automaticamente o código de avaliação, incluindo a perplexidade e a eficiência do modelo compactado.
Implementamos SVD-LLM com dois pipelines diferentes:
Sob a baixa taxa de compressão (taxa recomendada <= 0,3), primeiro executamos o branqueamento de dados do LLM e salvamos o peso junto com as informações de branqueamento.
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
Sob a alta taxa de compactação (taxa recomendada> 0,3), podemos aplicar ainda mais a atualização de formato fechado em camadas para atualizar a matriz de peso após o primeiro pipeline para melhorar a precisão.
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
Também fornecemos a implementação para executar atualização de formato fechado em camadas apenas em SVD-LLM. Embora esta versão não seja tão boa quanto as duas versões acima do SVD-LLM, ainda é melhor do que as linhas 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
O modelo compactado de qualquer um dos dois pipelines acima também pode ser combinado com o ajuste fino do LoRA para obter uma melhor precisão. Pegamos emprestado o código de ajuste fino LoRA do LLM-Pruner com a mesma configuração.
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
O SVD-LLM também pode ser integrado a métodos de quantização para obter uma melhor compactação. Aqui está o exemplo de como integrar SVD-LLM (taxa de compressão de 20%) com GPTQ-4bit para compactar LLaMA-7B
bash svdllm_gptq.sh
python SVDLLM.py
--step 4
--model_path COMPRESSD_MODEL_SAVING_PATH
Usamos o mesmo conjunto de dados c4 do SparseGPT. Como o link de download original é inválido, baixe-o diretamente deste link e adicione os dois arquivos json em utils/.
pasta.
python SVDLLM.py
--step 5
--model_path COMPRESSD_MODEL_SAVING_PATH
Se você achar este trabalho útil, 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}
}