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

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

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

الشبكات المتناثرة ذات الحسابات المضغوطة، التي يتم تنفيذها بعمق داخل ذاكرة الكاش، تسمح لـ DeepSparse بتقديم أداء يضاهي وحدات معالجة الرسومات على وحدات المعالجة المركزية!
إنشاء نسخة متفرقة من نموذج Ultralytics YOLOv5 المدرب على بيانات مخصصة#
يحتوي مستودع النماذج مفتوح المصدر التابع لـ Neural Magic، المسمى SparseZoo، على نقاط فحص (checkpoints) متناثرة مسبقًا لكل نموذج YOLOv5. باستخدام SparseML، الذي يتكامل مع Ultralytics، يمكنك ضبط نقطة فحص متناثرة على بياناتك باستخدام أمر CLI واحد.
نشر نموذج Ultralytics YOLOv5 باستخدام DeepSparse#
تثبيت DeepSparse#
قم بتشغيل ما يلي لتثبيت DeepSparse. نوصي باستخدام بيئة افتراضية مع Python.
pip install deepsparse[server,yolo,onnxruntime]الحصول على ملف 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-noneنشر نموذج#
يوفر DeepSparse واجهات برمجة تطبيقات مريحة لدمج نموذجك في تطبيق.
لتجربة أمثلة النشر أدناه، قم بسحب صورة عينة للمثال واحفظها باسم basilica.jpg باستخدام الأمر التالي:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgواجهة برمجة تطبيقات 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-glxخادم HTTP#
يعمل خادم DeepSparse فوق إطار عمل الويب الشهير 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
# 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"]تعليق توضيحي (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 وحفظ الصورة المرفقة بالتعليقات بالداخل.

أداء قياس الأداء (Benchmark Performance)#
باستخدام برنامج قياس الأداء الخاص بـ DeepSparse، سنقارن إنتاجية DeepSparse بإنتاجية ONNX Runtime على YOLOv5s.
تم تشغيل معايير الأداء على مثيل AWS c6i.8xlarge (16 نواة).
مقارنة أداء الدفعة (Batch) 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 السيناريو: متزامن الإنتاجية (عناصر/ثانية): 41.9025
أداء 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 السيناريو: متزامن الإنتاجية (عناصر/ثانية): 69.5546
أداء 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 السيناريو: متزامن الإنتاجية (عناصر/ثانية): 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 السيناريو: متزامن الإنتاجية (عناصر/ثانية): 48.0921
أداء 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 السيناريو: متزامن الإنتاجية (عناصر/ثانية): 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 السيناريو: متزامن الإنتاجية (عناصر/ثانية): 179.7375
وها هو ذا! أنت مستعد لتحسين نشر YOLOv5 باستخدام DeepSparse.
ابدأ الاستخدام مع Ultralytics YOLOv5 و DeepSparse#
للتواصل معنا، انضم إلى مجتمعنا واترك لنا أسئلتك وتعليقاتك. تحقق من مستودع Ultralytics YOLOv5 وتوثيق Neural Magic الكامل لنشر YOLOv5.
في Ultralytics، نحن نتشارك تجاريًا مع شركات ناشئة أخرى لمساعدتنا في تمويل أبحاث وتطوير أدواتنا مفتوحة المصدر الرائعة، مثل YOLOv5، للحفاظ عليها مجانية للجميع. قد تحتوي هذه المقالة على روابط تابعة لهؤلاء الشركاء.






