Yolo فيجن شنتشن
شنتشن
انضم الآن

انشرYOLOv5 Ultralytics YOLOv5 مع برنامج DeepSparse من Neural Magicللحصول على أداء GPU على وحدات المعالجة المركزية

فريق Ultralytics

5 دقائق قراءة

5 يناير 2023

قم بتمكين تدريب نموذج Ultralytics YOLOv5 ونشره باستخدام Neural Magic's DeepSparse لأداء GPU على وحدات المعالجة المركزية. تحقيق عمليات نشر YOLOv5 بشكل أسرع وقابل للتطوير.

هل ترغب في تسريع عملية تدريب ونشر YOLOv5 الخاص بك؟ لقد قمنا بتغطيتك! نقدم لك أحدث شركائنا، Neural Magic. نظرًا لأن Neural Magic توفر أدوات برمجية تؤكد على ذروة أداء النموذج وبساطة سير العمل، فمن الطبيعي أن نجتمع معًا لتقديم حل لجعل عملية نشرYOLOv5 أفضل.

DeepSparse هو وقت تشغيل الاستدلال CPU في Neural Magicوالذي يستفيد من التباعد والحسابات منخفضة الدقة داخل الشبكات العصبية لتقديم أداء استثنائي على الأجهزة السلعية. على سبيل المثال، بالمقارنة مع خط الأساس لوقت تشغيل ONNX يوفر DeepSparse سرعة 5.8 مرة لـ YOLOv5s التي تعمل على نفس الجهاز!

مقارنة إنتاجية YOLOv5 مع DeepSparse

لأول مرة، يمكن لأحمال عمل التعلم العميق الخاصة بك تلبية متطلبات أداء الإنتاج دون تعقيد وتكاليف مسرعات الأجهزة. ببساطة، يمنحك DeepSparse أداء وحدات معالجة الرسومات وبساطة البرنامج:

  1. عمليات نشر مرنة: يتم تشغيله باستمرار عبر السحابة ومركز البيانات والحافة مع أي مزود أجهزة.
  2. قابلية التوسع اللانهائية: قم بالتوسع باستخدام Kubernetes القياسي، أو عموديًا إلى مئات النوى، أو مجردة بالكامل باستخدام الحوسبة بدون خادم.
  3. سهولة التكامل: استخدم واجهات برمجة تطبيقات نظيفة لدمج النموذج الخاص بك في تطبيق ومراقبته في الإنتاج

تحقيق أداء GPU على وحدات المعالجة المركزية السلعية

يستفيد DeepSparse من تفرق النموذج للحصول على تسريع الأداء.

يسمح التقليل من خلال التقليم والتكميم بتخفيض الحجم والحساب اللازمين لتنفيذ الشبكة مع الحفاظ على دقة عالية. إن عملية DeepSparse مدركة للتشتت، حيث تتخطى عمليات الضرب المضاعفة للصفر وتقلص مقدار الحوسبة في التمرير الأمامي. نظرًا لأن الحوسبة المتفرقة مرتبطة بالذاكرة، فإن DeepSparse ينفذ الشبكة بعمق، ويقسم المشكلة إلى أعمدة Tensor Columns، وهي عبارة عن خطوط عمودية من الحوسبة التي تتناسب مع ذاكرة التخزين المؤقت.

شبكة DeepSparseYOLOv5

تسمح الشبكات المتفرقة ذات الحسابات المضغوطة التي يتم تنفيذها بعمق في ذاكرة التخزين المؤقت لـ DeepSparse بتقديم أداء GPU على وحدات المعالجة المركزية!

إنشاء إصدار متناثر من YOLOv5 مدرب على بيانات مخصصة

يحتوي مستودع نماذج Neural Magic المفتوح المصدر، SparseZoo، على نقاط تدقيق مُحللة مسبقًا لكل نموذج من نماذج YOLOv5 . وباستخدام SparseML، المدمج مع Ultralytics يمكنك ضبط نقطة تدقيق متناثرة على بياناتك باستخدام أمر CLI واحد.

نشر YOLOv5 مع DeepSparse

تثبيت DeepSparse

قم بتشغيل ما يلي لتثبيت DeepSparse. نوصي باستخدام بيئة افتراضية مع Python.

pip install deepsparse[serveryolo,onnxruntime]

جمع ملف ONNX

يقبل DeepSparse نموذجًا بصيغة ONNX ويتم تمريره إما بصيغة

  • مسار محلي لنموذج ONNX
  • وصلة SparseZoo تحدد نموذجًا في SparseZoo

سنقوم بمقارنة نموذج YOLOv5s القياسي الكثيف بنموذج YOLOv5s المشذب والمكمم، والمحددين بواسطة جذور SparseZoo التالية:

zoo:ultralytics
zoo:ultralytics

نشر نموذج

يوفر DeepSparse واجهات برمجة تطبيقات (APIs) ملائمة لدمج النموذج الخاص بك في أحد التطبيقات.

لتجربة أمثلة النشر أدناه، اسحب صورة نموذجية للمثال واحفظها بصيغة basilica.jpg باستخدام الأمر التالي:

wget -O basilicabasilicajpg

واجهة برمجة تطبيقات Python

تعمل خطوط الأنابيب على التفاف المعالجة المسبقة والمعالجة اللاحقة للإخراج حول وقت التشغيل، مما يوفر واجهة نظيفة لإضافة DeepSparse إلى تطبيق ما. يشتمل تكامل Ultralytics على خط أنابيب خارج الصندوق يقبل الصور الخام ويخرج المربعات المحدودة.

إنشاء خط أنابيب وتشغيل الاستدلال:

from deepsparse import Pipeline

# قائمة الصور في نظام الملفات المحلي
الصور = [basilica.jpg"]

# إنشاء خط أنابيب
model_stub = "zoo:ultralytics"
yolo_pipeline = Pipeline.create(
مهمة=yolo"،
model_path=model_stub,
)

# قم بإجراء الاستدلال على الصور، واستقبل الصناديق المحدودة + الفصول
pipeline_outputs = yolo(images=images, iou_thres=0.6, conf_thres=0.001)
طباعة (pipeline_outputs)

إذا كنت تعمل في السحابة، فقد تحصل على خطأ مفاده أن open-cv لا يمكنه العثور على libGL.so.1. سيؤدي تشغيل ما يلي على Ubuntu إلى تثبيته:

apt-get install libgl1-mesa-glx

خادم HTTP

يتم تشغيل DeepSparse Server على رأس إطار عمل الويب FastAPI الشهير وخادم الويب Uvicorn. باستخدام أمر CLI واحد فقط، يمكنك بسهولة إعداد نقطة نهاية خدمة نموذجية باستخدام DeepSparse. يدعم الخادم أي خط أنابيب من DeepSparse، بما في ذلك اكتشاف الكائنات باستخدام YOLOv5 مما يتيح لك إرسال الصور الخام إلى نقطة النهاية واستلام المربعات المحدودة.

تشغيل الخادم باستخدام YOLOv5s المشذب والمكمم:

deepsparse.server \
-مهمة yolo \
- نموذج_مسار zoo:ultralytics

مثال على طلب، باستخدام حزمة طلبات Python:

import requests, json

# قائمة بالصور للاستدلال (الملفات المحلية من جانب العميل)
المسار = [basilica.jpg']
files = [('request', open(img, 'rb')) ل img في المسار]

# إرسال طلب عبر HTTP إلى نقطة النهاية /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# يتم إرجاع الاستجابة بتنسيق JSON
annotations = json.loads(resp.text) # قاموس لنتائج الشرح التوضيحي
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

شرح CLI

يمكنك أيضًا استخدام الأمر annotate لجعل المحرك يحفظ صورة مشروحة على القرص. جرّب ‎--source 0 لشرح بث كاميرا الويب المباشر الخاص بك!

deepsparse.object_detection.detection.annotate --model_filepath zoo:ultralytics- المصدر basilica.jpg

سيؤدي تشغيل الأمر أعلاه إلى إنشاء مجلد annotation-results وحفظ الصورة المشروحة بالداخل.

Basilica المشروحة مع YOLOv5

أداء قياسي

باستخدام البرنامج النصي لقياس الأداء في DeepSparse، سنقارن إنتاجية DeepSparse بإنتاجية ONNX Runtime على YOLOv5s.

تم تشغيل المعايير على مثيل AWS c6i.8xlarge (16 نواة).

مقارنة أداء الدفعة 32

خط الأساس لوقت تشغيل ONNX

عند الدُفعة 32، يحقق وقت تشغيل ONNX 42 صورة/ثانية باستخدام وحدات YOLOv5 القياسية الكثيفة:

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1 -e onnxruntime

> مسار النموذج الأصلي: zoo:ultralytics
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 41.9025

أداء DeepSparse الكثيف

في حين أن DeepSparse يقدم أفضل أداء له مع النماذج المتفرقة المحسّنة، إلا أنه يعمل أيضًا بشكل جيد مع YOLOv5s القياسي الكثيف.

في الدفعة 32، يحقق DeepSparse معدل 70 صورة/ثانية باستخدام نموذج YOLOv5s القياسي والكثيف—وهو تحسين في الأداء بمقدار 1.7x مقارنة بـ ORT!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> مسار النموذج الأصلي: zoo:ultralytics
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 69.5546

أداء DeepSparse المتفرق

عندما يتم تطبيق التباعد على النموذج، تكون مكاسب أداء DeepSparse أقوى من أداء ONNX Runtime.

في الدفعة 32، يحقق DeepSparse معدل 241 صورة/ثانية باستخدام نموذج YOLOv5s المشذب والمكمم—وهو تحسين في الأداء بمقدار 5.8x مقارنة بـ ORT!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> مسار النموذج الأصلي: zoo:ultralytics
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 241.2452

مقارنة أداء الدفعة 1

كما أن DeepSparse قادر أيضًا على زيادة السرعة على وقت تشغيل ONNX لسيناريو الدفعة 1 الحساس لوقت الاستجابة.

خط الأساس لوقت تشغيل ONNX

في الدُفعة 1، يحقق وقت تشغيل ONNX 48 صورة/ثانية باستخدام YOLOv5 القياسي الكثيف YOLOv5.

deepsparse.benchmark zoo:ultralytics-s sync -b 1 -nstreams 1 -e onnxruntime

> مسار النموذج الأصلي: zoo:ultralytics
> حجم الدفعة: 1
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 48.0921

أداء DeepSparse المتفرق

عندما يتم تطبيق التباعد على النموذج، تكون مكاسب أداء DeepSparse أقوى من أداء ONNX Runtime.

عند الدفعة 1، يحقق برنامج DeepSparse 135 صورة/ثانية باستخدام YOLOv5 المنقحة والمقننة - أيتحسين الأداء بمقدار 2.8 مرة مقارنة بوقت تشغيل ONNX !

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> مسار النموذج الأصلي: zoo:ultralytics
> حجم الدفعة: 1
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 134.9468

نظرًا لأن مثيلات c6i.8xlarge تحتوي على تعليمات VNNI، يمكن زيادة إنتاجية DeepSparse إذا تم تقليم الأوزان في كتل من 4.

في الدفعة 1، يحقق DeepSparse 180 عنصرًا/ثانية باستخدام YOLOv5 المقطوع والمقنن المكون من 4 كتل - أي3.7 أضعاف الأداء مقارنة بوقت تشغيل ONNX !

deepsparse.benchmark zoo:ultralytics-s sync -b 1 -nstreams 1

> مسار النموذج الأصلي: zoo:ultralytics
> حجم الدفعة: 1
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 179.7375

وفويلا! أنت جاهز لتحسين نشر YOLOv5 الخاص بك باستخدام DeepSparse.

ابدأ باستخدام YOLOv5 و DeepSparse

للتواصل معنا، انضم إلى مجتمعنا واترك لنا أسئلتك وتعليقاتك. اطلع على مستودعUltralytics YOLOv5 ووثائقNeural Magic الكاملة لنشر YOLOv5.

في Ultralytics نعقد شراكات تجارية مع شركات ناشئة أخرى لمساعدتنا في تمويل البحث والتطوير لأدواتنا الرائعة مفتوحة المصدر، مثل YOLOv5 لإبقائها مجانية للجميع. قد تحتوي هذه المقالة على روابط تابعة لهؤلاء الشركاء.

لنبنِ مستقبل
الذكاء الاصطناعي معًا!

ابدأ رحلتك مع مستقبل تعلم الآلة

ابدأ مجانًا