مقدمة
YOLOv8، الذي تم تطويره بواسطة Ultralytics في عام 2023، أصبح واحدًا من الخوارزميات الفريدة لكشف الكائنات في سلسلة YOLO ويأتي مع تحسينات كبيرة في الهيكل والأداء مقارنة بسابقيه، مثل YOLOv5. تشمل هذه التحسينات هيكل CSPNet لاستخراج الميزات بشكل أفضل، ورقبة FPN+PAN لتحسين كشف الكائنات متعدد المقاييس، والانتقال إلى نهج خالٍ من المراسي. هذه التغييرات تحسن بشكل كبير دقة النموذج وكفاءته وقابليته للاستخدام في الكشف عن الكائنات في الوقت الفعلي.
استخدام وحدة معالجة الرسوميات (GPU) مع YOLOv8 يمكن أن يعزز الأداء بشكل كبير لمهام كشف الكائنات، مما يوفر تدريبًا واستدلالًا أسرع. ستوجهك هذه الدليل خلال إعداد YOLOv8 لاستخدام GPU، بما في ذلك التهيئة، وحل المشكلات، ونصائح التحسين.
YOLOv8
يبني YOLOv8 على أسلافه بتصميم شبكة عصبية متقدمة وتقنيات تدريب لتعزيز الأداء في كشف الأشياء. إنه يوحد تحديد موقع الكائنات وتصنيفها في إطار عمل واحد فعال، مع تحقيق توازن بين السرعة والدقة. تتكون البنية المعمارية من ثلاثة مكونات رئيسية:
- العمود الفقري: عمود فقري CNN محسن للغاية، قد يكون مستندًا إلى CSPDarknet، يستخرج ميزات متعددة المقاييس باستخدام طبقات فعالة مثل الالتفافات القابلة للفصل حسب العمق، مما يضمن أداءً عاليًا مع الحد الأدنى من العبء الحاسوبي.
- العنق: شبكة تحسين مسار التجميع (PANet) المحسنة تقوم بتنقيح ودمج الميزات متعددة المقاييس لتحسين اكتشاف الكائنات عبر أحجام مختلفة. إنها محسّنة من حيث الكفاءة واستخدام الذاكرة.
- الرأس: يتنبأ الرأس الخالي من المراسي بالصناديق المحيطة، ودرجات الثقة، وعلامات الفئة، مما يبسط التنبؤات ويحسن التكيف مع أشكال وأحجام الكائنات المتنوعة.
تجعل هذه الابتكارات YOLOv8 أسرع وأكثر دقة ومرونة لمهام كشف الأشياء الحديثة. علاوة على ذلك، يقدم YOLOv8 نهجًا خاليًا من المراسي لتنبؤ الصناديق المحيطة، مبتعدًا عن الأساليب المعتمدة على المراسي في الإصدارات السابقة.
لماذا استخدام وحدة معالجة الرسوميات مع YOLOv8؟
YOLOv8 (أنت تنظر مرة واحدة فقط، الإصدار 8) هو إطار قوي لاكتشاف الأجسام. بينما يمكن تشغيله على وحدات المعالجة المركزية، فإن استخدام وحدة معالجة الرسوميات يوفر بعض الفوائد الرئيسية، مثل:
- السرعة: تتعامل وحدات معالجة الرسوميات مع العمليات المتوازية بكفاءة أكبر، مما يقلل من أوقات التدريب والاستدلال.
- قابلية التوسع: يمكن إدارة مجموعات بيانات ونماذج أكبر باستخدام وحدات معالجة الرسوميات.
- أداء معزز: يصبح اكتشاف الأجسام في الوقت الحقيقي ممكنًا، مما يتيح تطبيقات مثل المركبات ذاتية القيادة، والمراقبة، ومعالجة الفيديو المباشر.
تعتبر وحدات معالجة الرسوميات الخيار الواضح لتحقيق نتائج أسرع والتعامل مع مهام أكثر تعقيدًا باستخدام YOLOv8.
وحدة المعالجة المركزية مقابل وحدة معالجة الرسوميات
أثناء العمل مع YOLOv8 أو أي نموذج للكشف عن الأشياء، يمكن أن يؤثر الاختيار بين وحدة المعالجة المركزية (CPU) ووحدة معالجة الرسوميات (GPU) بشكل كبير على أداء النموذج لكل من التدريب والاستدلال. تعتبر وحدات المعالجة المركزية، كما نعلم، رائعة للأغراض العامة ويمكنها التعامل بكفاءة مع المهام الصغيرة. ومع ذلك، تفشل وحدات المعالجة المركزية عندما تصبح المهمة مكلفة حسابيًا. تتطلب مهام مثل الكشف عن الأشياء السرعة والحوسبة المتوازية، وقد تم تصميم وحدات معالجة الرسوميات للتعامل مع مهام المعالجة المتوازية عالية الأداء. لذلك، فهي مثالية لتشغيل نماذج التعلم العميق مثل YOLO. على سبيل المثال، يمكن أن يكون التدريب والاستدلال على وحدة معالجة الرسوميات أسرع بـ 10-50 مرة من على وحدة المعالجة المركزية، اعتمادًا على الأجهزة وحجم النموذج.
Aspect | CPU | GPU |
---|---|---|
زمن الاستدلال (لكل صورة) | ~500 مللي ثانية | ~15 مللي ثانية |
سرعة التدريب (عصور/ساعة) | ~2 عصور/ساعة | ~30 عصور/ساعة |
قدرة حجم الدفعة | صغيرة (2-4 صور) | كبيرة (16-32 صورة) |
أداء الوقت الحقيقي | لا | نعم |
المعالجة المتوازية | محدودة | ممتازة (آلاف النوى) |
كفاءة الطاقة | أقل للمهام الكبيرة | أعلى للأحمال المتوازية |
كفاءة التكلفة | مناسب للمهام الصغيرة | مثالي لأي مهام تعلم عميق |
يصبح الفارق أكثر وضوحًا أثناء التدريب، حيث تقوم وحدات GPU بتقصير فترات التدريب بشكل كبير مقارنة بالوحدات المركزية. يتيح هذا الارتفاع في السرعة للوحدات GPU معالجة مجموعات بيانات أكبر وأداء كشف الكائنات في الوقت الحقيقي بكفاءة أكبر.
المتطلبات الأساسية لاستخدام YOLOv8 مع وحدة GPU
قبل تكوين YOLOv8 للعمل مع وحدة GPU، تأكد من توفرك على الشروط التالية:
1. متطلبات الأجهزة
- بطاقة NVIDIA GPU: يعتمد YOLOv8 على CUDA لتسريع العمليات على وحدة GPU، لذا ستحتاج إلى بطاقة NVIDIA GPU تحتوي على قدرة حوسبة CUDA بقيمة 6.0 أو أعلى.
- الذاكرة: يُوصى بتوفر ما لا يقل عن 8 جيجابايت من ذاكرة GPU لمجموعات بيانات معتدلة. بالنسبة لمجموعات بيانات أكبر، يُفضل توفر 16 جيجابايت أو أكثر.
2. متطلبات البرمجيات
- بايثون: النسخة 3.8 أو أحدث.
- باي تورش: مثبت مع دعم GPU (عبر CUDA). يفضل استخدام GPU من NVIDIA.
- CUDA Toolkit و cuDNN: تأكد من توافق هذه مع إصدار باي تورش لديك.
- YOLOv8: يمكن تثبيته من مستودع أولتراليتيكس.
3. متطلبات القيادة
- قم بتنزيل وتثبيت أحدث برامج تشغيل NVIDIA من موقع NVIDIA.
- تحقق من توفر GPU لديك باستخدام
nvidia-smi
بعد تثبيت برنامج التشغيل.
دليل خطوة بخطوة لتكوين YOLOv8 لـ GPU
1. تثبيت برامج تشغيل NVIDIA
لتثبيت برامج تشغيل NVIDIA:
- حدد GPU الخاص بك باستخدام الكود أدناه:
- زور صفحة تنزيل تعريفات NVIDIA وقم بتنزيل التعريف المناسب.
- اتبع تعليمات التثبيت لنظام التشغيل الخاص بك.
- أعد تشغيل الحاسوب لتطبيق التغييرات.
- تحقق من التثبيت عن طريق تشغيل:
- هذا الأمر يعرض معلومات وحدة المعالجة الرسومية ويؤكد على وظائف التعريف.
2. قم بتثبيت مجموعة أدوات CUDA وcuDNN
لاستخدام YOLOv8، نحتاج إلى اختيار الإصدار المناسب من PyTorch، والذي يتطلب بدوره إصدار CUDA.
خطوات تثبيت مجموعة أدوات CUDA
- قم بتنزيل الإصدار المناسب من مجموعة أدوات CUDA من موقع مطوري NVIDIA.
- قم بتثبيت مجموعة أدوات CUDA وضبط المتغيرات البيئية (مثل
PATH
,LD_LIBRARY_PATH
). - تحقق من التثبيت عن طريق تشغيل:
ضمان أن لديك أحدث إصدار من CUDA سيسمح لـ PyTorch باستخدام وحدة المعالجة الرسومية بفعالية
خطوات تثبيت cuDNN
- قم بتنزيل cuDNN من موقع NVIDIA Developer.
- استخراج المحتويات ونسخها إلى الدلائل المناسبة لـ CUDA (مثل
bin
،include
،lib
). - تأكد من أن إصدار cuDNN يتطابق مع تثبيت CUDA الخاص بك.
3. تثبيت PyTorch مع دعم GPU
لتثبيت PyTorch مع دعم GPU، قم بزيارة صفحة البدء الخاصة بـ PyTorch واختر أمر التثبيت المناسب. على سبيل المثال:
4. تثبيت وتشغيل YOLOv8
قم بتثبيت YOLOv8 من خلال اتباع هذه الخطوات:
- قم بتثبيت Ultralytics للعمل مع yolov8 واستيراد المكتبات الضرورية
- مثال على سكربت بايثون:
- مثال لسطر الأوامر:
5. تحقق من تكوين وحدة المعالجة الرسومية في YOLOv8
استخدم الأمر البرمجي التالي بلغة Python للتحقق مما إذا كانت وحدة المعالجة الرسومية الخاصة بك مكتشفة وتم تمكين CUDA:
6. قم بتدريب أو التحليل باستخدام وحدة المعالجة الرسومية
حدد الجهاز كـ cuda
في أوامر التدريب أو التحليل الخاصة بك:
مثال لسطر الأوامر
تحقق من النموذج المخصص
مثال على سكربت Python
لماذا قطرات GPU من DigitalOcean؟
تم تصميم قطرات GPU من DigitalOcean للتعامل مع مهام الذكاء الاصطناعي والتعلم الآلي عالية الأداء. تعمل H100s على تشغيل هذه القطرات لتقديم سرعة استثنائية وقدرات معالجة متوازية، مما يجعلها مثالية لتدريب وتشغيل نماذج YOLOv8 بكفاءة. بالإضافة إلى ذلك، يتم تثبيت هذه القطرات مسبقًا بأحدث إصدار من CUDA، مما يضمن لك بدء الاستفادة من تسريع GPU دون قضاء وقت في التكوينات اليدوية. تسمح لك هذه البيئة المنسقة بالتركيز تمامًا على تحسين نماذج YOLOv8 الخاصة بك وتوسيع مشاريعك بسهولة.
استكشاف المشكلات الشائعة
1. YOLOv8 لا يستخدم وحدة معالجة الرسومات (GPU)
- تحقق من توفر GPU باستخدام
- تحقق من توافق CUDA وPyTorch.
- تأكد من تحديد
device=0
أوdevice='cuda'
في الأوامر أو السكريبتات. - قم بتحديث برامج تشغيل NVIDIA وأعد تثبيت مجموعة أدوات CUDA إذا لزم الأمر.
2. أخطاء CUDA
- تأكد من أن إصدار مجموعة أدوات CUDA يتوافق مع متطلبات PyTorch.
- تحقق من تثبيت cuDNN عن طريق تشغيل سكريبتات تشخيصية.
- تحقق من متغيرات البيئة لـ CUDA (
PATH
وLD_LIBRARY_PATH
).
3. أداء بطيء
- قم بتمكين تدريب الدقة المختلطة لتحسين استخدام الذاكرة والسرعة:
- قلل حجم الدفعة إذا كان استخدام الذاكرة مرتفعًا جدًا.
- تأكد من أن لديك نظامًا محسنًا لتشغيل المعالجة المتوازية، واعتبر استخدام المعالجة الدفعة في سكريبت الكشف الخاص بك لتحسين الأداء.
الأسئلة الشائعة
كيف يمكنني تمكين وحدة معالجة الرسومات (GPU) لـ YOLOv8؟
حدد device='cuda'
أو device=0
(إذا كنت تستخدم أول وحدة معالجة رسومات) في الأوامر أو النصوص الخاصة بك عند تحميل النموذج. سيتيح هذا لـ YOLOv8 استخدام وحدة معالجة الرسومات للحوسبة الأسرع أثناء الاستدلال والتدريب. تأكد من إعداد وحدة معالجة الرسومات الخاصة بك بشكل صحيح وكشفها.
لماذا لا يستخدم YOLOv8 وحدة معالجة الرسومات (GPU) الخاصة بي؟
قد لا يكون YOLOv8 يستخدم وحدة معالجة الرسومات إذا كانت هناك مشاكل في الأجهزة، أو البرامج التشغيلية، أو الإعداد.
للبدء، تحقق من تثبيت CUDA وتوافقه مع PyTorch. حدث البرامج التشغيل إذا لزم الأمر. تأكد من توافق CUDA و CuDNN مع تثبيت PyTorch الخاص بك.
قم بتثبيت torchvision وتحقق من التكوين الذي يتم تثبيته واستخدامه.
بالإضافة إلى ذلك، إذا لم يتم تثبيت PyTorch بدعم لوحدة معالجة الرسومات (على سبيل المثال، إصدار يعمل على وحدة المعالجة المركزية فقط)، أو قد لا يتم تعيين معلمة device
في أوامر YOLOv8 الخاصة بك بشكل صريح إلى cuda
. يمكن أيضًا أن يؤدي تشغيل YOLOv8 على نظام لا يحتوي على وحدة معالجة رسومات متوافقة مع CUDA أو ذاكرة الوصول العشوائي الافتراضية (VRAM) غير كافية إلى جعله يعتمد على الوحدة المركزية.
لحل هذه المشكلة، تأكد من أن وحدة المعالجة الرسومية (GPU) لديك تدعم CUDA، تحقق من تثبيت جميع الاعتماديات المطلوبة، تحقق من أن torch.cuda.is_available()
يُرجع True
، وحدد صراحةً معلمة device='cuda'
في سكريبتات أو أوامر YOLOv8.
ما هي متطلبات الأجهزة لـ YOLOv8 على GPU؟
لتثبيت وتشغيل YOLOv8 بفعالية على وحدة معالجة رسومية، يُوصى باستخدام Python 3.7 أو أعلى، ويُعد وجود GPU متوافق مع CUDA شرطًا لازماً لاستخدام تسريع GPU.
يُنصح باستخدام GPU حديث من NVIDIA بذاكرة لا تقل عن 8 جيجابايت. بالنسبة لمجموعات البيانات الكبيرة، يكون المزيد من الذاكرة مفيدًا. لتحقيق الأداء الأمثل، يُوصى باستخدام Python 3.8 أو أحدث، PyTorch 1.10 أو أعلى، وGPU من NVIDIA متوافق مع CUDA 11.2+. يجب أن تحتوي وحدة المعالجة الرسومية على الأقل على 8 جيجابايت من VRAM للتعامل مع مجموعات بيانات متوسطة بكفاءة، على الرغم من أن المزيد من VRAM يكون مفيدًا لمجموعات البيانات الأكبر والنماذج المعقدة. بالإضافة إلى ذلك، يجب أن يحتوي نظامك على الأقل على 8 جيجابايت من RAM و50 جيجابايت من مساحة القرص الحرة لتخزين مجموعات البيانات وتسهيل تدريب النماذج. سيساعد التأكد من هذه التكوينات للأجهزة والبرامج في تحقيق تدريب واستدلال أسرع مع YOLOv8، خاصةً للمهام التي تتطلب حسابات كثيفة.
يرجى ملاحظة: قد لا تدعم وحدات معالجة الرسوميات من AMD CUDA، لذا فإن اختيار GPU من NVIDIA لتوافق YOLOv8 أمر ضروري.
هل يمكن لـ YOLOv8 العمل على عدة وحدات معالجة رسومات (GPUs)؟
لتدريب YOLOv8 باستخدام عدة وحدات معالجة رسومات، يمكنك استخدام DataParallel من PyTorch أو تحديد عدة أجهزة مباشرة (مثل cuda:0,1
). للتدريب الموزع، يستخدم YOLOv8 بشكل افتراضي Multi-GPU DistributedDataParallel من PyTorch. تأكد من أن نظامك يحتوي على عدة وحدات معالجة رسومات متاحة وحدد وحدات المعالجة التي تريد استخدامها في سكربت التدريب أو سطر الأوامر. على سبيل المثال، قم بتعيين --device 0,1,2,3
في واجهة سطر الأوامر أو device=[0,1,2,3]
في بايثون لاستخدام وحدات المعالجة 0 و1 و2 و3. يتولى YOLOv8 تلقائيًا إدارة التدريب المتوازي عبر وحدات المعالجة المحددة دون الحاجة إلى استخدام وسيلة data_parallel
بشكل صريح. بينما يتم استخدام جميع وحدات المعالجة أثناء التدريب، فإن مرحلة التحقق عادةً ما تعمل على وحدة معالجة واحدة بشكل افتراضي، لأنها أقل استهلاكًا للموارد من التدريب.
كيف يمكنني تحسين YOLOv8 للاستنتاج على وحدة معالجة الرسومات؟
قم بتمكين الدقة المختلطة وضبط حجم الدفعات لتحقيق توازن بين الذاكرة والسرعة. اعتمادًا على مجموعة البيانات الخاصة بك، يتطلب تدريب YOLOv8 قدرًا كبيرًا من قوة الحوسبة للعمل بكفاءة. استخدم نموذجًا أصغر أو إصدارًا كموميًا (مثل YOLOv8n أو الإصدارات الكمية INT8) لتقليل استخدام الذاكرة ووقت الاستدلال. في سكربت الاستدلال الخاص بك، قم بتعيين معلمة device
بشكل صريح إلى cuda
للتنفيذ على GPU. استخدم تقنيات مثل الاستدلال بالدفعات لمعالجة صور متعددة في وقت واحد وزيادة استخدام GPU إلى الحد الأقصى. إذا كان ذلك ممكنًا، استخدم TensorRT لتحسين النموذج بشكل إضافي لزيادة سرعة الاستدلال على GPU. راقب بانتظام ذاكرة GPU والأداء لضمان استخدام الموارد بكفاءة.
سيتيح لك جزء الكود أدناه معالجة الصور بالتوازي ضمن حجم الدفعة المحدد.
إذا كنت تستخدم واجهة سطر الأوامر، حدد حجم الدفعة باستخدام -b أو –batch-size. مع Python، تأكد من تعيين وسيلة الدفعة بشكل صحيح عند تهيئة النموذج الخاص بك أو استدعاء طريقة التنبؤ.
كيف يمكنني حل مشاكل نفاد الذاكرة في CUDA؟
لحل أخطاء نفاد ذاكرة CUDA، قلل من حجم الدُفعة التحقق في ملف تكوين YOLOv8 الخاص بك، حيث تتطلب الدُفعات الأصغر أقل ذاكرة GPU. بالإضافة إلى ذلك، إذا كان لديك وصول إلى عدة وحدات GPU، فكر في توزيع عملية التحقق عبرها باستخدام DistributedDataParallel
في PyTorch أو وظائف مماثلة، ولكن هذا يتطلب معرفة متقدمة بـ PyTorch. يمكنك أيضًا محاولة تنظيف الذاكرة المخبأة باستخدام torch.cuda.empty_cache()
في سيناريو الخاص بك والتأكد من عدم تشغيل عمليات غير ضرورية على وحدة GPU الخاصة بك. يمكن اعتبار الترقية إلى وحدة GPU تحتوي على VRAM أكبر أو تحسين نموذجك ومجموعة البيانات لتحقيق كفاءة أفضل في استهلاك الذاكرة خطوات إضافية للتخفيف من مثل هذه المشكلات.
الاستنتاج
تكوين YOLOv8 لاستخدام وحدة GPU هو عملية بسيطة يمكن أن تعزز الأداء بشكل كبير. من خلال اتباع هذا الدليل المفصل، يمكنك تسريع عملية التدريب والاستنتاج لمهام الكشف عن الكائنات الخاصة بك. قم بتحسين إعدادك، وتصحيح المشكلات الشائعة، واستفد من الإمكانيات الكاملة لـ YOLOv8 بتسريع الوحدة GPU.
المراجع
Source:
https://www.digitalocean.com/community/tutorials/yolov8-for-gpu-accelerate-object-detection