هذا المقال يتطلب مستوى متوسط. لو عندك خلفية أساسية عن نماذج اللغة (تعرف يعني إيه باراميتر وتوكن)، هتمشي معاه لآخره.
ركز في الرقم ده: نموذج DeepSeek-V3 فيه 671 مليار باراميتر، ومع ذلك بيحسب كل توكن بسرعة نموذج حجمه 37 مليار تقريبًا. مش سحر، ده أسلوب معماري اسمه خليط الخبراء (Mixture of Experts أو MoE). في نهاية المقال هتعرف بالظبط إزاي بيشتغل، وإمتى يستاهل تستخدمه، وإمتى لأ.
خليط الخبراء (MoE): إزاي النموذج الأكبر يطلع أسرع في الحساب
المشكلة باختصار
في النموذج التقليدي (dense) كل باراميتر بيشتغل على كل توكن. يعني لو كبّرت النموذج 10 أضعاف علشان يبقى أذكى، تكلفة الحساب بتكبر 10 أضعاف كمان. المعادلة دي بتخلّي النماذج العملاقة غالية جدًا في التشغيل. السؤال: تقدر تزوّد "معرفة" النموذج من غير ما تزوّد الحساب بنفس النسبة؟
الفكرة بمثال بسيط الأول
تخيّل مستشفى فيها 8 دكاترة متخصصين: قلب، عظام، جلدية، عيون... وهكذا. لما يدخل مريض، مش كل الـ8 بيكشفوا عليه. في موظف استقبال بيبص على الحالة ويحوّلها لأنسب دكتور أو اتنين بس. النتيجة: المريض بياخد رأي متخصص، والمستشفى بتخدم ناس كتير في نفس الوقت لأن كل دكتور مشغول بحالات مجاله فقط.
MoE بيعمل نفس الحاجة جوه النموذج. بدل طبقة واحدة ضخمة بتشتغل على كل توكن، عندك مجموعة "خبراء" (شبكات فرعية)، وموظف الاستقبال هنا اسمه الموجِّه (Router أو Gating network). الموجِّه بيقرأ التوكن ويقرر أي خبيرين بس هيشتغلوا عليه.
دلوقتي الشرح العلمي الدقيق
في نموذج الـ Transformer، بيتم استبدال طبقة الـ Feed-Forward العادية بطبقة MoE. الطبقة دي فيها N خبير (كل خبير شبكة FFN مستقلة) وموجِّه صغير. لكل توكن:
- الموجِّه بيحسب درجة (score) لكل خبير.
- بيختار أعلى k خبير فقط (غالبًا k=2). ده اسمه Top-k gating.
- مخرجات الخبراء المختارين بتتجمع بأوزان مأخوذة من softmax على درجاتهم.
المصطلح المفتاح هنا Sparse activation: تفعيل متناثر. النموذج ضخم في المجمل، لكن اللي "بيشتغل فعلاً" لكل توكن جزء صغير منه. ده الفرق بين إجمالي المعاملات (total params) والمعاملات النشطة (active params).
import torch, torch.nn.functional as F
x = torch.randn(1, 4) # توكن واحد بحجم 4
router = torch.nn.Linear(4, 8) # موجِّه لـ 8 خبراء
logits = router(x) # درجة لكل خبير
topk = torch.topk(logits, k=2) # اختر أعلى خبيرين فقط
weights = F.softmax(topk.values, -1) # وزّع الأهمية بينهم
print("الخبراء المختارون:", topk.indices.tolist())
print("الأوزان:", weights.squeeze().tolist())
# خبيران من 8 بس بيشتغلوا -> ~25% من حساب هذه الطبقة
الأرقام الحقيقية (مش نظري)
- Mixtral 8x7B من Mistral: إجمالي 46.7 مليار باراميتر، لكن النشط لكل توكن حوالي 13 مليار فقط (Top-2 من 8 خبراء). في اختباراتهم عادل أو تفوّق على Llama 2 70B في معظم المقاييس مع سرعة استدلال أعلى بحوالي 6 أضعاف، لأن الحساب بيوازي نموذج 13B مش 47B.
- DeepSeek-V3: إجمالي 671 مليار باراميتر، والنشط لكل توكن 37 مليار فقط (حوالي 5.5%)، بتوجيه Top-8 من 256 خبيرًا. اتدرّب على 14.8 تريليون توكن بتكلفة إجمالية أعلن عنها بنحو 5.576 مليون دولار (حوالي 2.788 مليون ساعة GPU من نوع H800).
الفكرة اللي بتحصل فعلاً: السعة (المعرفة المخزّنة) بتكبر مع الإجمالي، بينما تكلفة الحساب بتكبر مع النشط فقط. ده اللي بيخلّي "النموذج الأكبر" يطلع أرخص في الحساب لكل توكن.
الـ trade-off هنا (لازم تعرفه)
MoE مش وجبة مجانية. الافتراض إنك بتوفّر في الحساب صحيح، لكن بتدفع في مكان تاني:
- الذاكرة: كل الخبراء لازم يكونوا محمّلين في ذاكرة الـ GPU وقت الاستدلال، حتى لو خبيرين بس هيشتغلوا. يعني ذاكرة DeepSeek-V3 بتتطلب مساحة الـ 671 مليار كاملة، مش الـ37. بتكسب سرعة حساب، بتخسر VRAM.
- عدم اتزان التوجيه (load imbalance): لو الموجِّه اتعوّد يبعت لخبراء معيّنين أكتر من اللازم، الباقي بيتكسل والجودة بتقل. علشان كده بيتحط "load balancing loss" أثناء التدريب.
- تعقيد التدريب والنشر: التوزيع على أكتر من GPU (expert parallelism) والتواصل بينهم بيضيف هندسة مش بسيطة.
متى لا تستخدم MoE
لو ذاكرتك محدودة (مثلًا كارت واحد بـ 24GB) وعايز أكبر جودة ممكنة داخل الذاكرة دي، النموذج الـ dense غالبًا أنسب، لأن MoE هيصرف ذاكرتك على خبراء نايمين. كمان لو مشروعك صغير ومحتاج نموذج تحت 3 مليار باراميتر، تعقيد MoE مش هيستاهل. القاعدة: MoE بيلمع لما تكون عايز سعة عالية جدًا وعندك ذاكرة كفاية لكن عايز توفّر تكلفة الحساب لكل طلب.
الخطوة التالية
افتح صفحة نموذج Mixtral-8x7B على Hugging Face، وبص على الفرق بين عدد الباراميترات الكلي والنشط في بطاقة النموذج. جرّب تشغّله محليًا لو عندك ذاكرة كفاية، ولاحظ استهلاك الـ VRAM مقابل سرعة الاستدلال. لو استهلاك الذاكرة صدمك مقارنة بالسرعة، يبقى فهمت الـ trade-off صح.
المصادر
- Jiang et al., "Mixtral of Experts" — arXiv:2401.04088 (أرقام 46.7B/13B ومقارنة Llama 2 70B).
- Mistral AI, "Mixtral of experts" (المدونة الرسمية) — mistral.ai/news/mixtral-of-experts.
- DeepSeek-AI, "DeepSeek-V3 Technical Report" — arXiv:2412.19437 (671B إجمالي، 37B نشط، Top-8 من 256، 14.8T توكن، تكلفة التدريب).
- Shazeer et al., "Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer" — arXiv:1701.06538 (الأصل النظري للـ sparse MoE).
- Fedus et al., "Switch Transformers" — arXiv:2101.03961 (توسيع MoE وموازنة الحمل).