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

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

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

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

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

تستفيد DeepSparse من تباعد النماذج لزيادة سرعة أدائها.

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

شبكة DeepSparse وUltralytics YOLOv5

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

إنشاء إصدار متناثر من 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 واجهات برمجة تطبيقات ملائمة لدمج نموذجك في تطبيق ما.

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

wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg

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

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

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

من deepsparse استيراد خط الأنابيب

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

# إنشاء خط أنابيب
model_stub = "zoo:cv/detection/yolov5-s/pytorch/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
مهمة="yolo"،
model_path=model_stub,
)

# قم بإجراء الاستدلال على الصور، واستقبل الصناديق المحدودة + الفصول
pipeline_outputs = yolo_pipeline(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 YOLOv5s المشذبة والمقلّمة:

deepsparse.server \
-مهمة يولو \
- نموذج_مسار zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

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

استيراد الطلبات، 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
التعليقات التوضيحية = json.loads.loads(resp.text) # قاموس نتائج التعليقات التوضيحية
bounding_boxes = التعليقات التوضيحية ["مربعات"]
التسميات = التعليقات التوضيحية ["التسميات"]

شرح CLI

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

deepsparse.object_detection.detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/pytorch/ultralytics/coco/pruned65_quant-none - المصدر basilica.jpg

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

البازيليكا المشروحة مع YOLOv5

الأداء المعياري

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

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

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

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

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

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntime

> مسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/pytorch/ultralytics/coco/base-none
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 41.9025

أداء كثيف كثيف عميق ومتناثر

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

في الدفعة 32، يحقق DeepSparse 70 صورة/ثانية باستخدام YOLOv5 القياسي الكثيف - أيتحسين الأداء بمقدار 1.7 مرة مقارنةً بـ 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/pytorch/ultralytics/coco/base-none
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 69.5546

أداء متناثر عميق ومتفرق

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

عند الدُفعة 32، يحقق DeepSparse 241 صورة/ثانية باستخدام YOLOv5 المُنقّحة والمُنتقاة - أيتحسين الأداء بمقدار 5.8 أضعاف مقارنةً ب 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/pytorch/ultralytics/coco/pruned65_quant-none
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 241.2452

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

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

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

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

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntime

> مسار النموذج الأصلي: zoo:cv/detection/yolov5-s/pytorch/pytorch/ultralytics/coco/base-none
> حجم الدفعة: 1
> السيناريو: مزامنة
> الإنتاجية (عناصر/ثانية): 48.0921

أداء متناثر عميق ومتفرق

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

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

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

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

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

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1

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

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

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

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

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

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

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

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