أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول

Mixture of Experts للمتوسط: ليه DeepSeek 671B سريع زي 37B

📅 ٧ مايو ٢٠٢٦⏱ 6 دقائق قراءة
Mixture of Experts للمتوسط: ليه DeepSeek 671B سريع زي 37B
مستوى المقال: متوسط — يفترض إنك فاهم Transformer وطبقات Feed-Forward وعارف يعني إيه parameters و inference.

لو شوفت إن DeepSeek V3 بـ 671 مليار باراميتر بيرد على سؤالك في نفس وقت موديل 37 مليار، اعرف إن ده مش تحسين بسيط في الـ GPU. ده تغيير في معمارية الموديل اسمها Mixture of Experts. الفكرة: الموديل الكبير ده بيفعّل 5.5% بس من نفسه لكل توكن. الباقي نايم.

رسم تخطيطي لشبكة Mixture of Experts فيها راوتر بيوزّع التوكنز على عدة خبراء متخصصين

Mixture of Experts: نمط المعمارية اللي بقى المعيار في 2026

المشكلة باختصار

الموديلات اللي زادت قدرتها بعد GPT-3 كانت بتزود الباراميترز. الباراميترز الأكتر يعني ذاكرة أكتر و FLOPs أكتر لكل توكن. النتيجة: تكلفة استدلال بتطلع خطّيًا مع الحجم. موديل 70B تقريبًا 5x أبطأ من موديل 13B على نفس الـ GPU. علشان كده الفرق بين قدرات الموديلات الكبيرة وزمن الاستجابة كان بيتسع كل سنة.

MoE بتحل المعادلة دي بفصل "حجم المعرفة" عن "حجم الحساب". تقدر تزود الباراميترز 20x من غير ما تزود تكلفة الاستدلال أكتر من 10–15%.

مثال للمبتدئ: المستشفى التخصصي

تخيّل مستشفى فيها 256 طبيب، كل طبيب متخصص في حاجة: قلب، عيون، عظام، مخ، إلى آخره. لما مريض يدخل، فيه موظف استقبال شاطر بيسأله سؤال أو اتنين، وبيوديه لـ 8 أطباء بس من الـ 256 — اللي تخصصهم قريب من حالته. باقي الـ 248 طبيب قاعدين في مكاتبهم بيشربوا قهوة.

المستشفى دي عندها معرفة هائلة (256 تخصص)، بس كل مريض بياخد وقت زيارة 8 أطباء فقط. لو كان كل مريض لازم يعدّي على الـ 256، الزحمة هتقتل المستشفى. ده بالظبط اللي بتعمله MoE.

موظف الاستقبال = الراوتر (Router/Gating Network). الأطباء = الخبراء (Experts). عدد الأطباء اللي بيشوفوا المريض = Top-K. التخصصات الجانبية اللي مش بتشتغل = Sparse activation.

التعريف العلمي بالظبط

في الـ Transformer العادي، كل طبقة فيها Self-Attention + Feed-Forward Network (FFN) واحدة. الـ FFN بياخد كل التوكنز ويمررها على نفس المصفوفات.

في طبقة MoE، الـ FFN الواحدة بتتقسّم لـ N خبير (FFN صغيرة)، وبيتضاف Gating Network (شبكة Linear بسيطة) دورها يحسب لكل توكن probabilities على الخبراء، ويختار أعلى K منهم. ده اللي بيتسمى Top-K Routing. الإخراج = جمع موزون لإخراج الـ K خبير اللي اتفعلوا.

الفرضية الأساسية: التخصص بينشأ تلقائيًا أثناء التدريب. الراوتر بيتعلم إن التوكنز الخاصة بالكود تروح لخبراء، وتوكنز اللغة الطبيعية تروح لخبراء تانيين، وهكذا. ما حدش بيفرض التخصص يدوي.

كود PyTorch: ابني MoE Layer من الصفر

Python
import torch
import torch.nn as nn
import torch.nn.functional as F

class Expert(nn.Module):
    """خبير واحد = FFN صغيرة عادية"""
    def __init__(self, d_model, d_hidden):
        super().__init__()
        self.fc1 = nn.Linear(d_model, d_hidden)
        self.fc2 = nn.Linear(d_hidden, d_model)
    def forward(self, x):
        return self.fc2(F.silu(self.fc1(x)))

class MoELayer(nn.Module):
    def __init__(self, d_model=768, d_hidden=2048,
                 num_experts=8, top_k=2):
        super().__init__()
        self.experts = nn.ModuleList(
            [Expert(d_model, d_hidden) for _ in range(num_experts)]
        )
        self.gate = nn.Linear(d_model, num_experts, bias=False)
        self.top_k = top_k

    def forward(self, x):
        # x shape: [batch, seq_len, d_model]
        logits = self.gate(x)                    # [B, T, E]
        weights, idx = logits.topk(self.top_k, dim=-1)
        weights = F.softmax(weights, dim=-1)

        out = torch.zeros_like(x)
        for k in range(self.top_k):
            expert_idx = idx[..., k]             # أيّ خبير لكل توكن
            w = weights[..., k].unsqueeze(-1)
            for e in range(len(self.experts)):
                mask = (expert_idx == e)
                if mask.any():
                    out[mask] += w[mask] * self.experts[e](x[mask])
        return out

# اختبار سريع
layer = MoELayer(d_model=768, num_experts=8, top_k=2)
x = torch.randn(2, 16, 768)   # batch=2, seq=16
print(layer(x).shape)         # torch.Size([2, 16, 768])

الكود ده بسيط للتعليم. في الإنتاج بيستخدموا أنوية CUDA متخصصة (مثل Megablocks أو DeepSpeed-MoE) علشان توزّع الخبراء على GPUs مختلفة وتمنع الـ load imbalance.

معمارية موديل MoE توضح طبقة feed-forward مقسّمة لخبراء متعددين مع راوتر يختار Top-K

أرقام من موديلات حقيقية في 2026

  • DeepSeek V3: 671B باراميتر إجمالي، 37B بيفعّلوا لكل توكن. 256 خبير في كل طبقة، 8 منهم بيشتغلوا (Top-8). نسبة التفعيل: 5.5%.
  • Mixtral 8x7B: 46.7B باراميتر إجمالي، تقريبًا 13B بيفعّلوا. 8 خبراء، 2 بيشتغلوا. نسبة التفعيل: 28%.
  • سرعة الاستدلال: Mixtral 8x7B بيرد في زمن قريب من موديل dense بـ 13B، بينما هو فعليًا أكبر منه 3.5x.
  • الأداء: Mixtral تجاوز Llama 2 70B في 9 من 12 benchmark، رغم إن خبراءه المفعّلين أقل بـ 5x. (المصدر: Mistral)
  • التوزّع: بحلول 2026، كل موديلات الـ frontier ما عدا Anthropic Claude بقت MoE. سبارسيتي بين 3% و 35%.

الـ Trade-offs اللي مش هتسمعها في الـ marketing

MoE بتوفر compute، مش memory. ده الفرق المش مفهوم. الكلام ده مهم: علشان الراوتر يقرر يبعت التوكن لأي خبير، كل الخبراء لازم يكونوا محمّلين في الذاكرة. يعني DeepSeek V3 لسه محتاج VRAM يستوعب 671B باراميتر (تقريبًا 700GB في FP8). بس وقت الحساب بياخد وقت 37B بس.

النتيجة العملية:

  1. التكلفة: بتخسر فلوس على VRAM (سيرفرات أكبر)، بتكسب فلوس على inference (latency أقل، throughput أعلى).
  2. الـ Load Imbalance: لو الراوتر بيبعت أغلب التوكنز لـ 2 خبراء بس من أصل 256، باقي الـ 254 بيقعدوا فاضيين. ده بيقلل كفاءة التدريب جدًا. الحل في DeepSeek V3 هو bias term ديناميكي بدّل auxiliary loss القديم. (المصدر: ورقة DeepSeek-V3 التقنية)
  3. الـ Routing Overhead: الراوتر نفسه بياخد وقت. لو الموديل صغير (≤ 7B)، تكلفة الراوتر بتاكل المكسب.
  4. صعوبة الـ Fine-tuning: Fine-tuning موديل MoE أصعب من dense. الراوتر بيتغير سلوكه، وممكن خبراء يبدأوا "يموتوا" (Dead Experts).

متى لا تستخدم Mixture of Experts

  • لو عندك موديل ≤ 7B باراميتر. الفايدة هتكون ضئيلة جدًا والـ overhead هياكلها.
  • لو الـ VRAM بتاعتك محدودة (RTX 4090 بـ 24GB مثلًا). DeepSeek V3 الكامل مش هيشتغل عندك أصلاً، حتى لو سرعته كانت زي 37B.
  • لو شغلك Fine-tuning مكثّف على dataset صغير. مشاكل Dead Experts هتبوظ التدريب.
  • لو محتاج deployment على edge devices (موبايل، سيارة). dense models أسهل في الضغط والـ quantization.

الخطوة التالية

لو شغال على inference، جرّب Mixtral 8x7B عبر vllm على GPU 80GB واقيس الـ throughput مقارنة بـ Llama 2 70B dense على نفس الكرت. لو الفرق أقل من 3x في tokens/sec، يبقى الـ batching بتاعك مش مظبوط. لو شغال على بحث، اقرا ورقة DeepSeekMoE (2401.06066) لفهم Fine-grained Experts و Shared Experts — التعديلين دول هما اللي خلوا 256 خبير ينفع.

المصادر

  • DeepSeek-V3 Technical Report — arXiv:2412.19437 (الأرقام 671B/37B، 256 expert/8 active، bias-based routing).
  • DeepSeekMoE: Towards Ultimate Expert Specialization — arXiv:2401.06066 (Fine-grained + Shared Experts).
  • Mistral AI — Mixtral 8x7B announcement (46.7B total / 13B active، تفوق على Llama 2 70B في 9/12 benchmark).
  • Cameron R. Wolfe — "Mixture-of-Experts (MoE) LLMs" deep-dive.
  • Hugging Face Blog — MoE architecture search والمقارنات بين 3% و 35% sparsity في موديلات 2026.
  • Megablocks (Stanford) و DeepSpeed-MoE (Microsoft) — مكتبات الإنتاج لـ MoE training.
]]>

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة