Transcript
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اشترك إذا كان هذا قد وفر عليك وقت المعالجة الرسومية أو إذا كنت تحب هذا النوع من أدوات التطوير. نراكم في فيديو آخر
Community Posts
No posts yet. Be the first to write about this video!
Write about this video