كفاءة النماذج وتوسيعها2022متقدم13 دقيقة قراءة
المحوِّلات التبديلية: التوسّع إلى تريليون معامل بتناثر بسيط وفعّال
Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity
Fedus, W. · Zoph, B. · Shazeer, N. — JMLR
المشكلة
بحلول 2021، أصبح واضحاً أن تكبير نماذج اللغة العصبية يُحسّن أداءها باطّراد. لكن المشكلة أن كل معامل جديد يعني حوسبة إضافية عند معالجة كل رمز: نموذج أكبر بعشر مرات يحتاج تقريباً عشرة أضعاف العمليات الحسابية لكل رمز. خليط الخبراء كان يطرح حلاً نظرياً مُغرياً — أضِف معاملات جديدة دون أن تدفع ثمنها حوسبياً عند كل رمز. لكن التطبيق العملي اصطدم بثلاث عقبات: غير مستقر، والتنفيذ معقّد، والاتصال بين الأجهزة مُكلف. فوق ذلك، الطريقة المعتادة كانت تُرسل كل رمز إلى عدة خبراء في آنٍ واحد، مما يُضاعف العبء الحوسبي. لم ينجح أحد في بناء نظام خليط خبراء بسيط ومستقر على مستوى تريليون معامل.
الإسهام
التبديلي يأخذ فكرة خليط الخبراء إلى أبسط صورها: كل رمز يذهب إلى خبير واحد فقط (أعلى-1) بدلاً من اثنين أو أكثر. هذا التبسيط يُنصّف الحوسبة المطلوبة من الخبراء، ويُخفّض تكاليف الاتصال بين الأجهزة، ويُبسّط التنفيذ — دون التنازل عن الجودة. تُقدّم الورقة كذلك تقنيات لتثبيت التدريب (حساب الموجّه بدقة float32 فقط، وتصغير مقياس التهيئة)، واستراتيجية عند ، وخسارة مساعدة قابلة للتفاضل لموازنة الحِمل. النتائج مبنية على T5: تسريع يصل إلى 7 أضعاف في بنفس ميزانية الحوسبة، وتوسّع إلى 1.6 تريليون معامل، وتحسّن في جميع اللغات الـ101، مع إمكانية تقطير النموذج إلى نماذج كثيفة صغيرة تحتفظ بنحو 30% من مكاسب الجودة.
الأثر
أثبتت المحوِّلات التبديلية أن نماذج الخبراء المتناثرة قابلة للتطبيق العملي وليست مجرد فكرة نظرية. حين أظهرت أن التوجيه إلى خبير واحد فقط يكفي — على عكس الاعتقاد السائد بضرورة التوجيه إلى أكثر من خبير — فتحت الباب أمام معماريات خليط خبراء أبسط وأضخم. هذا العمل أثّر مباشرة في Mixtral وDeepSeek-V3 وغيرها من نماذج خليط الخبراء الحديثة التي تُشغّل أنظمة إنتاجية اليوم. الرؤية الأهم — أن عدد المعاملات يُحدث فارقاً بمعزل عن حجم الحوسبة — أصبحت مبدأً توجيهياً للمجال بأكمله. كما أظهرت الورقة أن النماذج المتناثرة يمكن ضغطها عبر التقطير لتُنشر عملياً، فتُقلّص الفجوة بين الحجم البحثي ومتطلبات الهندسة الفعلية.
في المُحوِّل التقليدي، كل يمرّ عبر نفس — تماماً كطبيب وحيد يفحص كل مريض في المستشفى بصرف النظر عن التخصص المطلوب. الطبيب بارع، لكنه واحد فقط.
يقترح حلاً: وظِّف 128 طبيباً متخصصاً. لكن الأنظمة السابقة كانت تُرسل كل مريض إلى طبيبَين أو أكثر طلباً لاستشارة ثانية، فتتضاعف أعباء العمل وتتعقّد الجدولة.
الفكرة التي يقوم عليها المحوِّل التبديلي بسيطة بلا رتوش: مريض واحد، طبيب واحد. موظف استقبال ذكي (الموجّه) يُلقي نظرة سريعة على الأعراض ويُحيل المريض لتخصص واحد فقط. المستشفى يملك 128 ضعفاً من الخبرة، لكن تكلفة كل زيارة تبقى كما هي.
المشكلة: التوسّع يعني تكلفة أعلى لكل رمز
الوصفة السائدة لتحسين نماذج اللغة عام 2020 كانت واضحة: كبّر النموذج. أظهر GPT-3 أن التوسّع إلى 175 مليار معامل يُنتج قدرات مذهلة في التعلّم بأمثلة قليلة. لكن المشكلة أن كل معامل يُشارك في كل عملية حسابية — فإن ضاعفت المعاملات عشر مرات، ضاعفت الحوسبة عشر مرات لكل رمز. هذا جعل التدريب باهظاً إلى حدّ يصعب تحمّله.
كشف كابلان وآخرون (2020) عن علاقات تربط حجم النموذج بالبيانات والحوسبة والخسارة — لكن المحاور الثلاثة كانت متشابكة. السؤال الطبيعي: هل يمكن أن نزيد عدد المعاملات دون أن نزيد الحوسبة لكل رمز؟ خليط الخبراء كان يَعِد بذلك تحديداً: نموذج بمليارات المعاملات لا يُنشّط منها كل رمز إلا شريحة صغيرة. المعاملات تنمو، لكن العمليات الحسابية لكل رمز تبقى ثابتة.
غير أن خليط الخبراء كان يعاني من ثلاث مشكلات عنيدة. أولاً، اختيار الخبير المناسب لكل رمز كان معقداً — الطريقة المعتادة تُرسل كل رمز إلى خبيرَين على الأقل. ثانياً، التدريب كان غير مستقر لا سيّما مع صيغ الدقة المنخفضة كـbfloat16. ثالثاً، الاتصال الشامل بين الأجهزة لتوزيع الرموز كان مُكلفاً. المحوِّل التبديلي يتصدّى لهذه المشكلات الثلاث.
الفكرة الجوهرية: وجّه كل رمز إلى خبير واحد فقط
في المُحوِّل التقليدي، كل طبقة تتكوّن من طبقة فرعية لـ تليها شبكة تغذية أمامية. ما يفعله المحوِّل التبديلي هو استبدال هذه الشبكة بـطبقة FFN تبديلية: بدلاً من شبكة واحدة تُعالج جميع الرموز، تُوجد N شبكات مستقلة يُمثّل كل منها خبيراً، وموجّه خفيف الوزن يختار لكل رمز خبيراً واحداً بالضبط.
العمل السابق لشازير وآخرون (2017) افترض أن التوجيه إلى أكثر من خبير (k > 1) ضروري حتى تصل ذات معنى إلى الموجّه. المحوِّل التبديلي يدحض هذا الافتراض: خبير واحد يكفي (k = 1). والفوائد ثلاث فورية: حوسبة الموجّه تقلّ لأنه يختار واحداً فقط بدل ترتيب اثنين، و لكل خبير يمكن تنصيفه لأن كل رمز يذهب لخبير واحد لا اثنين، والاتصال بين الأجهزة يصبح أبسط.
الموجّه نفسه ليس أكثر من طبقة خطية مُتعلَّمة واحدة. يأخذ تمثيل كل رمز x ويضربه في مصفوفة أوزان W_r فيُنتج قيماً لوغيتية على N خبير، ثم يُمرّرها عبر دالة لحساب الاحتمالات، ويُرسل الرمز إلى الخبير ذي الاحتمال الأعلى. المخرج النهائي هو ناتج حوسبة الخبير مضروباً في قيمة بوابة الموجّه.
سعة الخبير: ماذا يحدث حين يفيض الخبراء؟
في التدريب الموزَّع، يجب تحديد أبعاد المُوتّرات بشكل ثابت مسبقاً. لذلك يُخصَّص لكل خبير عدد أقصى من الرموز يستطيع استقبالها — وهذا ما نُسمّيه — وتُحسب كالتالي:
سعة الخبير = (عدد الرموز في الدفعة / عدد الخبراء) ×
حين يكون معامل السعة 1.0، يملك كل خبير مساحة تكفي بالضبط لتوزيع متوازن مثالي. لكن عملياً التوجيه لا يكون منتظماً تماماً، فبعض الخبراء يستقبلون رموزاً أكثر من طاقتهم. الرموز الفائضة تُسقَط — أي تتخطّى طبقة الخبراء بالكامل وتمرّ مباشرة عبر دون أن يُعالجها أي خبير.
معامل سعة أكبر (مثل 1.5) يُوفّر خانات احتياطية فيُقلّل الإسقاط، لكنه يُهدر حوسبة على خانات فارغة. معامل سعة أصغر (مثل 1.0) أكفأ لكنه يُخاطر بإسقاط رموز أكثر. وجدت الورقة أن القيمة المثلى عملياً تقع بين 1.0 و1.25، خصوصاً على النطاقات الكبيرة حيث الذاكرة شحيحة.
موازنة الحِمل: ضمان أن كل خبير يعمل بحصّته
إذا تُرك الموجّه دون تدخّل، يميل طبيعياً إلى تركيز معظم الرموز على عدد قليل من الخبراء بينما يبقى الباقي عاطلاً — وهذه ديناميكية «الغني يزداد غنىً» المعروفة. تخيّل أن الخبير الأول استقبل رموزاً أكثر بقليل في البداية: يحصل على تدرّجات أغنى فيتحسّن أسرع ويجذب مزيداً من الرموز، فتتفاقم المشكلة. هذا الخلل يُهدر معاملات ويُسبّب فيضان الرموز.
الحل هو إضافة خسارة مساعدة لـ إلى دالة الهدف. لكل طبقة تبديلية نحسب متجهَين على N خبير: f وهو النسبة الفعلية للرموز التي وصلت لكل خبير، وP وهو متوسط الاحتمال الذي أسنده الموجّه لكل خبير. الخسارة المساعدة هي حاصل ضربهما القياسي مُعيَّراً بـN:
حين يكون التوجيه منتظماً تماماً يصبح كلا المتجهين (1/N, ..., 1/N) وتبلغ الخسارة حدّها الأدنى. أي انحراف عن التوازن يرفعها. النقطة الذكية هنا أنّ f غير قابل للتفاضل لأنه يعتمد على قرارات argmax، لكنّ P قابل للتفاضل عبر softmax، فتستطيع الخسارة توجيه الموجّه نحو التوازن رغم ذلك. المُعامل α = 10⁻² كان كبيراً بما يكفي لفرض التوازن وصغيراً بما يكفي حتى لا يتعارض مع هدف نمذجة اللغة الأساسي.
استقرار التدريب: ترويض عدم الاستقرار
نماذج الخبراء المتناثرة تواجه تحديات تدريب خاصة بها. قرارات التوجيه الحادّة (خبير واحد أو لا شيء) تخلق انقطاعات في مسار التدرّجات، وصيغ الدقة المنخفضة تُضخّم الأخطاء العددية في حساب softmax. الورقة تُعالج ذلك بتقنيتين:
الدقة الانتقائية. بدلاً من تدريب النموذج بالكامل بـfloat32 (مستقر لكن بطيء) أو بالكامل بـbfloat16 (سريع لكن ينهار)، يحسب المحوِّل التبديلي دالة الموجّه فقط بدقة float32. ثم تُعاد مُوتّرات الإرسال والتجميع إلى bfloat16 قبل الاتصال بين الأجهزة، فتبقى عمليات النقل المُكلفة بدقة منخفضة. النتيجة: سرعة bfloat16 مع استقرار float32.
تصغير مقياس التهيئة. المعيارية في المحوِّلات تستخدم معامل مقياس s = 1.0. المحوِّل التبديلي يُخفّضه إلى s = 0.1 — أي عُشر القيمة الأصلية. هذا التعديل البسيط حسّن الجودة بشكل ملحوظ وقلّل التباين بين التشغيلات المختلفة، ونجح على نطاق واسع من 223 مليون معامل وصولاً إلى ما يفوق التريليون.
التوسّع: خبراء أكثر، تعلّم أسرع
أكفأ محور لتوسيع المحوِّل التبديلي هو ببساطة زيادة عدد الخبراء. حين تُضيف خبراء جدداً، تبقى العمليات الحسابية لكل رمز ثابتة تقريباً — كل ما يتغيّر هو أن الموجّه يحسب توزيعاً على عدد أكبر من الخبراء، وهي عملية بحجم O(d_model × عدد_الخبراء) لا تُذكر مقارنة بحوسبة شبكة التغذية الأمامية.
وسّعت الورقة بشكل منهجي من خبيرَين إلى 256 خبيراً، ولاحظت تحسّناً مطّرداً في كفاءة الخطوة وزمن التنفيذ الفعلي. أبرز النتائج:
-
Switch-Base بـ64 خبيراً يصل إلى نفس جودة T5-Base أسرع بـ7.5 مرة من حيث خطوات التدريب، وأسرع بـ7 مرات من حيث الزمن الفعلي.
-
حتى بالمقارنة مع T5-Large الذي يستهلك 3.5 أضعاف العمليات الحسابية لكل رمز، فإن Switch-Base بـ64 خبيراً أسرع بـ2.5 مرة بالزمن الفعلي.
-
حتى نموذج بخبيرَين فقط يتفوّق بوضوح على النماذج الكثيفة المُكافئة، ما يجعل هذا المنهج مفيداً حتى على عتاد محدود.
الفائدة تتواصل في نطاق التريليون: Switch-C (1.6 تريليون معامل، 2048 خبيراً) يُحقّق تسريعاً بأربعة أضعاف مقارنة بـT5-XXL مع استقرار كامل طوال التدريب.
النتائج على المهام الفرعية: مكاسب التدريب المسبق تنتقل
تحسينات التدريب المسبق لا قيمة لها إن لم تنتقل إلى مهام حقيقية. الورقة تتحقّق من ذلك عبر طيف واسع من المعايير:
-
SuperGLUE: Switch-Base يتقدّم بـ4.4 نقطة على T5-Base، وSwitch-Large يتقدّم بنقطتين على T5-Large. هذه مقارنات بنفس الحوسبة — أي أن التحسّن ليس ناتجاً عن حوسبة إضافية بل عن استثمار أذكى للمعاملات.
-
SQuAD: Switch-Base يُسجّل 87.2 مقابل 85.5 لـT5-Base، وSwitch-Large يصل إلى 88.6.
-
Winogrande: Switch-Large يقفز إلى 83.0 مقابل 79.1 لـT5-Large، وهذا مؤشّر على تحسّن في بالمعرفة العامة وليس مجرد حفظ أنماط.
-
الإجابة عن أسئلة بدون سياق: تحسّنات كبيرة في TriviaQA (30.7 مقابل 24.5 لـT5-Base) تُشير إلى أن النماذج المتناثرة تُخزّن معرفة وقائعية أكثر في فضاء معاملاتها الأوسع.
-
التعدّد اللغوي: عبر جميع اللغات الـ101 في مجموعة mC4 يتحسّن نموذج Switch على خطّ mT5-Base الأساسي، حيث تحقّق 91% من اللغات تسريعاً لا يقلّ عن 4 أضعاف. هذا بالغ الأهمية للغات قليلة الموارد التي تستفيد من السعة المُشتركة بين الخبراء.
التقطير: ضغط التريليونات في ملايين
نموذج بتريليون معامل لا يمكن نشره عملياً كما هو. الورقة تُبيّن أن النماذج المتناثرة الكبيرة يمكن إلى نماذج كثيفة صغيرة بتقنيتين:
تهيئة الأوزان غير الخبيرة: بما أن نموذج Switch مُكافئ حوسبياً للنموذج الكثيف، فإن جميع الطبقات غير الخبيرة (الانتباه الذاتي، ، ) تتشارك نفس الأبعاد. نأخذ هذه الأوزان المُدرَّبة ونستخدمها لتهيئة النموذج الطالب الكثيف، فيبدأ من نقطة متقدّمة بدلاً من الصفر.
الخسارة المختلطة: بدلاً من تدريب الطالب على الإجابات الصحيحة فقط، نمزج في دالة الخسارة 75% تسميات صلبة (الإجابات الصحيحة) مع 25% تسميات ليّنة (التوزيع الاحتمالي الذي يُخرجه المعلّم). التسميات الليّنة تحمل ما يُعرف بـ — وهي الطريقة التي يوزّع بها المعلّم ثقته على كل الإجابات الممكنة، لا الإجابة الصحيحة وحدها.
بالجمع بين التقنيتين، يمكن ضغط نموذج Switch بـ14.7 مليار معامل بنسبة 99% إلى نموذج كثيف بـ223 مليون معامل مع الاحتفاظ بـ28% من مكاسب الجودة. وعند ضغط 82% (من 1.1 مليار إلى 223 مليوناً) يُحتفظ بـ37%. هذه نسب ضغط عملية تسمح بنشر النموذج فعلياً.
الفكرة في الكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def switch_router(token_reprs, expert_weights, num_experts):
"""وجّه كل رمز إلى أفضل خبير واحد (أعلى-1).
المدخلات:
token_reprs: (الدفعة, d_model) — تمثيلات الرموز
expert_weights: (d_model, عدد_الخبراء) — مصفوفة أوزان الموجّه
num_experts: عدد الخبراء المتاحين
المخرجات:
expert_indices: (الدفعة,) — أي خبير يذهب إليه كل رمز
gate_values: (الدفعة,) — احتمال softmax لتحجيم المخرج
"""
# احسب لوغيتات الموجّه
logits = token_reprs @ expert_weights # (الدفعة, عدد_الخبراء)
# softmax للحصول على الاحتمالات (حوّل إلى float32 للاستقرار!)
logits_f32 = logits.astype(np.float32)
probs = np.exp(logits_f32 - logits_f32.max(axis=-1, keepdims=True))
probs /= probs.sum(axis=-1, keepdims=True)
# اختيار أعلى-1 — «التبديل» في المحوِّل التبديلي
expert_indices = np.argmax(probs, axis=-1) # (الدفعة,)
gate_values = probs[np.arange(len(probs)), expert_indices]
return expert_indices, gate_values
def load_balance_loss(probs, expert_indices, num_experts, alpha=0.01):
"""خسارة مساعدة لتشجيع الاستخدام المنتظم للخبراء."""
# f_i: نسبة الرموز الموجَّهة للخبير i
f = np.zeros(num_experts)
for idx in expert_indices:
f[idx] += 1
f /= len(expert_indices)
# P_i: متوسط احتمال الموجّه للخبير i
P = probs.mean(axis=0)
# الخسارة = α × N × Σ(f_i × P_i)، تبلغ حدها الأدنى حين يكون كلاهما منتظماً
return alpha * num_experts * np.sum(f * P)التوازي: أبعاد البيانات والنموذج والخبراء
الوصول إلى تريليون معامل يتطلّب الجمع بين ثلاث استراتيجيات توازٍ:
يُقسّم الدفعة على عدّة معالجات. كل معالج يحمل نسخة كاملة من النموذج لكنه يرى بيانات مختلفة، ولا يحدث اتصال بينها إلا عند تجميع التدرّجات في نهاية كل خطوة.
يُقسّم مصفوفات الأوزان نفسها على المعالجات. كل معالج يحمل جزءاً من الأوزان لكنه يُعالج الدفعة كاملة، وهذا يتطلّب اتصال all-reduce في كل تمريرة أمامية وعكسية.
فريد بنماذج خليط الخبراء. كل معالج يحتضن خبيراً مختلفاً، وتُرسَل الرموز إلى الخبير المناسب عبر اتصال all-to-all. هذا النمط يتوافق طبيعياً مع المحوِّل التبديلي: مع N معالج وN خبير، يملك كل معالج خبيراً واحداً.
نموذجا الورقة الرئيسيان يستخدمان تركيبتين مختلفتين: Switch-C (1.6 تريليون معامل) يعتمد فقط على توازي الخبراء والبيانات مع 2048 خبيراً، ما يُبقي حجم النموذج لكل خبير صغيراً. Switch-XXL (395 مليار معامل) يستخدم أنواع التوازي الثلاثة معاً بأبعاد أكبر لكل خبير لكن بعبء اتصال أعلى. Switch-C لم يُظهر أي عدم استقرار؛ بينما Switch-XXL عانى منه أحياناً — وهذا يُبرز المقايضة بين حجم الحوسبة لكل رمز والاستقرار.
من المحوِّل التبديلي إلى خليط الخبراء الحديث
1991
خليط الخبراء (جاكوبس وآخرون)
الإطار الأصلي لخليط الخبراء: عدّة شبكات خبيرة تُدمج مخرجاتها عبر آلية بوابة. فكرة تأسيسية لكنها اقتصرت على نطاق صغير.
2017
خليط الخبراء بالبوابة المتناثرة (شازير وآخرون)
أول تطبيق حديث لخليط الخبراء في التعلّم العميق: طبقات خبراء بين شبكات LSTM بتوجيه أعلى-k. تصدّر معايير الترجمة ونمذجة اللغة وأثبت فعالية الفكرة على نطاق واسع.
2020
GShard (ليبيخين وآخرون)
دمج خليط الخبراء داخل المحوِّل لبناء نظام ترجمة ضخم يدعم 100 لغة. وسّع مُصرِّف XLA ليدعم التقسيم التلقائي عبر الأجهزة.
2022
المحوِّل التبديلي (فيدوس وآخرون)
بسّط خليط الخبراء إلى توجيه أعلى-1. أول تدريب مستقر على نطاق تريليون معامل. تسريع 7 أضعاف مقارنة بـT5 مع إمكانية تقطير النموذج إلى أحجام قابلة للنشر.
2024
Mixtral (Mistral AI)
نموذج خليط خبراء مفتوح الأوزان بـ8 خبراء وتوجيه أعلى-2 لكل طبقة. ينافس نماذج كثيفة أكبر منه بكثير، ويُعدّ امتداداً مباشراً لأفكار المحوِّل التبديلي.
2024
DeepSeek-V3
نموذج خليط خبراء واسع النطاق مع موازنة حِمل مبتكرة لا تحتاج خسارة مساعدة، وآلية انتباه كامن متعدد الرؤوس. يدفع خليط الخبراء إلى صفوف النماذج الإنتاجية المتقدّمة.
المرجعFedus, Zoph, Shazeer. Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity. JMLR, 2022.
مصطلحات هذه الورقة
- مزيج الخبراءMixture of Experts
- التناثر البنيوي للمصفوفاتSparsity
- التنشيط المتفرّقSparse Activation
- سعة الخبيرExpert Capacity
- توزيع الحِملLoad Balancing
- معامل السعةCapacity Factor
- تقطير المعرفةKnowledge Distillation
- توازي النموذجModel Parallelism
- توازي البياناتData Parallelism
- التدريب بالدقة المختلطةMixed Precision Training
- شبكة التغذية الأماميةFeed Forward Network (FFN)
- سوفت ماكسSoftmax
- الإسقاط العشوائي للعصبوناتDropout
- الضبط الدقيقFine-Tuning
- التدريب المسبقPre-training