باختصار: استخدم وحدات معالجة الرسومات من NVIDIA لتدريب الذكاء الاصطناعي، وذلك بالتأكد أولاً من ظهور برنامج التشغيل ووحدة معالجة الرسومات باستخدام nvidia-smi ، ثم تثبيت إطار عمل/حزمة CUDA متوافقة، وتشغيل اختبار بسيط "نموذج + دفعة على CUDA". في حال نفاد الذاكرة، قلل حجم الدفعة واستخدم دقة مختلطة، مع مراقبة الاستخدام والذاكرة ودرجات الحرارة.
أهم النقاط المستفادة:
الفحوصات الأساسية : ابدأ بـ nvidia-smi ؛ قم بإصلاح رؤية برنامج التشغيل قبل تثبيت الأطر.
توافق المكدس : حافظ على توافق إصدارات برنامج التشغيل ووقت تشغيل CUDA والإطار لمنع الأعطال وعمليات التثبيت الهشة.
نجاح صغير : تأكد من أن عملية تمرير واحدة للأمام تعمل على CUDA قبل توسيع نطاق التجارب.
تخصص VRAM : الاعتماد على الدقة المختلطة، وتراكم التدرج، ونقاط التفتيش لتناسب النماذج الأكبر حجماً.
عادة المراقبة : تتبع الاستخدام وأنماط الذاكرة والطاقة ودرجات الحرارة حتى تتمكن من اكتشاف الاختناقات مبكراً.

مقالات قد ترغب في قراءتها بعد هذه المقالة:
🔗 كيفية بناء وكيل ذكاء اصطناعي
صمم سير عمل وكيلك، وأدواته، وذاكرته، وإجراءات السلامة الخاصة به.
🔗 كيفية نشر نماذج الذكاء الاصطناعي
قم بإعداد البيئات، وتغليف النماذج، وإرسالها إلى الإنتاج بشكل موثوق.
🔗 كيفية قياس أداء الذكاء الاصطناعي
اختر المقاييس، وقم بإجراء التقييمات، وتتبع الأداء بمرور الوقت.
🔗 كيفية أتمتة المهام باستخدام الذكاء الاصطناعي
أتمتة العمل المتكرر باستخدام المطالبات وسير العمل والتكاملات.
1) الصورة الكبيرة - ما الذي تفعله عندما "تتدرب على وحدة معالجة الرسومات" 🧠⚡
عند تدريب نماذج الذكاء الاصطناعي، فإنك في الغالب تُجري عمليات حسابية معقدة للغاية على المصفوفات. صُممت وحدات معالجة الرسومات (GPUs) خصيصًا لهذا النوع من العمل المتوازي، لذا يمكن لأطر عمل مثل PyTorch وTensorFlow وJAX أن تُسند المهام الثقيلة إلى وحدة معالجة الرسومات. ( وثائق PyTorch CUDA ، تثبيت TensorFlow (pip) ، دليل البدء السريع لـ JAX )
من الناحية العملية، فإن عبارة "استخدام وحدات معالجة الرسومات من NVIDIA للتدريب" تعني عادةً ما يلي:
-
توجد معلمات النموذج (غالباً) في ذاكرة الوصول العشوائي للفيديو لوحدة معالجة الرسومات (GPU VRAM)
-
يتم نقل دفعاتك من ذاكرة الوصول العشوائي (RAM) إلى ذاكرة الوصول العشوائي للفيديو (VRAM) في كل خطوة
-
تشغيل عملية التمرير الأمامي والانتشار العكسي على نواة CUDA ( دليل برمجة CUDA )
-
تتم تحديثات مُحسِّن الأداء على وحدة معالجة الرسومات (GPU) (في الوضع الأمثل)
-
تقوم بمراقبة درجات الحرارة والذاكرة والاستخدام حتى لا يحدث أي خلل 🔥 ( وثائق NVIDIA nvidia-smi )
إذا بدا ذلك كثيراً، فلا تقلق. إنها في الغالب قائمة مهام وبعض العادات التي تبنيها بمرور الوقت.
2) ما الذي يجعل إعداد تدريب الذكاء الاصطناعي باستخدام وحدة معالجة الرسومات من NVIDIA جيدًا؟ 🤌
هذا قسم "لا تبني بيتًا على الهلام". الإعداد الأمثل لاستخدام وحدات معالجة الرسومات من NVIDIA لتدريب الذكاء الاصطناعي هو الإعداد الذي يتميز بالبساطة والاستقرار. البساطة تعني الاستقرار، والاستقرار يعني السرعة، والسرعة تعني... حسنًا، السرعة 😄
عادةً ما تتضمن تجهيزات التدريب الجيدة ما يلي:
-
ذاكرة فيديو كافية لحجم الدفعة + النموذج + حالات المُحسِّن
-
ذاكرة الوصول العشوائي للفيديو (VRAM) تشبه مساحة الحقيبة. يمكنك أن تحزمها بشكل أفضل، لكن لا يمكنك حزم ما لا نهاية.
-
-
مجموعة برامج متطابقة (برنامج التشغيل + وقت تشغيل CUDA + توافق الإطار) ( PyTorch Get Started (محدد CUDA) ، TensorFlow install (pip) )
-
تخزين سريع (تساعد تقنية NVMe بشكل كبير في التعامل مع مجموعات البيانات الكبيرة)
-
معالج مركزي وذاكرة وصول عشوائي جيدة حتى لا يؤدي تحميل البيانات إلى استنزاف موارد وحدة معالجة الرسومات ( دليل ضبط أداء PyTorch )
-
قدرة التبريد والطاقة (يتم التقليل من شأنها حتى تصبح مهمة 😬)
-
بيئة قابلة للتكرار (venv/conda أو الحاويات) حتى لا تتحول الترقيات إلى فوضى ( نظرة عامة على NVIDIA Container Toolkit )
وهناك أمر آخر يتجاهله الناس:
-
عادة مراقبة الأداء - تتحقق من ذاكرة وحدة معالجة الرسومات واستخدامها كما تتحقق من المرايا أثناء القيادة. ( وثائق NVIDIA nvidia-smi )
3) جدول مقارنة - الطرق الشائعة للتدريب باستخدام وحدات معالجة الرسومات من NVIDIA (مع بعض الملاحظات) 📊
فيما يلي دليل سريع لتحديد الخيار الأنسب. الأسعار تقريبية (لأن الواقع يختلف)، ونعم، إحدى هذه الخانات مطولة بعض الشيء، عن قصد.
| الأداة / النهج | الأفضل لـ | سعر | لماذا ينجح (في الغالب) |
|---|---|---|---|
| بايتورش (الأساسي) بايتورش | معظم الناس، معظم المشاريع | حر | نظام بيئي مرن وضخم، وسهولة في تصحيح الأخطاء - بالإضافة إلى أن لكل شخص رأيه |
| وثائق PyTorch Lightning | الفرق، التدريب المنظم | حر | يقلل من التعليمات البرمجية المتكررة، ويُحسّن من سلاسة العمليات؛ يبدو الأمر أحيانًا وكأنه "سحر"، إلى أن يتلاشى |
| محولات الوجه المعانق + وثائق المدرب | معالجة اللغة الطبيعية + ضبط دقيق لشهادة الماجستير في القانون | حر | تدريب متضمن، إعدادات افتراضية رائعة، مكاسب سريعة 👍 |
| تسريع المستندات | دعم متعدد وحدات معالجة الرسومات بدون مشاكل | حر | يجعل DDP أقل إزعاجًا، وهو أمر جيد للتوسع دون إعادة كتابة كل شيء |
| وثائق DeepSpeed | نماذج كبيرة، حيل الذاكرة | حر | قد يكون استخدام ZeroRO، وتفريغ العمليات، والتوسع أمرًا معقدًا، ولكنه مُرضٍ عندما يُفهم |
| تثبيت TensorFlow + Keras | خطوط أنابيب إنتاجية تقريبًا | حر | أدوات قوية، وقصة نشر جيدة؛ بعض الناس يحبونها، والبعض الآخر لا يعجبهم ذلك |
| JAX + Flax دليل البدء السريع لـ JAX / وثائق Flax | مهووسو البحث والسرعة | حر | قد تكون عملية تجميع XLA سريعة للغاية، لكن عملية تصحيح الأخطاء قد تبدو... مجردة |
| نظرة عامة على NVIDIA NeMo | الكلام + سير عمل ماجستير القانون | حر | مجموعة برامج مُحسّنة لبطاقات NVIDIA، وصفات رائعة - تشعر وكأنك تطبخ في فرن فاخر 🍳 |
| نظرة عامة على مجموعة أدوات Docker + NVIDIA Container Toolkit | بيئات قابلة للتكرار | حر | عبارة "يعمل على جهازي" تصبح "يعمل على أجهزتنا" (في الغالب، مرة أخرى) |
4) الخطوة الأولى - تأكد من أن وحدة معالجة الرسومات (GPU) الخاصة بك مُعرَفة بشكل صحيح 🕵️♂️
قبل تثبيت عشرات الأشياء، تحقق من الأساسيات.
أشياء تريد أن تكون حقيقية:
-
ترى الآلة وحدة معالجة الرسومات
-
تم تثبيت برنامج تشغيل NVIDIA بشكل صحيح
-
وحدة معالجة الرسومات ليست عالقة في القيام بشيء آخر
-
يمكنك الاستعلام عنه بشكل موثوق
الفحص الكلاسيكي هو:
-
nvidia-smi( وثائق NVIDIA nvidia-smi )
ما تبحث عنه:
-
اسم وحدة معالجة الرسومات (على سبيل المثال، RTX، سلسلة A، إلخ)
-
إصدار برنامج التشغيل
-
استخدام الذاكرة
-
العمليات الجارية ( وثائق NVIDIA nvidia-smi )
إذا عملية nvidia-smi ، فتوقف فورًا. لا تقم بتثبيت الأطر البرمجية بعد. الأمر أشبه بمحاولة خبز الخبز والفرن غير موصول بالكهرباء. ( واجهة إدارة نظام NVIDIA (NVSMI) )
ملاحظة بسيطة: أحيانًا nvidia-smi لكن التدريب يفشل لأن بيئة تشغيل CUDA التي يستخدمها إطار العمل لا تتوافق مع متطلبات برنامج التشغيل. هذا ليس خطأك، بل هو الوضع الطبيعي 😭 ( PyTorch Get Started (CUDA selector) , TensorFlow install (pip) )
5) بناء حزمة البرامج - برامج التشغيل، وCUDA، وcuDNN، و"عملية التوافق" 💃
هنا يضيع الناس ساعات من وقتهم. السر يكمن في: اختيار مسار والالتزام به .
الخيار أ: CUDA المدمجة في إطار العمل (غالباً ما تكون الأسهل)
تأتي العديد من إصدارات PyTorch مزودةً ببيئة تشغيل CUDA الخاصة بها، مما يعني أنك لست بحاجة إلى تثبيت مجموعة أدوات CUDA كاملة على مستوى النظام. كل ما تحتاجه في الغالب هو برنامج تشغيل NVIDIA متوافق. ( PyTorch Get Started (CUDA selector) ، إصدارات PyTorch السابقة (CUDA wheels) )
الإيجابيات:
-
أجزاء متحركة أقل
-
تركيب أسهل
-
أكثر قابلية للتكرار لكل بيئة
السلبيات:
-
إذا خلطت بين البيئات بشكل عشوائي، فقد تشعر بالارتباك
الخيار ب: مجموعة أدوات CUDA للنظام (مزيد من التحكم)
تقوم بتثبيت مجموعة أدوات CUDA على النظام وضبط كل شيء وفقًا لها. ( وثائق مجموعة أدوات CUDA )
الإيجابيات:
-
مزيد من التحكم في التصميمات المخصصة، وبعض الأدوات الخاصة
-
مفيد لتجميع عمليات معينة
السلبيات:
-
المزيد من الطرق لدمج النسخ المختلفة والبكاء بصمت
cuDNN و NCCL، من الناحية البشرية
-
تقنية cuDNN على تسريع العمليات الأساسية للتعلم العميق (الالتفافات، وأجزاء RNN، وما إلى ذلك) ( وثائق NVIDIA cuDNN )
-
NCCL هي مكتبة "الاتصال السريع بين وحدات معالجة الرسومات" لتدريب وحدات معالجة الرسومات المتعددة ( نظرة عامة على NCCL )
إذا كنت تتدرب على استخدام وحدات معالجة رسومية متعددة، فإن NCCL هو أفضل صديق لك - وأحيانًا، رفيقك المتقلب المزاج. ( نظرة عامة على NCCL )
٦) أول تجربة تدريب لك على وحدة معالجة الرسومات (على غرار مثال PyTorch) ✅🔥
لفهم كيفية استخدام وحدات معالجة الرسومات من NVIDIA لتدريب الذكاء الاصطناعي ، لا تحتاج إلى مشروع ضخم أولاً، بل تحتاج إلى نجاح صغير.
الأفكار الأساسية:
-
جهاز الكشف
-
نقل النموذج إلى وحدة معالجة الرسومات
-
نقل الموترات إلى وحدة معالجة الرسومات
-
تأكد من أن عملية التمرير الأمامي تعمل هناك ( وثائق PyTorch CUDA )
الأمور التي أتحقق منها دائماً في وقت مبكر:
-
تُرجع الدالة
torch.cuda.is_available()True( torch.cuda.is_available ) -
next(model.parameters()).deviceيُظهرcuda( منتدى PyTorch: التحقق من النموذج على CUDA ) -
لا يحدث خطأ عند تمرير دفعة واحدة للأمام
-
تزداد ذاكرة وحدة معالجة الرسومات عند بدء التدريب (علامة جيدة!) ( وثائق NVIDIA nvidia-smi )
أخطاء شائعة عند سؤال "لماذا هو بطيء؟"
-
برنامج تحميل البيانات لديك بطيء للغاية (وحدة معالجة الرسومات تنتظر في وضع الخمول) ( دليل ضبط أداء PyTorch )
-
لقد نسيت نقل البيانات إلى وحدة معالجة الرسومات (عفواً)
-
حجم الدفعة صغير جدًا (الاستخدام غير الكافي لوحدة معالجة الرسومات)
-
أنت تقوم بمعالجة مسبقة مكثفة لوحدة المعالجة المركزية في خطوة التدريب
نعم، قد يبدو معالج الرسوميات لديك "غير مشغول" إذا كان عنق الزجاجة هو البيانات. الأمر أشبه بتوظيف سائق سيارة سباق ثم إجباره على انتظار الوقود في كل لفة.
7) لعبة ذاكرة الوصول العشوائي للفيديو - حجم الدفعة، والدقة المختلطة، وعدم الانفجار 💥🧳
تتلخص معظم مشاكل التدريب العملي في الذاكرة. إذا كنت ستتعلم مهارة واحدة، فتعلم إدارة ذاكرة الوصول العشوائي للفيديو (VRAM).
طرق سريعة لتقليل استخدام الذاكرة
-
الدقة المختلطة (FP16/BF16)
-
عادةً ما يُحسّن السرعة بشكل ملحوظ أيضًا. مكسبٌ مُضاعف تقريبًا 😌 ( وثائق PyTorch AMP ، دليل TensorFlow للدقة المختلطة )
-
-
تراكم التدرج
-
محاكاة حجم دفعة أكبر عن طريق تجميع التدرجات على عدة خطوات ( وثائق تدريب Transformers (تجميع التدرج، fp16) )
-
-
طول تسلسل أصغر / حجم اقتطاع أصغر
-
وحشية لكنها فعالة
-
-
نقطة تفتيش التنشيط
-
استبدال القدرة الحسابية بالذاكرة (إعادة حساب التنشيطات أثناء التراجع) ( torch.utils.checkpoint )
-
-
استخدم مُحسِّنًا أخف وزنًا
-
تقوم بعض برامج تحسين الأداء بتخزين حالات إضافية تستهلك ذاكرة الوصول العشوائي للفيديو (VRAM)
-
لحظة "لماذا لا تزال ذاكرة الوصول العشوائي للفيديو ممتلئة بعد أن أتوقف؟"
غالباً ما تستخدم الأطر البرمجية التخزين المؤقت للذاكرة لتحسين الأداء. هذا أمر طبيعي. قد يبدو الأمر مخيفاً، لكنه ليس بالضرورة تسريباً للذاكرة. ستتعلم قراءة الأنماط. ( دلالات PyTorch CUDA: مُخصِّص الذاكرة المؤقت )
عادة عملية:
-
مراقبة الذاكرة المخصصة مقابل الذاكرة المحجوزة (خاصة بالإطار) ( دلالات PyTorch CUDA: مُخصِّص التخزين المؤقت )
-
لا داعي للذعر عند رؤية الرقم المخيف الأول 😅
٨) اجعل وحدة معالجة الرسومات تعمل بكفاءة - ضبط الأداء الذي يستحق وقتك 🏎️
إنّ تشغيل "تدريب وحدة معالجة الرسومات" هو الخطوة الأولى. أما إنجازه بسرعة فهو الخطوة الثانية.
تحسينات ذات تأثير كبير
-
قم بزيادة حجم الدفعة (حتى يصبح الأمر مؤلماً، ثم خففه قليلاً)
-
استخدم الذاكرة المثبتة في مُحمّلات البيانات (نسخ أسرع من المضيف إلى الجهاز) ( دليل ضبط أداء PyTorch ، برنامج تعليمي حول pin_memory/non_blocking في PyTorch )
-
زيادة عدد عمال تحميل البيانات (احذر، فالإفراط في ذلك قد يؤدي إلى نتائج عكسية) ( دليل ضبط أداء PyTorch )
-
يقوم النظام بجلب البيانات مسبقًا حتى لا تبقى وحدة معالجة الرسومات في وضع الخمول
-
استخدم عمليات مدمجة / نواة محسّنة عند توفرها
-
استخدم الدقة المختلطة (مرة أخرى، إنها جيدة جدًا) ( وثائق PyTorch AMP )
أكثر نقاط الاختناق التي يتم تجاهلها
خط أنابيب التخزين والمعالجة المسبقة. إذا كانت مجموعة البيانات ضخمة ومخزنة على قرص بطيء، فإن وحدة معالجة الرسومات (GPU) ستتحول إلى مصدر طاقة باهظ الثمن. مصدر طاقة متطور للغاية ولامع للغاية.
أيضًا، اعتراف صغير: لقد "حسّنت" نموذجًا لمدة ساعة كاملة لأكتشف أن عملية تسجيل البيانات هي السبب الرئيسي للبطء. طباعة الكثير من البيانات قد تبطئ عملية التدريب. نعم، هذا صحيح.
9) التدريب على وحدات معالجة الرسومات المتعددة - DDP وNCCL والتوسع بدون فوضى 🧩🤝
عندما ترغب في سرعة أكبر أو نماذج أكبر، ستلجأ إلى استخدام وحدات معالجة رسومية متعددة. وهنا تبدأ الأمور بالتعقيد.
الأساليب الشائعة
-
معالجة البيانات المتوازية (DDP)
-
تقسيم الدُفعات عبر وحدات معالجة الرسومات، ومزامنة التدرجات
-
عادةً ما يكون الخيار الافتراضي "جيد" ( وثائق PyTorch DDP )
-
-
التوازي النموذجي / التوازي الموتري
-
قم بتقسيم النموذج على وحدات معالجة الرسومات (للنماذج الكبيرة جدًا)
-
-
خط الأنابيب الموازي
-
قسّم طبقات النموذج إلى مراحل (مثل خط التجميع، ولكن بالنسبة للموترات)
-
إذا كنت مبتدئًا، فإن التدريب بأسلوب DDP هو الخيار الأمثل. ( دليل PyTorch DDP )
نصائح عملية حول استخدام وحدات معالجة الرسومات المتعددة
-
تأكد من أن وحدات معالجة الرسومات (GPUs) تتمتع بقدرات مماثلة (قد يؤدي المزج بينها إلى حدوث اختناق)
-
مراقبة الربط البيني: أهمية NVLink مقابل PCIe لأحمال العمل التي تتطلب مزامنة مكثفة ( نظرة عامة على NVIDIA NVLink ، وثائق NVIDIA NVLink )
-
حافظ على توازن أحجام الدفعات لكل وحدة معالجة رسومية
-
لا تتجاهل وحدة المعالجة المركزية والتخزين - فاستخدام وحدات معالجة رسومية متعددة قد يزيد من اختناقات البيانات
نعم، قد تبدو أخطاء المجلس الوطني لشهادات الاحتيال (NCCL) لغزًا محيرًا، يكتنفه الغموض، ويطرح تساؤلات من قبيل "لماذا الآن؟". لستَ ملعونًا. على الأرجح. ( نظرة عامة على المجلس الوطني لشهادات الاحتيال (NCCL ))
10) المراقبة والتحليل - الأمور غير الجذابة التي توفر لك ساعات 📈🧯
لا تحتاج إلى لوحات تحكم متطورة للبدء. ما عليك سوى ملاحظة وجود خلل ما.
إشارات رئيسية يجب مراقبتها
-
استخدام وحدة معالجة الرسومات : هل هو مرتفع باستمرار أم متذبذب؟
-
استخدام الذاكرة : مستقر، أم متزايد، أم غريب؟
-
استهلاك الطاقة : قد يعني انخفاضه بشكل غير معتاد عدم الاستخدام الأمثل
-
درجات الحرارة : يمكن أن تؤدي درجات الحرارة المرتفعة المستمرة إلى تقليل الأداء
-
استخدام وحدة المعالجة المركزية : تظهر مشاكل خط أنابيب البيانات هنا ( دليل ضبط أداء PyTorch )
تحليل العقلية (نسخة مبسطة)
-
إذا كان استخدام وحدة معالجة الرسومات منخفضًا، فهذا يشير إلى وجود اختناق في البيانات أو وحدة المعالجة المركزية
-
إذا كان أداء وحدة معالجة الرسومات مرتفعًا ولكنه بطيء - فقد يكون ذلك بسبب عدم كفاءة النواة أو دقتها أو بنية النموذج
-
إذا انخفضت سرعة التدريب بشكل عشوائي - فقد يكون السبب هو التقييد الحراري، أو العمليات الخلفية، أو مشاكل الإدخال/الإخراج
أعلم أن المراقبة تبدو غير ممتعة. لكنها مثل تنظيف الأسنان بالخيط. مزعجة، ثم فجأة تتحسن حياتك.
11) استكشاف الأخطاء وإصلاحها - الأسباب الشائعة (والأسباب الأقل شيوعًا) 🧰😵💫
هذا القسم باختصار: "نفس القضايا الخمس، إلى الأبد"
المشكلة: نفاد ذاكرة CUDA
الإصلاحات:
-
تقليل حجم الدفعة
-
استخدم الدقة المختلطة ( وثائق PyTorch AMP ، دليل الدقة المختلطة في TensorFlow )
-
تراكم التدرج ( وثائق تدريب Transformers (تراكم التدرج، fp16) )
-
تفعيل نقاط التفتيش ( torch.utils.checkpoint )
-
إغلاق عمليات وحدة معالجة الرسومات الأخرى
المشكلة: يتم تشغيل التدريب على وحدة المعالجة المركزية عن طريق الخطأ
الإصلاحات:
-
تأكد من نقل النموذج إلى
CUDA -
تأكد من نقل الموترات إلى
CUDA -
تحقق من إعدادات الجهاز الخاصة بالإطار ( وثائق PyTorch CUDA )
المشكلة: أعطال غريبة أو وصول غير مصرح به إلى الذاكرة
الإصلاحات:
-
تأكيد توافق برنامج التشغيل ووقت التشغيل ( PyTorch Get Started (CUDA selector) ، TensorFlow install (pip) )
-
جرب بيئة نظيفة
-
تقليل العمليات المخصصة
-
أعد تشغيلها بإعدادات شبه حتمية لإعادة إنتاجها
المشكلة: أبطأ من المتوقع
الإصلاحات:
-
تحقق من معدل نقل البيانات ( دليل ضبط أداء PyTorch )
-
زيادة حجم الدفعة
-
تقليل التسجيل
-
تفعيل الدقة المختلطة ( وثائق PyTorch AMP )
-
تحليل وقت خطوة الملف الشخصي
المشكلة: توقف النظام عند استخدام عدة وحدات معالجة رسومية
الإصلاحات:
-
تأكد من صحة إعدادات الواجهة الخلفية ( وثائق PyTorch الموزعة )
-
تحقق من إعدادات بيئة NCCL (بحذر) ( نظرة عامة على NCCL )
-
اختبر وحدة معالجة الرسومات الفردية أولاً
-
تأكد من سلامة الشبكة / الربط البيني
ملاحظة جانبية بسيطة: أحيانًا يكون الحل هو إعادة تشغيل الجهاز حرفيًا. قد يبدو الأمر سخيفًا، لكنه فعال. هكذا هي أجهزة الكمبيوتر.
12) التكلفة والجدوى - اختيار وحدة معالجة الرسومات NVIDIA المناسبة والإعداد الأمثل دون التفكير الزائد في التكلفة 💸🧠
لا يحتاج كل مشروع إلى أكبر وحدة معالجة رسومية. أحيانًا تحتاج إلى كافية .
إذا كنت تقوم بضبط النماذج المتوسطة بدقة
-
أعط الأولوية لذاكرة الوصول العشوائي للفيديو والاستقرار
-
تساعد الدقة المختلطة كثيرًا ( وثائق PyTorch AMP ، دليل الدقة المختلطة في TensorFlow )
-
يمكنك في كثير من الأحيان الاكتفاء بوحدة معالجة رسومات قوية واحدة
إذا كنت تقوم بتدريب نماذج أكبر من الصفر
-
ستحتاج إلى وحدات معالجة رسومات متعددة أو ذاكرة وصول عشوائي للفيديو كبيرة جدًا
-
ستهتم بتقنية NVLink وسرعة الاتصال ( نظرة عامة على NVIDIA NVLink ، نظرة عامة على NCCL )
-
من المحتمل أن تستخدم مُحسِّنات الذاكرة (ZeRO، والتفريغ، وما إلى ذلك) ( وثائق DeepSpeed ZeRO ، أبحاث مايكروسوفت: ZeRO/DeepSpeed )
إذا كنت تجري تجارب
-
تريد تكرارًا سريعًا
-
لا تنفق كل أموالك على وحدة معالجة الرسومات (GPU) ثم تهمل مساحة التخزين وذاكرة الوصول العشوائي (RAM)
-
النظام المتوازن يتفوق على النظام غير المتوازن (في معظم الأيام)
والحقيقة أنك قد تُهدر أسابيع في البحث عن خيارات مثالية للأجهزة. ابنِ شيئًا عمليًا، وقِسْه، ثم عدّله. العدو الحقيقي هو غياب آلية التغذية الراجعة.
ملاحظات ختامية - كيفية استخدام وحدات معالجة الرسومات من NVIDIA لتدريب الذكاء الاصطناعي دون أن تفقد صوابك 😌✅
إذا لم تستفد من هذا الدليل حول كيفية استخدام وحدات معالجة الرسومات من NVIDIA لتدريب الذكاء الاصطناعي ، فليكن هذا:
-
تأكد
nvidia-smiيعمل ( وثائق NVIDIA nvidia-smi ) -
اختر مسارًا برمجيًا نظيفًا (غالبًا ما يكون CUDA المدمج في الإطار هو الأسهل) ( PyTorch Get Started (CUDA selector) )
-
تحقق من صحة عملية تدريب وحدة معالجة الرسومات الصغيرة قبل التوسع ( torch.cuda.is_available )
-
تعامل مع ذاكرة الوصول العشوائي للفيديو (VRAM) كما لو كانت رفًا محدودًا في خزانة المؤن
-
استخدم الدقة المختلطة مبكراً - فهي ليست مجرد "أشياء متقدمة" ( وثائق PyTorch AMP ، دليل الدقة المختلطة في TensorFlow )
-
إذا كان الأداء بطيئًا، فاشتبه في مُحمِّل البيانات وعمليات الإدخال/الإخراج قبل إلقاء اللوم على وحدة معالجة الرسومات ( دليل ضبط أداء PyTorch )
-
تُعدّ تقنية تعدد وحدات معالجة الرسومات قوية ولكنها تضيف تعقيدًا - لذا يجب التوسع تدريجيًا ( وثائق PyTorch DDP ، نظرة عامة على NCCL ).
-
راقب الاستخدام ودرجات الحرارة حتى تظهر المشاكل مبكراً ( وثائق NVIDIA nvidia-smi )
التدريب على معالجات الرسوميات من NVIDIA هو أحد تلك المهارات التي تبدو مخيفة في البداية، ثم فجأة تصبح طبيعية تمامًا. تمامًا مثل تعلم القيادة. في البداية، يكون كل شيء صاخبًا ومربكًا، وتضغط على عجلة القيادة بقوة. ثم في يوم من الأيام، تجد نفسك تقود بسلاسة، تحتسي قهوتك، وتصحح مشكلة في حجم الدفعة وكأن الأمر لا يستحق كل هذا العناء ☕😄
التعليمات
ما معنى تدريب نموذج الذكاء الاصطناعي على وحدة معالجة الرسومات من إنفيديا
يعني التدريب على وحدة معالجة رسومية من NVIDIA أن معلمات النموذج ومجموعات التدريب تُخزَّن في ذاكرة الوصول العشوائي للرسومات (VRAM) الخاصة بوحدة المعالجة الرسومية، بينما تُنفَّذ العمليات الحسابية المعقدة (التمرير الأمامي، والانتشار العكسي، وخطوات المُحسِّن) عبر نواة CUDA. عمليًا، غالبًا ما يتطلب ذلك ضمان وجود النموذج والموترات على CUDA ، ثم مراقبة الذاكرة، والاستخدام، ودرجات الحرارة لضمان ثبات الإنتاجية.
كيفية التأكد من أن وحدة معالجة الرسومات من NVIDIA تعمل قبل تثبيت أي شيء آخر
ابدأ بـ nvidia-smi . من المفترض أن يُظهر اسم وحدة معالجة الرسومات، وإصدار برنامج التشغيل، واستخدام الذاكرة الحالي، وأي عمليات قيد التشغيل. إذا nvidia-smi ، فتأجل استخدام PyTorch/TensorFlow/JAX - أصلح مشكلة ظهور برنامج التشغيل أولًا. هذا هو الفحص الأساسي للتأكد من جاهزية وحدة معالجة الرسومات للتدريب.
الاختيار بين CUDA النظامي وCUDA المدمج مع PyTorch
يُعدّ استخدام CUDA المدمجة في إطار العمل (مثل العديد من حزم PyTorch) نهجًا شائعًا لأنه يُقلّل من عدد المكونات المُعقّدة - إذ يكفي وجود برنامج تشغيل NVIDIA متوافق. يوفر تثبيت مجموعة أدوات CUDA الكاملة للنظام مزيدًا من التحكم (بناء مخصص، عمليات تجميع)، ولكنه يُزيد أيضًا من احتمالية حدوث عدم توافق في الإصدارات وأخطاء تشغيل مُربكة.
لماذا قد يظل التدريب بطيئًا حتى مع وحدة معالجة الرسومات من إنفيديا
في كثير من الأحيان، يُعاني معالج الرسوميات (GPU) من نقص الموارد بسبب تدفق البيانات. فبطء مُحمّلات البيانات، وكثافة معالجة وحدة المعالجة المركزية (CPU) المسبقة خلال مرحلة التدريب، وصغر حجم الدُفعات، وبطء التخزين، كلها عوامل قد تجعل معالج الرسوميات القوي يتصرف كجهاز تسخين خامل. ومن الخطوات الشائعة قبل إلقاء اللوم على النموذج: زيادة عدد مُحمّلات البيانات العاملة، وتفعيل الذاكرة المُثبّتة، وإضافة جلب البيانات المُسبق، وتقليل حجم السجلات.
كيفية تجنب أخطاء "نفاد ذاكرة CUDA" أثناء تدريب وحدة معالجة الرسومات NVIDIA
تعتمد معظم الحلول على تقنيات إدارة ذاكرة الوصول العشوائي للفيديو (VRAM): تقليل حجم الدفعة، وتفعيل الدقة المختلطة (FP16/BF16)، واستخدام تراكم التدرج، وتقصير طول التسلسل/حجم الاقتصاص، أو استخدام نقاط التحقق من التنشيط. تحقق أيضًا من وجود عمليات أخرى لوحدة معالجة الرسومات (GPU) تستهلك الذاكرة. بعض التجربة والخطأ أمر طبيعي - تصبح إدارة ذاكرة الوصول العشوائي للفيديو عادةً أساسية في التدريب العملي على وحدة معالجة الرسومات.
لماذا قد تبدو ذاكرة الوصول العشوائي للفيديو (VRAM) ممتلئة بعد انتهاء نص التدريب؟
غالبًا ما تُخزّن الأطر البرمجية ذاكرة وحدة معالجة الرسومات مؤقتًا لتحسين السرعة، لذا قد تبقى الذاكرة المحجوزة مرتفعة حتى عند انخفاض الذاكرة المخصصة. قد يبدو هذا وكأنه تسريب، ولكنه في الغالب ناتج عن آلية عمل مُخصِّص الذاكرة المؤقتة. من الأفضل تتبع هذا النمط بمرور الوقت ومقارنة "الذاكرة المخصصة مقابل الذاكرة المحجوزة" بدلًا من التركيز على لقطة واحدة مثيرة للقلق.
كيفية التأكد من أن النموذج لا يتم تدريبه سراً على وحدة المعالجة المركزية
تحقق من سلامة البيانات مبكرًا: تأكد من أن الدالة `torch.cuda.is_available()` تُرجع القيمة `True` ، وتحقق من أن `next(model.parameters()).device` تُظهر CUDA ، ثم قم بتشغيل عملية تمرير أمامي واحدة دون أخطاء. إذا شعرت ببطء ملحوظ في الأداء، فتأكد أيضًا من نقل دفعات البيانات إلى وحدة معالجة الرسومات (GPU). من الشائع نقل النموذج وترك البيانات في مكانها عن طريق الخطأ.
أسهل طريق للتدريب على استخدام وحدات معالجة الرسومات المتعددة
غالبًا ما تكون المعالجة المتوازية للبيانات (تدريب بنمط DDP) هي الخطوة الأولى الأمثل: تقسيم الدُفعات على وحدات معالجة الرسومات (GPUs) ومزامنة التدرجات. يمكن لأدوات مثل Accelerate أن تجعل استخدام وحدات معالجة الرسومات المتعددة أقل تعقيدًا دون الحاجة إلى إعادة كتابة كاملة. توقع وجود متغيرات إضافية - مثل اتصال NCCL، واختلافات في الربط البيني (NVLink مقابل PCIe)، واختناقات بيانات مُضخّمة - لذا فإن التوسع التدريجي بعد تشغيل ناجح على وحدة معالجة رسومات واحدة يُفضّل أن يكون أكثر فعالية.
ما يجب مراقبته أثناء تدريب وحدة معالجة الرسومات من NVIDIA لاكتشاف المشاكل مبكراً
راقب استخدام وحدة معالجة الرسومات، واستخدام الذاكرة (مستقر أم متزايد)، واستهلاك الطاقة، ودرجات الحرارة - فقد يؤدي خفض التردد إلى استنزاف السرعة دون أن تشعر. راقب أيضًا استخدام وحدة المعالجة المركزية، حيث غالبًا ما تظهر مشاكل خط أنابيب البيانات هناك أولًا. إذا كان الاستخدام متذبذبًا أو منخفضًا، فاشتبه في عمليات الإدخال/الإخراج أو مُحمِّلات البيانات؛ إذا كان الاستخدام مرتفعًا ولكن وقت الخطوة لا يزال بطيئًا، فقم بتحليل أداء النوى، ووضع الدقة، وتفاصيل وقت الخطوة.
مراجع
-
إنفيديا - وثائق إنفيديا nvidia-smi - docs.nvidia.com
-
إنفيديا - واجهة إدارة نظام إنفيديا (NVSMI) - developer.nvidia.com
-
إنفيديا - نظرة عامة على تقنية إنفيديا إن في لينك - nvidia.com
-
PyTorch - دليل البدء السريع مع PyTorch (محدد CUDA) - pytorch.org
-
PyTorch - وثائق PyTorch CUDA - docs.pytorch.org
-
TensorFlow - تثبيت TensorFlow (pip) - tensorflow.org
-
JAX - دليل البدء السريع لـ JAX - docs.jax.dev
-
Hugging Face - وثائق المدرب - huggingface.co
-
الذكاء الاصطناعي في Lightning - وثائق Lightning - lightning.ai
-
ديب سبيد - وثائق بدون رسوم - deepspeed.readthedocs.io
-
أبحاث مايكروسوفت - أبحاث مايكروسوفت: زيرو/ديب سبيد - microsoft.com
-
منتديات PyTorch - منتدى PyTorch: التحقق من النموذج على CUDA - discuss.pytorch.org