المستوى المطلوب: متوسط — تحتاج معرفة أساسية بالـ Transformers و Python و PyTorch، وفهم عام لفكرة fine-tuning. مدة القراءة المتوقعة: 9 دقائق.
تدريب كامل لـ Llama 3 8B على بياناتك بيحتاج 320GB ذاكرة GPU، يعني 4 كروت A100 80GB أو سيرفر تأجيره يبدأ من $14 للساعة. LoRA بيخلّيك تدرب نفس الموديل في 6 ساعات على RTX 4090 واحدة بـ 16GB ذاكرة فقط، بفقد جودة 1-2% بس مقارنة بالـ full fine-tuning. المقال ده هيوريك بالظبط ازاي وليه.
المشكلة باختصار
أي fine-tuning كامل لموديل بـ 8 مليار parameter بيحتاج 3 نسخ في الذاكرة في نفس اللحظة: الأوزان نفسها (16GB بـ FP16)، الـ gradients (16GB)، و optimizer states زي Adam moments (32GB). الإجمالي 64GB لكل GPU، والموديل مش بيتقسم تلقائياً، فبتحتاج FSDP أو DeepSpeed وسيرفر متعدد GPUs. الفاتورة بتيجي بسرعة، والـ iteration cycle بيبقى بطيء جداً.
LoRA: تكنيك الـ Adapter اللي بيوفّر 99.7% من parameters المُدرَّبة
الفكرة بمثال بسيط للمبتدئ
تخيل إنك عايز تعدل كتاب من 1000 صفحة عشان يبقى مناسب لجمهور تاني. عندك طريقتين:
- الطريقة الكاملة: تكتب الكتاب من الأول للآخر بنسخة معدّلة. مكلف، بطيء، وبيحتاج طاقم تحرير كامل.
- الطريقة الذكية: تسيب الكتاب الأصلي زي ما هو، وتضيف ورقة ملاحظات صغيرة في نهاية كل فصل تشرح التعديل المطلوب. القارئ بيقرا الأصلي + الملاحظة فيخرجله المعنى الجديد.
LoRA بنفس الفكرة بالظبط. الموديل الأصلي (Llama 3 الأوزان الأصلية) بتسيبه مجمَّد، وبتضيف "ورقات ملاحظات" صغيرة جداً اسمها adapters جنب كل طبقة attention. وقت التدريب، الموديل الأصلي ما بيتحركش، اللي بيتدرب هو الـ adapters بس.
التعريف العلمي الدقيق
LoRA (اختصار Low-Rank Adaptation) من ورقة Hu et al. 2021 بتعتمد على ملاحظة محورية: التغيير اللي بيحصل في الأوزان أثناء fine-tuning عنده intrinsic low rank. يعني التحديث ΔW اللي محتاجه الموديل ممكن يتمثّل بدقة عالية كحاصل ضرب مصفوفتين أصغر بكتير.
بدل ما تتعلم مصفوفة تحديث ΔW بحجم d×k كاملة، بتعبّر عنها كـ:
ΔW = B · A
# B بحجم (d × r)
# A بحجم (r × k)
# r قيمة صغيرة جداً: 8 أو 16 أو 32حيث r أصغر بكتير من d أو k اللي بيكونوا بالآلاف. عدد الـ parameters اللي بيتدرب بيقل من d·k لـ r·(d+k). عملياً في Llama 3 8B، الـ full fine-tuning بيدرب 8 مليار parameter، LoRA بـ r=16 بيدرب 21 مليون فقط — يعني 0.26% من الإجمالي.