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

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

لأول مرة، يمكن لأعباء عمل التعلم العميق الخاصة بك تلبية متطلبات الأداء في بيئة الإنتاج دون تعقيدات وتكاليف مسرعات الأجهزة. ببساطة، يمنحك DeepSparse أداء وحدات معالجة الرسومات وبساطة البرمجيات:
- عمليات نشر مرنة: تشغيل متسق عبر السحابة ومراكز البيانات والحافة (edge) مع أي مزود للأجهزة
- قابلية توسع لا نهائية: توسع أفقيًا باستخدام Kubernetes القياسي، أو رأسيًا ليصل إلى مئات النوى، أو بشكل مجرد تمامًا باستخدام الحوسبة بدون خادم (serverless)
- تكامل سهل: استخدم واجهات برمجة تطبيقات نظيفة لدمج نموذجك في تطبيق ومراقبته في بيئة الإنتاج
Link to this sectionحقق أداءً يضاهي وحدات معالجة الرسومات على وحدات المعالجة المركزية العادية#
يستفيد DeepSparse من تناثر النموذج (model sparsity) لتحقيق تسريع في الأداء.
يسمح التقليل من الكثافة (Sparsification) من خلال التقليم (pruning) والكمية (quantization) بإجراء تخفيضات كبيرة في الحجم والحسابات اللازمة لتنفيذ الشبكة مع الحفاظ على دقة عالية. يتميز DeepSparse بالوعي بالتناثر، حيث يتخطى عمليات الضرب والجمع بالأصفار ويقلص حجم الحسابات في التمرير الأمامي (forward pass). ونظرًا لأن الحسابات المتناثرة مرتبطة بالذاكرة، فإن DeepSparse ينفذ الشبكة بعمق، مقسمًا المشكلة إلى أعمدة موتر (Tensor Columns)، وهي أشرطة حسابية عمودية تتناسب مع ذاكرة الكاش.

الشبكات المتناثرة ذات الحسابات المضغوطة، التي يتم تنفيذها بعمق داخل ذاكرة الكاش، تسمح لـ DeepSparse بتقديم أداء يضاهي وحدات معالجة الرسومات على وحدات المعالجة المركزية!
Link to this sectionأنشئ نسخة متناثرة من YOLOv5 مدربة على بيانات مخصصة#
يحتوي مستودع النماذج مفتوح المصدر التابع لـ Neural Magic، المسمى SparseZoo، على نقاط فحص (checkpoints) متناثرة مسبقًا لكل نموذج YOLOv5. باستخدام SparseML، الذي يتكامل مع Ultralytics، يمكنك ضبط نقطة فحص متناثرة على بياناتك باستخدام أمر CLI واحد.
Link to this sectionانشر YOLOv5 باستخدام DeepSparse#
Link to this sectionتثبيت DeepSparse#
قم بتشغيل ما يلي لتثبيت DeepSparse. نوصي باستخدام بيئة افتراضية مع Python.
pip install deepsparse[server,yolo,onnxruntime]Link to this sectionالحصول على ملف ONNX#
يقبل DeepSparse النموذج بتنسيق ONNX، والذي يتم تمريره إما كـ:
- مسار محلي لنموذج ONNX
- مؤشر (stub) من SparseZoo يحدد نموذجًا داخل SparseZoo
سنقارن بين نموذج YOLOv5s الكثيف القياسي ونموذج YOLOv5s المقلم والمكمم (pruned-quantized)، والمحدد بواسطة مؤشرات SparseZoo التالية:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneLink to this sectionنشر نموذج#
يوفر DeepSparse واجهات برمجة تطبيقات مريحة لدمج نموذجك في تطبيق.
لتجربة أمثلة النشر أدناه، قم بسحب صورة عينة للمثال واحفظها باسم basilica.jpg باستخدام الأمر التالي:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgLink to this sectionواجهة برمجة تطبيقات Python#
تغلف خطوط المعالجة (Pipelines) عمليات المعالجة الأولية والمخرجات اللاحقة حول وقت التشغيل، مما يوفر واجهة نظيفة لإضافة DeepSparse إلى التطبيق. يتضمن تكامل DeepSparse-Ultralytics خط معالجة جاهزًا للاستخدام يقبل الصور الخام ويخرج مربعات الإحاطة (bounding boxes).
أنشئ خط معالجة (Pipeline) وقم بتشغيل الاستدلال:
from deepsparse import Pipeline
# list of images in local filesystem
images = ["basilica.jpg"]
# create Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# run inference on images, receive bounding boxes + classes
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-glxLink to this sectionخادم HTTP#
يعمل خادم DeepSparse فوق إطار عمل الويب الشهير FastAPI وخادم الويب Uvicorn. باستخدام أمر CLI واحد فقط، يمكنك بسهولة إعداد نقطة نهاية لخدمة النموذج باستخدام DeepSparse. يدعم الخادم أي خط معالجة من 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
# list of images for inference (local files on client side)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]
# send request over HTTP to /predict/from_files endpoint
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)
# response is returned in JSON
annotations = json.loads(resp.text) # dictionary of annotation results
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]Link to this sectionتعليق توضيحي (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 وحفظ الصورة المرفقة بالتعليقات بالداخل.

Link to this sectionأداء قياس الأداء (Benchmark Performance)#
باستخدام برنامج قياس الأداء الخاص بـ DeepSparse، سنقارن إنتاجية DeepSparse بإنتاجية ONNX Runtime على YOLOv5s.
تم تشغيل معايير الأداء على مثيل AWS c6i.8xlarge (16 نواة).
Link to this sectionمقارنة أداء الدفعة (Batch) 32#
Link to this sectionأساس 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
Link to this sectionأداء DeepSparse الكثيف#
بينما يقدم DeepSparse أفضل أداء له مع النماذج المتناثرة المحسنة، فإنه يؤدي أيضًا بشكل جيد مع نموذج YOLOv5s الكثيف القياسي.
عند الدفعة 32، يحقق DeepSparse 70 صورة/ثانية مع نموذج YOLOv5s الكثيف القياسي—تحسن في الأداء بمقدار 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/ultralytics/coco/base-none حجم الدفعة: 32 السيناريو: sync الإنتاجية (عنصر/ثانية): 69.5546
Link to this sectionأداء DeepSparse المتناثر#
عند تطبيق التناثر على النموذج، تكون مكاسب أداء DeepSparse مقارنة بـ ONNX Runtime أقوى.
عند الدفعة 32، يحقق DeepSparse 241 صورة/ثانية مع نموذج YOLOv5s المقلم والمكمم—تحسن في الأداء بمقدار 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/ultralytics/coco/pruned65_quant-none حجم الدفعة: 32 السيناريو: sync الإنتاجية (عنصر/ثانية): 241.2452
Link to this sectionمقارنة أداء الدفعة 1#
يستطيع DeepSparse أيضًا الحصول على تسريع مقارنة بـ ONNX Runtime لسيناريو الدفعة 1 الحساس لزمن الانتقال.
Link to this sectionأساس 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
Link to this sectionأداء DeepSparse المتناثر#
عند تطبيق التناثر على النموذج، تكون مكاسب أداء DeepSparse مقارنة بـ ONNX Runtime أقوى.
عند الدفعة 1، يحقق DeepSparse 135 صورة/ثانية مع نموذج YOLOv5s المقلم والمكمم—تحسن في الأداء بمقدار 2.8 ضعف مقارنة بـ 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.7 ضعف مقارنة بـ 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.
Link to this sectionابدأ مع YOLOv5 و DeepSparse#
للتواصل معنا، انضم إلى مجتمعنا واترك لنا أسئلتك وتعليقاتك. ألقِ نظرة على مستودع Ultralytics YOLOv5 ووثائق Neural Magic الكاملة لنشر YOLOv5.
في Ultralytics، نحن نتشارك تجاريًا مع شركات ناشئة أخرى لمساعدتنا في تمويل أبحاث وتطوير أدواتنا مفتوحة المصدر الرائعة، مثل YOLOv5، للحفاظ عليها مجانية للجميع. قد تحتوي هذه المقالة على روابط تابعة لهؤلاء الشركاء.






