هذا المقال يتطلب مستوى متوسط. الافتراض إنك تعرف يعني إيه fine-tuning، وشغّلت نموذجًا من Hugging Face قبل كده، وعارف أساسيات المصفوفات.
LoRA وQLoRA: الضبط الدقيق الفعّال للنماذج اللغوية الكبيرة
تقدر تعمل fine-tuning لنموذج بـ7 مليار باراميتر على كارت شاشة واحد، وتدرّب أقل من 1% من أوزانه، بجودة قريبة جدًا من التدريب الكامل. ده اللي بيعمله LoRA. المقال يوريك بالظبط إزاي، وإمتى الطريقة دي تنفع وإمتى لأ.
المشكلة باختصار
الضبط الدقيق الكامل (full fine-tuning) بيحدّث كل وزن في النموذج. المشكلة مش في الأوزان نفسها، المشكلة في الذاكرة اللي حواليها. القاعدة التقريبية: التدريب الكامل بمُحسِّن Adam بياخد حوالي 16 بايت لكل باراميتر (الوزن + التدرّج + حالتَي Adam بدقة fp32).
يعني نموذج 7B محتاج قرابة 112 جيجابايت ذاكرة GPU علشان تدرّبه بالكامل. ده مش كارت واحد، دي عدة كروت A100. ولو عايز تدرّب 10 نسخ لـ10 مهام، هتخزّن 10 نسخ كاملة من النموذج. مكلف وبطيء وبيتكرّر بلا داعي.
الفكرة بمثال بسيط الأول
تخيّل عندك كتاب مرجعي 500 صفحة، وعايز تظبطه لقارئ معيّن. الطريقة المكلفة إنك تعيد طباعة الكتاب كله من أول وجديد عشان تغيّر شوية جمل. الطريقة الذكية إنك تسيب الكتاب زي ما هو، وتحط ورقات ملاحظات صغيرة (sticky notes) جنب الصفحات المهمة.
القارئ بيقرأ الكتاب الأصلي + الملاحظات مع بعض، فيوصله المعنى المعدّل. الكتاب الأصلي هو النموذج المجمّد اللي ما بنلمسوش. الملاحظات الصغيرة هي محوّل LoRA اللي بندرّبه. رخيص، سريع، وتقدر تشيل الملاحظات وتحط غيرها لمهمة تانية في ثواني.
المفهوم علميًا: تفكيك منخفض الرتبة
في كل طبقة، النموذج عنده مصفوفة أوزان W. LoRA بيجمّد W بالكامل، وبيضيف تحديثًا صغيرًا جنبها اسمه ΔW. الحيلة إن ΔW مش مصفوفة كاملة، لكنها حاصل ضرب مصفوفتين رفيعتين: ΔW = B · A، حيث الرتبة r صغيرة جدًا (زي 8 أو 16).
فبدل ما تدرّب مصفوفة d×d، بتدرّب B بحجم d×r وA بحجم r×d. عند الاستدلال، المخرج بيبقى h = Wx + (B · A)x. وبنهيّئ B بأصفار في البداية، فالنموذج يبدأ التدريب من نفس سلوك النموذج الأصلي بالظبط.
الأرقام بتوضّح المكسب. لو d = 4096 وr = 8: المصفوفة الكاملة فيها 16.7 مليون باراميتر، بينما B + A فيهم 65,536 فقط. ده 256 ضعف أقل في الباراميترات القابلة للتدريب، في كل طبقة. الافتراض هنا إن التعديل المطلوب على النموذج "منخفض الرتبة" فعلًا، وده صحيح لأغلب مهام التكييف الأسلوبي والمجالي.
QLoRA: نضيف التكميم فوق LoRA
LoRA بيقلّل الباراميترات القابلة للتدريب، لكن النموذج الأساسي المجمّد نفسه لسه بياخد ذاكرة (14 جيجا لـ7B بدقة fp16). QLoRA بيحل ده: بيحمّل النموذج الأساسي مكمّمًا لـ4 بت بصيغة NF4، ويدرّب محوّل LoRA فوقه. النتيجة من الورقة الأصلية: fine-tuning لنموذج 65B على كارت واحد بـ48 جيجا، بجودة تعادل التدريب الكامل بدقة 16 بت.