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

انشر Ultralytics YOLOv5 مع DeepSparse من Neural Magic للحصول على أداء يضاهي وحدة معالجة الرسوميات (GPU) على وحدات المعالجة المركزية (CPUs)

فريق Ultralytics

5 دقائق قراءة

5 يناير 2023

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

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

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

YOLOv5 Throughput Comparison with DeepSparse (مقارنة الإنتاجية)

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

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

حقق أداءً من فئة وحدة معالجة الرسومات على وحدات المعالجة المركزية للسلع

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

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

شبكة DeepSparse و Ultralytics YOLOv5

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

إنشاء نسخة متفرقة من YOLOv5 مُدرَّبة على بيانات مخصصة

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

نشر 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 واجهات برمجة تطبيقات (APIs) ملائمة لدمج النموذج الخاص بك في أحد التطبيقات.

لتجربة أمثلة النشر أدناه، اسحب صورة نموذجية للمثال واحفظها باسم 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. يدعم الخادم أي خط أنابيب (Pipeline) من DeepSparse، بما في ذلك اكتشاف الكائنات باستخدام 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"]

Annotate 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 وحفظ الصورة المشروحة بالداخل.

Annotated Basilica with YOLOv5 (تمت إضافة تعليقات توضيحية إلى Basilica باستخدام YOLOv5)

أداء قياسي

باستخدام برنامج DeepSparse's القياسي، سنقوم بمقارنة إنتاجية DeepSparse بإنتاجية ONNX Runtime على YOLOv5s.

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

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

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

في الدفعة 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
> السيناريو: متزامن
> الإنتاجية (عنصر/ثانية): 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
> السيناريو: متزامن
> الإنتاجية (عنصر/ثانية): 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
> السيناريو: متزامن
> الإنتاجية (عنصر/ثانية): 241.2452

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

يستطيع DeepSparse أيضًا تحقيق تسريع مقارنة بـ ONNX Runtime في السيناريو الحساس للتأخير، دفعة 1.

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

في الدفعة 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
> السيناريو: متزامن
> الإنتاجية (عنصر/ثانية): 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 32 -nstreams 1

> مسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> حجم الدفعة: 1
> السيناريو: متزامن
> الإنتاجية (عنصر/ثانية): 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
> السيناريو: متزامن
> الإنتاجية (عنصر/ثانية): 179.7375

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

ابدأ مع YOLOv5 و DeepSparse

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

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

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

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

ابدأ مجانًا
تم نسخ الرابط إلى الحافظة