الـ Fine-tuning و LoRA
آخر أداة في الصندوق، مش أول واحدة.
يعني إيه Fine-tuning؟
زي الـ transfer learning في المرحلة ٦ بالظبط: تاخد موديل لغة متدرب، وتكمل تدريبه على أمثلة من عندك عشان يتقن مهمة أو أسلوب معين. مثلاً ردود خدمة عملاء بطريقة شركتك، أو تصنيف تذاكر الدعم لفئاتك.
اختار الأداة الصح
| المشكلة | الحل الأنسب |
|---|---|
| الموديل مش فاهم المطلوب أو بيرد بشكل مش مظبوط | Prompt engineering الأول |
| الموديل محتاج معلومات مش عنده أو بتتغير | RAG |
| محتاج أسلوب أو شكل ثابت جداً على آلاف الطلبات، أو موديل أصغر وأرخص يعمل مهمة واحدة كويس | Fine-tuning |
المشكلة: الموديلات ضخمة
موديل فيه ٧ مليار وزن، تدريبه كله محتاج ذاكرة GPU ضخمة، وكل نسخة متدربة حجمها عشرات الجيجات. هنا ييجي LoRA.
الـ LoRA: عدّل حتة صغيرة ذكية
بدل ما تعدل مصفوفة الأوزان الكبيرة W نفسها، بتجمّدها وتضيف جنبها مصفوفتين صغيرين جداً A و B، حاصل ضربهم بيمثل التعديل. فاكر قاعدة الـ shapes؟ (d × r) @ (r × d) بيطلع (d × d)، ولو r صغير (زي 8)، عدد الأوزان بيقل بشكل رهيب:
d = 4096 # size of one weight matrix in a 7B-parameter model r = 8 # LoRA rank full = d * d # fine-tune the whole matrix lora = d * r + r * d # only A and B print(f"full matrix: {full:>12,} weights") print(f"LoRA (r={r}): {lora:>12,} weights") print(f"LoRA trains {lora / full:.2%} of the weights")
أقل من نص في المية من الأوزان! وده معناه ذاكرة أقل بكتير، وتدريب ممكن على GPU واحد في Colab، والنسخة المتدربة حجمها ميجات مش جيجات، وتقدر تعمل كذا LoRA لمهام مختلفة فوق نفس الموديل الأساسي.
شكله في الكود
from transformers import AutoModelForCausalLM from peft import LoraConfig, get_peft_model base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B") # a small open model config = LoraConfig( r=8, # rank: size of A and B lora_alpha=16, # scaling factor target_modules=["q_proj", "v_proj"], # attach LoRA to attention's Q and V! lora_dropout=0.05, task_type="CAUSAL_LM", ) model = get_peft_model(base, config) model.print_trainable_parameters() # then train with your examples using the transformers Trainer or TRL's SFTTrainer
لاحظ q_proj و v_proj: دول مصفوفات الـ Query والـ Value في الـ attention اللي شرحناها. كل حاجة في المرحلة دي بتتربط ببعض.
الداتا أهم من الكود
الـ fine-tuning نجاحه كله في جودة الأمثلة: مئات لآلاف أمثلة (سؤال ← الإجابة المثالية) نضيفة ومتنوعة وبتمثل الحالات الحقيقية. ١٠٠ مثال ممتاز أحسن من ١٠٠٠٠ مثال عشوائي.