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

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

للمرة الأولى، تستطيع أعباء عمل التعلم العميق تلبية متطلبات الأداء في بيئات الإنتاج من دون تعقيد مسرّعات العتاد وتكاليفها. وباختصار، يمنحك DeepSparse أداء وحدات معالجة الرسومات وبساطة البرامج:
- النشر المرن: تشغيل متسق عبر السحابة ومراكز البيانات والأجهزة الطرفية مع أي مزود للعتاد
- قابلية توسع لا محدودة: التوسع أفقيًا باستخدام Kubernetes القياسي، أو عموديًا إلى مئات الأنوية، أو عبر خوادم بلا خوادم مع تجريد كامل للبنية التحتية
- سهولة التكامل: استخدام واجهات API واضحة لدمج النموذج في تطبيق ومراقبته في بيئة الإنتاج
تحقيق أداء بمستوى وحدات معالجة الرسومات على وحدات CPU متاحة تجاريًا#
يستفيد DeepSparse من تخلخل النموذج لتحقيق تسريع الأداء.
يتيح تقليل كثافة النموذج عبر التقليم والتكميم خفض حجم الشبكة والحوسبة اللازمة لتنفيذها بمقادير تصل إلى رتبة عشرية، مع الحفاظ على دقة عالية. ويراعي DeepSparse التخلخل، فيتجاوز عمليات الضرب والجمع التي تتضمن أصفارًا ويقلل مقدار الحوسبة في المرور الأمامي. ونظرًا إلى أن الحوسبة المتخلخلة مقيدة بعرض نطاق الذاكرة، ينفذ DeepSparse الشبكة على امتداد عمقها، ويجزّئ المسألة إلى أعمدة Tensor، وهي شرائط رأسية من العمليات الحسابية تتسع في الذاكرة المخبئية.

تتيح الشبكات المتناثرة ذات الحوسبة المضغوطة، والمنفذة على مستوى العمق في ذاكرة التخزين المؤقت، لـ DeepSparse تقديم أداء بمستوى GPU على وحدات CPU!
إنشاء نسخة متناثرة من Ultralytics YOLOv5 مدرَّبة على بيانات مخصّصة#
يحتوي مستودع النماذج مفتوح المصدر SparseZoo التابع لـ Neural Magic على نقاط تحقق مُعدّة مسبقًا بالتناثر لكل نموذج من نماذج YOLOv5. باستخدام SparseML، المدمج مع Ultralytics، يمكنك ضبط نقطة تحقق متناثرة على بياناتك بأمر CLI واحد.
نشر Ultralytics YOLOv5 باستخدام DeepSparse#
تثبيت DeepSparse#
نفّذ الأمر التالي لتثبيت DeepSparse. نوصي باستخدام بيئة افتراضية مع Python.
pip install deepsparse[server,yolo,onnxruntime]الحصول على ملف ONNX#
يقبل DeepSparse نموذجًا بتنسيق ONNX، يُمرر بإحدى الطريقتين التاليتين:
- مسار محلي إلى نموذج ONNX
- معرّف SparseZoo يشير إلى نموذج في SparseZoo
سنقارن YOLOv5s الكثيف القياسي بـ YOLOv5s المقلم والمكمّم، المحدد بمعرّفات SparseZoo التالية:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneنشر نموذج#
يوفر DeepSparse واجهات API ملائمة لدمج نموذجك في تطبيق.
لتجربة أمثلة النشر أدناه، نزّل صورة عينة للمثال واحفظها باسم basilica.jpg باستخدام الأمر التالي:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgواجهة Python البرمجية#
تغلّف خطوط الأنابيب المعالجة المسبقة والمعالجة اللاحقة للمخرجات حول بيئة التشغيل، ما يوفر واجهة واضحة لإضافة DeepSparse إلى تطبيق. يتضمن تكامل DeepSparse مع Ultralytics خط أنابيب جاهزًا للاستخدام يقبل الصور الخام ويخرج مربعات الإحاطة.
أنشئ خط أنابيب وشغّل الاستدلال:
from deepsparse import Pipeline
# قائمة بالصور في نظام الملفات المحلي
images = ["basilica.jpg"]
# إنشاء خط أنابيب
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# تشغيل الاستدلال على الصور واستلام مربعات الإحاطة والفئات
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)إذا كنت تعمل على السحابة، فقد يظهر خطأ يفيد بأن open-cv لا يستطيع العثور على libGL.so.1. يؤدي تنفيذ الأمر التالي على Ubuntu إلى تثبيته:
apt-get install libgl1-mesa-glxخادم HTTP#
يعمل DeepSparse Server فوق إطار عمل الويب FastAPI الشائع وخادم الويب Uvicorn. وباستخدام أمر CLI واحد فقط، يمكنك بسهولة إعداد نقطة نهاية لخدمة نموذج باستخدام DeepSparse. يدعم الخادم أي خط أنابيب من DeepSparse، بما في ذلك اكتشاف الكائنات باستخدام Ultralytics YOLOv5، ما يتيح لك إرسال الصور الخام إلى نقطة النهاية واستلام مربعات الإحاطة.
شغّل الخادم باستخدام YOLOv5s المقلم والمكمّم:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneمثال على طلب باستخدام حزمة requests في Python:
import requests, json
# قائمة بالصور للاستدلال (ملفات محلية على جانب العميل)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]
# إرسال طلب عبر 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.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpgسيؤدي تشغيل الأمر أعلاه إلى إنشاء مجلد annotation-results وحفظ الصورة المشروحة بداخله.

قياس الأداء#
باستخدام برنامج قياس الأداء النصي الخاص بـ DeepSparse، سنقارن معدل النقل في DeepSparse بمعدل النقل في ONNX Runtime على YOLOv5s.
أُجريت اختبارات قياس الأداء على مثيل AWS c6i.8xlarge (16 نواة).
مقارنة الأداء بحجم دفعة 32#
الأداء الأساسي لـ ONNX Runtime#
عند حجم دفعة 32، يحقق ONNX Runtime معالجة 42 صورة/ثانية باستخدام YOLOv5s الكثيف القياسي:
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntimeمسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none حجم الدفعة: 32 السيناريو: sync معدل النقل (عنصر/ثانية): 41.9025
أداء DeepSparse مع النماذج الكثيفة#
مع أن DeepSparse يحقق أفضل أداء مع النماذج المتناثرة المحسّنة، فإنه يقدم أداءً جيدًا أيضًا مع YOLOv5s الكثيف القياسي.
عند حجم دفعة 32، يحقق DeepSparse معالجة 70 صورة/ثانية باستخدام YOLOv5s الكثيف القياسي، أي تحسن في الأداء بمقدار 1.7x مقارنةً بـ ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1مسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none حجم الدفعة: 32 السيناريو: sync معدل النقل (عنصر/ثانية): 69.5546
أداء DeepSparse مع النماذج المتناثرة#
عند تطبيق التناثر على النموذج، تصبح مكاسب أداء DeepSparse مقارنةً بـ ONNX Runtime أكبر.
عند حجم دفعة 32، يحقق DeepSparse معالجة 241 صورة/ثانية باستخدام YOLOv5s المقلم والمكمّم، أي تحسن في الأداء بمقدار 5.8x مقارنةً بـ ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1مسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none حجم الدفعة: 32 السيناريو: sync معدل النقل (عنصر/ثانية): 241.2452
مقارنة الأداء بحجم دفعة 1#
يستطيع DeepSparse أيضًا تحقيق زيادة في السرعة مقارنةً بـ ONNX Runtime في السيناريو الحساس لزمن الاستجابة ذي حجم الدفعة 1.
الأداء الأساسي لـ ONNX Runtime#
عند حجم دفعة 1، يحقق ONNX Runtime معالجة 48 صورة/ثانية باستخدام YOLOv5s الكثيف القياسي.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntimeمسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none حجم الدفعة: 1 السيناريو: sync معدل النقل (عنصر/ثانية): 48.0921
أداء DeepSparse مع النماذج المتناثرة#
عند تطبيق التناثر على النموذج، تصبح مكاسب أداء DeepSparse مقارنةً بـ ONNX Runtime أكبر.
عند حجم دفعة 1، يحقق DeepSparse معالجة 135 صورة/ثانية باستخدام YOLOv5s المقلم والمكمّم، أي تحسن في الأداء بمقدار 2.8x مقارنةً بـ ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1مسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none حجم الدفعة: 1 السيناريو: sync معدل النقل (عنصر/ثانية): 134.9468
نظرًا إلى أن مثيلات c6i.8xlarge تتضمن تعليمات VNNI، يمكن زيادة معدل النقل في DeepSparse أكثر إذا قُلّمت الأوزان في كتل من 4.
عند حجم دفعة 1، يحقق DeepSparse معالجة 180 عنصرًا/ثانية باستخدام YOLOv5s المقلم والمكمّم إلى كتل من 4، أي تحسن في الأداء بمقدار 3.7x مقارنةً بـ ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1مسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni حجم الدفعة: 1 السيناريو: sync معدل النقل (عنصر/ثانية): 179.7375
وهكذا! أنت مستعد لـ تحسين نشر YOLOv5 باستخدام DeepSparse.
ابدأ باستخدام Ultralytics YOLOv5 وDeepSparse#
للتواصل معنا، انضم إلى مجتمعنا واطرح أسئلتك وتعليقاتك. اطّلع على مستودع Ultralytics YOLOv5 ووثائق Neural Magic الكاملة لنشر YOLOv5.
في Ultralytics، نعقد شراكات تجارية مع شركات ناشئة أخرى للمساعدة في تمويل البحث والتطوير لأدواتنا الرائعة مفتوحة المصدر، مثل YOLOv5، كي تظل مجانية للجميع. قد تحتوي هذه المقالة على روابط تابعة لشركائنا.









