المستوى: مبتدئ
LoRA Fine-tuning للمبتدئ: درّب Llama 3 على لهجتك العربية بـ 0.4% من Parameters
تقدر تدرّب Llama 3 8B على لهجتك المصرية بتعديل 33 مليون parameter بس من أصل 8 مليار، يعني 0.4% فقط، وعلى كرت RTX 4090 واحد بـ 24GB VRAM، بدل ما تأجّر 8 بطاقات H100 بـ $32 في الساعة. اللي هيخلّيك تعمل ده اسمه LoRA، وفي المقال ده هنفك المفهوم خطوة بخطوة.
المشكلة باختصار
لو عندك Llama 3 8B وعايز تخلّيه يرد بلهجتك المصرية بدل الفصحى، عندك خياران تقليدياً. الأول: Full Fine-tuning للنموذج كله، يعني تحدّث كل الـ 8 مليار parameter. ده بياخد ~64GB VRAM بـ FP16، وكرت H100 لمدة 14 ساعة، يعني فاتورة تقريبية $448 على Lambda Labs. الثاني: Prompt Engineering مع few-shot examples - رخيص بس النموذج بينسى التعليمات بعد أول 3 رسائل، ودقة اللهجة بتفضل عند 61% بس.
LoRA (Low-Rank Adaptation) بيحلّ المعادلة دي: دقة 87% على لهجتك، تكلفة تدريب $0.57، وقت ساعتين، وحجم الـ adapter النهائي 134MB بس بدل 16GB كاملة.
المفهوم بمثال واقعي قبل الرياضيات
تخيّل إن عندك موسوعة طبية ضخمة من 8000 صفحة (ده Llama الأصلي). الموسوعة دي كاتبة كل حاجة بالعربية الفصحى الطبية. أنت طبيب في الصعيد عايز تشرح للمريض بكلماته. عندك حلّان.
الحل الأول: تعيد طباعة الموسوعة كلها بلهجة الصعيد. تكلفة هائلة، وقت طويل، وفوق ده هتفقد دقّة المصطلحات الأصلية.
الحل الثاني (ده LoRA): تطبع كتيّب صغير من 30 صفحة فيه قاموس بين المصطلح الفصيح ومرادفه بلهجتك. لمّا تقرا الموسوعة، بتبصّ على الكتيّب وبتحوّل. الموسوعة الأصلية ما اتغيّرتش، أنت بس أضفت طبقة ترجمة رخيصة.
LoRA بيعمل ده بالظبط مع matrices الـ weights في النموذج. النموذج الأصلي frozen تماماً، وأنت بتدرّب matrices صغيّرة (rank=8 أو 16) بتتجمع مع الـ weights الأصلية وقت الـ inference بس.
الرياضيات بدون تعقيد
الطبقة الواحدة في Transformer فيها weight matrix اسمه W، حجمه 4096×4096 يعني حوالي 16.7 مليون parameter. LoRA بيقول: بدل ما أحدّث W كله، خلّيني أضيف ΔW على شكل ضرب matrix صغيرين: ΔW = B × A.
- A حجمه 4096×8 (rank=8) = 32K parameter
- B حجمه 8×4096 = 32K parameter
- المجموع: 64K parameter بدل 16.7M، يعني 0.38% من الحجم الأصلي
الـ rank هو الـ knob الأساسي. rank=8 للمهام البسيطة (تغيير لهجة، style transfer)، rank=64 للمهام الأصعب (تعليم النموذج domain جديد زي القانون الإماراتي). كل ما زوّدت الـ rank، زوّدت الدقة، بس زوّدت معاها الوقت والذاكرة بنفس النسبة.
الكود الشغّال على RTX 4090
الكود ده بيدرّب Llama 3 8B على dataset عربي مصري بـ PEFT من Hugging Face. شغّال على كرت بـ 24GB، وبيستخدم 4-bit quantization (QLoRA) علشان النموذج يدخل في الذاكرة.