SVD-LLM: تحليل القيمة المفردة لضغط نماذج اللغة الكبيرة [arXiv]
شين وانغ 1 ، يو تشنغ 2 ، تشونغوي وان 1 ، مي تشانغ 1
1 جامعة ولاية أوهايو، 2 جامعة ولاية ميشيغان
تم إعاقة التقدم في نماذج اللغات الكبيرة (LLMs) بسبب أحجامها الكبيرة، مما يستلزم أساليب ضغط LLM للنشر العملي. يقدم تحليل القيمة المفردة (SVD) حلاً واعدًا لضغط LLM. ومع ذلك، فإن أساليب ضغط LLM المستندة إلى SVD لها اثنين من القيود الرئيسية: اقتطاع القيم المفردة الأصغر قد يؤدي إلى فقدان ضغط أعلى، وعدم وجود تحديث على الوزن المضغوط بعد اقتطاع SVD. في هذا العمل، نقترح SVD-LLM، وهي طريقة ضغط LLM جديدة تعتمد على SVD والتي تعالج قيود الطرق الحالية. يشتمل SVD-LLM على إستراتيجية تبييض البيانات مع مراعاة الاقتطاع لضمان التعيين المباشر بين القيم المفردة وفقدان الضغط. علاوة على ذلك، يعتمد SVD-LLM استراتيجية تحديث معلمة النموذج المغلق للطبقة للتعويض عن تدهور الدقة في ظل نسب الضغط العالية. نقوم بتقييم SVD-LLM على إجمالي 10 مجموعات بيانات وثمانية نماذج من ثلاث عائلات مختلفة من LLM على أربعة مقاييس مختلفة. تظهر نتائجنا تفوق SVD-LLM على أحدث التقنيات، خاصة في نسب ضغط النماذج العالية.
يرجى الاحتفاظ بإصدار حزمة المحولات مساويًا تمامًا لـ 4.35.2 نظرًا لأن الإصدار المضغوط بـ svd من LLM يحتوي على تغيير طفيف في بنية النموذج (في المجلد 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. على الرغم من أن هذا الإصدار ليس بجودة الإصدارين المذكورين أعلاه من 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}
}