00:00:00هذا هو DeepSpeed، مكتبة مايكروسوفت مفتوحة المصدر التي تتصل مباشرة بـ PyTorch وتحل المشكلة الحقيقية المتعلقة بالذاكرة
00:00:07فهي تتيح لك تشغيل نماذج عادةً ما تنهار فوراً، وكل ذلك على وحدة معالجة رسومية (GPU) واحدة دون إثقال كاهلها؛ فالنماذج الكبيرة لا تفشل بسبب بطئها
00:00:14بل تفشل لأن حالات المحسّن (optimizer states) والتدرجات والمعاملات ينتهي بها الأمر بملء ذاكرة الرسوم (VRAM). سر DeepSpeed يكمن في تقنية ZeRO التي تقوم بتجزئة حالات التدريب
00:00:23بحيث لا تضطر لتخزين نفس البيانات في كل مكان. نحن ننشر فيديوهات باستمرار، لذا احرص على الاشتراك
00:00:30الآن دعونا نبدأ مباشرة بتشغيل هذا. سأقوم بتنفيذ كل شيء على Google Colab بما أنني أستخدم جهاز Mac بمعالج M4 Pro
00:00:40لذا لا أملك وحدات معالجة رسومية من Nvidia مما يجعل الأمر أكثر صعوبة، لكن يمكنني القيام بذلك على Colab بدلاً من ذلك. أولاً
00:00:46سأجري فحصاً سريعاً لوحدات المعالجة الرسومية لدي، ثم يمكننا تثبيت جميع الحزم المطلوبة عبر pip
00:00:51سأقوم بتثبيت حزم مثل PyTorch وHugging Face وDeepSpeed، ثم تشغيل DS_report للتأكد من سلامة إعدادات CUDA والمترجم
00:00:59بعض عمليات التثبيت الإضافية للتأكد من أن كل شيء يعمل بسلاسة
00:01:02بعد ذلك، سنقوم بإنشاء ملف إعدادات JSON لتهيئة DeepSpeed؛ هذا الملف هو مفتاح الحل بأكمله
00:01:09سنبدأ بالمرحلة الثانية من ZeRO (Stage 2) والتي تجزئ حالات المحسّن والتدرجات عبر
00:01:14وحدات المعالجة الرسومية لتقليل استهلاك الذاكرة بشكل كبير، بينما تظل معاملات النموذج مكررة. لا تبالغ في التفكير في هذا الأمر لأنه كان سيصيبني بالجنون
00:01:22فقط ابدأ من الوثائق الرسمية، غيّر شيئاً واحداً في كل مرة، وقاوم الرغبة في إضافة إعدادات عشوائية
00:01:28يمكنك العثور على الإعدادات في وثائق كل من Hugging Face وDeepSpeed
00:01:34وقد حصلت على معظم كود Python الخاص بي من هذه الوثائق أيضاً
00:01:37لكنني أجريت بعض التعديلات لتناسب نظامي وتتعامل معه بشكل أفضل، خاصة مع نظام Mac
00:01:42إذا فشلت هذه الخطوة، توقف هنا، لأن معظم مشاكل DeepSpeed هي عدم توافق في CUDA وليست مشكلة في نموذجك نفسه
00:01:48سنقوم بتشغيل كل هذا الآن ونراقب كيف يعمل
00:01:51سأستخدم مجموعة بيانات صغيرة مستوردة لهذا المثال فقط لتسريع عملية التشغيل
00:01:58وها نحن ذا، بعد بضع دقائق يمكننا رؤية الخطوات التي اتخذها البرنامج وأيضاً ذروة استهلاك ذاكرة الرسوم
00:02:03نعم، خسارة التدريب (training loss) في هذه المرة لم تتغير أو تنخفض كثيراً
00:02:08ولكن يمكننا تحسين ذلك أو استخدام مجموعة بيانات أكبر للحصول على نتائج أفضل. الآن
00:02:13إليك ما يعتقد الناس أنهم سيحصلون عليه، ثم يواجهون رغم ذلك مشكلة نفاد الذاكرة
00:02:16تأتي تقنية ZeRO في مراحل، وكل مرحلة تجيب على سؤال واحد: ما الذي يمكنني التوقف عن تخزينه على وحدة معالجة رسومية واحدة؟
00:02:24المرحلة الأولى تجزئ حالات المحسّن، والمرحلة الثانية تفعل الشيء نفسه بالإضافة إلى التدرجات
00:02:30أنت الآن توفر مساحات أكبر من تلك البيانات التي تستهلك ذاكرتك بصمت. ثم لدينا المرحلة الثالثة من ZeRO
00:02:36وهي الأهم؛ فهي تجزئ حالات المحسّن والتدرجات والمعاملات معاً
00:02:40هذا هو أكبر توفير ممكن للذاكرة، ولكن حتى هذا قد لا يكون كافياً أحياناً
00:02:45إذا كنت لا تزال غير قادر على تشغيل النموذج، فإن ZeRO-Infinity يمكنها نقل البيانات إلى المعالج المركزي (CPU) أو حتى أقراص NVMe
00:02:50نعم، أنت تضحي بالسرعة مقابل القدرة على التوسع، ولكن أحياناً يكون الفوز الحقيقي هو مجرد القدرة على تشغيل النموذج في المقام الأول
00:02:56الآن إذا كنت تفكر: “جميل، لكن الذاكرة ليست مشكلتي الوحيدة”، فأنت محق؛ فـ DeepSpeed يدعم التوازي ثلاثي الأبعاد (3D Parallelism)
00:03:04في البيانات، وخط المعالجة، والموترات، كما يحتوي على دعم مدمج لنماذج “خليط الخبراء” (Mixture of Experts)
00:03:09حتى لا تستهلك النماذج المتفرقة (sparse models) كل قدراتك الحسابية
00:03:12لذا أصبح لدينا الآن خيارات حقيقية؛ فـ DeepSpeed يتكامل بشكل رائع مع Hugging Face وAccelerate
00:03:19لذا لست بحاجة لبناء كل شيء من الصفر
00:03:21أنت تأخذ ما تحتاجه فقط وتتجاهل الباقي. الآن، معايير الأداء تعتمد بشدة على إعداداتك
00:03:27لذا لا تثق دائماً بالأرقام الكبيرة. لقد حاولت تشغيل هذا عدة مرات
00:03:30ولكن مجدداً، بما أنني أستخدم جهاز M4 Pro، لم أتمكن من تحسين الأداء أكثر من ذلك بهذا النموذج الأساسي
00:03:36لذا من الصعب الجزم، لكن مشاريع أخرى استخدمت DeepSpeed أظهرت قفزات هائلة في سرعة المعالجة
00:03:41خاصة عندما كانت الذاكرة هي العائق. إذا كنت تستخدم ويندوز أو لينكس، فقد تحقق مكاسب ضخمة
00:03:46لذا أفضل خطوة بصراحة هي التجربة؛ ابدأ بالإعدادات الرسمية
00:03:51هذا ما فعلته هنا تقريباً؛ عدلتها قليلاً لتناسب الماك ثم أصلحت مشاكل CUDA
00:03:56ثم راقب ذاكرة المعالج المركزي إذا فعلت خاصية النقل (offload)، وإذا قررت لاحقاً استخدام عدة وحدات GPU
00:04:01فإن مكتبة Accelerate ستساعدك في ذلك. DeepSpeed هو ببساطة زر “أرفض أن تنفد الذاكرة اليوم”
00:04:07بمجرد فهمك لـ ZeRO وكيفية عمل النقل (offloading)، سيصبح تدريب النماذج الضخمة ممكناً عملياً حتى بموارد محدودة
00:04:14لكن عملية الإعداد يمكن أن تكون مربكة في البداية بلا شك
00:04:17اشترك إذا كان هذا قد وفر عليك وقت المعالجة الرسومية أو إذا كنت تحب هذا النوع من أدوات التطوير. نراكم في فيديو آخر