لقد تمكنت من تشغيل نموذج لغوي يحتوي على 284 مليار معلمة (parameter) على جهاز كمبيوتر محمول لا يمتلك سوى 3.2 جيجابايت من ذاكرة الوصول العشوائي (RAM)، باستخدام لغة C99 فقط وقرص NVMe. كانت الحيلة تكمن في بث أوزان الخبراء (expert weights) الخاصة بالنموذج بدلاً من تحميل نقطة التحقق (checkpoint) بالكامل بحجم 160 جيجابايت في الذاكرة، مما يثبت أنه حتى أكبر نماذج خليط الخبراء (MoE) يمكن ضغطها لتعمل على أجهزة المستهلكين.
لماذا يهم هذا الأمر
تُشغل النماذج اللغوية الكبيرة (LLMs) عمليات توليد الكود، والمساعدة في الأبحاث، وغيرها، ولكن حجمها عادةً ما يجبر المستخدمين على اللجوء إلى خوادم مكلفة متعددة المعالجات الرسومية (multi-GPU) أو إلى استخدام كمية كبيرة من التكميم (quantisation) الذي يضر بالجودة. إن إثبات إمكانية تشغيل نموذج MoE بـ 284 مليار معلمة باستخدام بضعة جيجابايتات فقط من الذاكرة يفتح الباب للهواة، والشركات الناشئة الصغيرة، والباحثين ذوي الميزانيات المحدودة لتجربة أحدث النماذج دون التضحية بالدقة.
النموذج وعنق الزجاجة في الأجهزة
يخزن DeepSeek-V4-Flash نحو 284 مليار معلمة موزعة على 256 خبيراً لكل طبقة transformer. تشغل نقطة التحقق الخام حوالي 160 جيجابايت على القرص — وهو حجم يتجاوز بكثير سعة الـ 3.2 جيجابايت من الذاكرة (RAM) الموجودة في الكمبيوتر المحمول التقليدي. تحاول مسارات الاستدلال (inference pipelines) التقليدية تعيين نقطة التحقق بالكامل في الذاكرة، مما يؤدي سريعاً إلى استنفاد ميزانية الذاكرة وانهيار النظام.
بث أوزان الخبراء: الفكرة الجوهرية
تُنشط بنيات MoE مجموعة فرعية صغيرة جداً من الخبراء لكل رمز (token). في DeepSeek-V4-Flash، يختار الموجه (router) ستة خبراء من أصل 256 لكل طبقة. وبما أن العمليات الحسابية لا تلمس الخبراء الخاملين أبداً، يمكن لمحرك الاستدلال تخطي تحميلهم.
يتعامل التنفيذ مع نقطة التحقق كمصدر بث. عندما يقرر الموجه أي الخبراء مطلوبون للرمز الحالي، يقوم المحرك بسحب كتل الأوزان تلك من قرص NVMe إلى ذاكرة تخزين مؤقت من نوع LRU (الأقل استخداماً مؤخراً) موجودة في الذاكرة (RAM). إذا كانت الذاكرة المؤقتة كبيرة بما يكفي، يتم إعادة استخدام نفس الخبراء عبر الرموز المتتالية، مما يؤدي إلى حدوث cache hits؛ أما إذا كانت الذاكرة المؤقتة صغيرة جداً، فيقوم المحرك بالقراءة من القرص بشكل متكرر. والنتيجة هي بصمة ذاكرة قصوى تبلغ 3.23 جيجابايت، وهي ضمن حدود الكمبيوتر المحمول، مع الحفاظ على أوزان الدقة الكاملة ودون الحاجة إلى تسريع بواسطة GPU.
دروس مستفادة بشق الأنفس من التنفيذ
1. المخرجات السلسة ليست دليلاً على الصحة يمكن لنواة (kernel) برمجية بها أخطاء أن تنتج جملًا تبدو منطقية، خاصة عندما تخفي الأنماط اللغوية للنموذج الأخطاء الرقمية. لقد قمت بالتحقق من كل عملية من العمليات الـ 14 الحرجة مقابل مرجع PyTorch جديد، للتأكد من أن الفرق الرقمي ظل ضمن نطاق سماحية ضئيل جداً. إن تخطي هذه الخطوة كان سيسمح بمرور انحرافات طفيفة دون ملاحظتها.
2. أنماط الفشل المشتركة يمكن أن تخدع اختباراتك تسبب خطأ في فساد الذاكرة (memory-corruption bug) في حصر خيارات التوجيه في عدد قليل من الخبراء، مما أدى إلى تضخم معدل الـ cache-hit من 52% إلى 95% وإعطاء وهم بوجود تسريع هائل. ولأن مجموعة الاختبارات قارنت بين نسختين من نفس الكود البرمجي المعيب، فقد فاتتها المشكلة. الحل هو إضافة مسار مرجعي مستقل — كود لا يتشارك أي منطق مع التنفيذ الأساسي — حتى لا يمر أي خلل مشترك دون ملاحظة.
3. قِس قبل أن تُحسّن افترضتُ أن عملية نسخ الذاكرة تستغرق 1 مللي ثانية وقضيت وقتاً في تحسينها. أظهر تحليل الأداء (Profiling) أن العملية استغرقت في الواقع 3.6 مللي ثانية، أي 22% من إجمالي وقت الاستدلال. الدرس المستفاد: لا تعتمد أبداً على الحدس في الأجزاء الحساسة للأداء؛ القياس الدقيق هو الدليل الوحيد الموثوق.
4. الظروف الحرارية تؤثر بشكل كبير على معدل الإنتاجية أدى تشغيل الاختبارات المرجعية (benchmarks) على كمبيوتر محمول "ساخن" إلى أوقات تشغيل أبطأ بـثلاث مرات مقارنة بجهاز بارد. أدت درجات الحرارة المرتفعة إلى تقليل إنتاجية قرص NVMe وإبطاء المعالج (CPU)، مما أدى إلى تحريف النتائج. سجل الحالة الحرارية للنظام دائماً عندما تنشر أرقام الأداء.
كيف تبدو الأرقام
- حجم النموذج على القرص: ~160 جيجابايت
- ذروة استخدام الذاكرة (RAM): 3.23 جيجابايت
- الخبراء لكل رمز (token): 6 (من أصل 256)
- معدل الـ cache-hit: يختلف باختلاف الذاكرة (RAM)؛ مع 3.2 جيجابايت يتذبذب.
- بدون تكميم (quantisation): يتم بث أوزان الدقة الكاملة، مما يحافظ على جودة النموذج.
إذا انخفضت ميزانية الذاكرة (RAM) عن حوالي 3.21 جيجابايت، فلن تمتلئ الذاكرة المؤقتة أبداً وسيقوم المحرك بالبث مع كل رمز، مما يسبب انخفاضاً حاداً في الأداء.
الكود المصدري متاح للعامة على github.com/ronak-create/deepseek-v4-in-c. توجد قناة نقاش مجتمعية على t.me/GyaanSetuAi لأي شخص يتطلع إلى تكرار التجربة أو توسيعها.
الخلاصة
تتيح عملية البث التدفيقي للخبراء الذين يستخدمهم نموذج MoE فعلياً فقط تشغيل نموذج لغوي كبير (LLM) بـ 284 مليار معلمة على كمبيوتر محمول متواضع، دون الحاجة إلى التكميم (quantisation) أو تسريع وحدة معالجة الرسومات (GPU acceleration). وتُظهر التجربة أن حركة البيانات الذكية، والتحقق الصارم، والقياس المنضبط يمكنها تجاوز قيود الأجهزة التي يفترض الكثيرون أنها غير قابلة للتغيير.
