انشر YOLOv5 باستخدام DeepSparse من Neural Magic
استحوذت Red Hat على Neural Magic في يناير 2025، وأوقفت الإصدارات المجتمعية من DeepSparse وSparseML وSparseZoo وSparsify في 2 يونيو 2025. وما زالت الأدوات تعمل، لكنها لم تعد تتلقى تحديثات أو دعمًا. لتسريع CPU مع صيانة مستمرة، اطّلع على تكاملي OpenVINO وONNX.
يشرح هذا الدليل كيفية نشر YOLOv5 باستخدام DeepSparse من Neural Magic. وفي حزمة ultralytics، يؤدي تكامل Neural Magic الوظيفة نفسها.
DeepSparse بيئة تشغيل للاستدلال محسّنة لوحدات CPU. في الاختبارات المعيارية أدناه، يعمل YOLOv5s المُقلَّم والمكمَّم بسرعة تزيد 5.8 مرات في DeepSparse مقارنة بالنموذج الكثيف في ONNX Runtime على الجهاز نفسه.
يهدف DeepSparse إلى تمكين أعباء عمل التعلّم العميق من تلبية متطلبات أداء الإنتاج على وحدات CPU، دون تعقيد المسرّعات المخصصة وتكلفتها:
- عمليات نشر مرنة: شغّل نماذجك باستمرار عبر السحابة ومراكز البيانات والحافة، باستخدام أي مزود للأجهزة، من Intel إلى AMD وARM.
- قابلية التوسّع: التوسّع رأسيًا إلى مئات الأنوية، أو أفقيًا باستخدام Kubernetes القياسي، أو عبر تجريد كامل باستخدام الحوسبة دون خادم
- سهولة التكامل: واجهات API لدمج نموذجك في تطبيق ومراقبته في بيئة الإنتاج
كيف يحقق DeepSparse أداءً بمستوى GPU؟#
يستفيد DeepSparse من تناثر النموذج لزيادة سرعة أدائه.
يُدرس التناثر الناتج عن التقليم والتكميم على نطاق واسع، إذ يتيح تقليل حجم الشبكة والحوسبة اللازمة لتنفيذها بمقادير تصل إلى رتبة كاملة، مع الحفاظ على دقة عالية. يراعي DeepSparse التناثر، أي إنه يتجاوز المعلمات التي صُفّرت، فيقلل مقدار الحوسبة في التمرير الأمامي. وبما أن الحوسبة المتناثرة أصبحت الآن محدودة بعرض نطاق الذاكرة، ينفّذ DeepSparse الشبكة بحسب العمق، ويقسّم المسألة إلى أعمدة موترية، أي شرائط رأسية من العمليات الحسابية تلائم ذاكرة التخزين المؤقت.
إن تنفيذ الشبكات المتناثرة بحسب العمق داخل ذاكرة التخزين المؤقت هو ما يتيح لـ DeepSparse توفير استدلال سريع على وحدات CPU.
كيف أنشئ إصدارًا متناثرًا من YOLOv5 دُرّب على بياناتي؟#
يحتوي مستودع النماذج مفتوح المصدر التابع لـ Neural Magic، SparseZoo، على نقاط تحقق جرى إضفاء التناثر عليها مسبقًا لكل نموذج من نماذج YOLOv5. وباستخدام SparseML، المتكامل مع Ultralytics، يمكنك ضبط نقطة تحقق متناثرة ضبطًا دقيقًا على بياناتك باستخدام أمر CLI واحد.
اطّلع على تكامل SparseML مع YOLOv5 لمزيد من التفاصيل.
استخدام DeepSparse#
سنستعرض مثالًا لقياس الأداء ونشر إصدار متناثر من YOLOv5s باستخدام DeepSparse.
تثبيت DeepSparse#
نفّذ الأمر التالي لتثبيت DeepSparse. نوصي باستخدام بيئة افتراضية مع Python.
pip install "deepsparse[server,yolo,onnxruntime]"الحصول على ملف ONNX#
يقبل DeepSparse نموذجًا بصيغة ONNX، يُمرّر بإحدى الطريقتين التاليتين:
- عنصر نائب من SparseZoo يحدد ملف ONNX في SparseZoo.
- مسار محلي إلى نموذج ONNX في نظام الملفات.
تستخدم الأمثلة أدناه نقاط تحقق 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 البرمجية#
تغلّف Pipelines المعالجة المسبقة ومعالجة المخرجات اللاحقة حول بيئة التشغيل، وتوفّر واجهة واضحة لإضافة DeepSparse إلى تطبيق. ويتضمن تكامل DeepSparse-Ultralytics، فور تثبيته، Pipeline يقبل الصور الخام ويُخرج مربعات الإحاطة.
أنشئ Pipeline وشغّل الاستدلال:
from deepsparse import Pipeline
# قائمة الصور في نظام الملفات المحلي
images = ["basilica.jpg"]
# إنشاء Pipeline
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)إذا كنت تعمل في السحابة، فقد يظهر خطأ يفيد بأن OpenCV لا يستطيع العثور على libGL.so.1. ويمكنك تثبيت المكتبة الناقصة:
apt-get install libgl1أو استخدام إصدار OpenCV عديم الواجهة الذي يتجنب تمامًا الاعتماديات الخاصة بواجهة المستخدم الرسومية:
pip install opencv-python-headlessخادم 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مثال على طلب باستخدام حزمة Python المسماة requests:
import json
from contextlib import ExitStack
import requests
# قائمة الصور للاستدلال (ملفات محلية على جانب العميل)
path = ["basilica.jpg"]
# إرسال الطلب عبر HTTP إلى نقطة النهاية /predict/from_files
url = "http://0.0.0.0:5543/predict/from_files"
with ExitStack() as stack:
files = [("request", stack.enter_context(open(img, "rb"))) for img in path]
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 بمعدل النقل في ONNX Runtime على YOLOv5s، باستخدام برنامج قياس الأداء الخاص بـ DeepSparse.
أُجريت اختبارات الأداء على مثيل 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
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
# Batch Size: 32
# Scenario: sync
# Throughput (items/sec): 41.9025أداء DeepSparse مع النماذج الكثيفة#
مع أن DeepSparse يحقق أفضل أداء له مع النماذج المتناثرة المحسّنة، فإنه يقدم أداءً جيدًا أيضًا مع YOLOv5s الكثيف القياسي.
عند حجم دفعة 32، يحقق DeepSparse معدل 70 صورة في الثانية باستخدام YOLOv5s الكثيف القياسي، أي تحسنًا بمقدار 1.7x مقارنةً بـ ONNX Runtime.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
# Batch Size: 32
# Scenario: sync
# Throughput (items/sec): 69.5546أداء DeepSparse مع النماذج المتناثرة#
عند تطبيق التناثر على النموذج، تكون مكاسب أداء DeepSparse مقارنةً بـ ONNX Runtime أكبر.
عند حجم دفعة 32، يحقق DeepSparse معدل 241 صورة في الثانية باستخدام YOLOv5s المُقلَّم والمكمَّم، أي تحسنًا بمقدار 5.8x مقارنةً بـ ONNX Runtime.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
# Batch Size: 32
# Scenario: sync
# Throughput (items/sec): 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
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
# Batch Size: 1
# Scenario: sync
# Throughput (items/sec): 48.0921أداء DeepSparse مع النماذج المتناثرة#
عند حجم دفعة 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
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
# Batch Size: 1
# Scenario: sync
# Throughput (items/sec): 134.9468بما أن مثيلات c6i.8xlarge تتضمن تعليمات VNNI، يمكن زيادة معدل نقل DeepSparse أكثر إذا شُذّبت الأوزان في كتل من 4.
عند حجم دفعة 1، يحقق DeepSparse معدل 180 عنصرًا في الثانية باستخدام YOLOv5s المُقلَّم والمكمَّم ذي الكتل الأربع، أي زيادة بمقدار 3.7x مقارنةً بـ ONNX Runtime.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1
# Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
# Batch Size: 1
# Scenario: sync
# Throughput (items/sec): 179.7375ابدأ باستخدام DeepSparse#
للبحث أو الاختبار؟ إصدار DeepSparse Community مجاني للبحث والاختبار. ابدأ باستخدام ملف README الخاص بـ DeepSparse.
لمزيد من المعلومات حول نشر YOLOv5 باستخدام DeepSparse، اطّلع على أمثلة DeepSparse لـ YOLOv5 ومنشور مدونة Ultralytics حول تكامل DeepSparse.
الأسئلة الشائعة#
لا. DeepSparse بيئة تشغيل لوحدة CPU، وقد قيس الأداء أعلاه على مثيل AWS
c6i.8xlargeذي 16 نواة، من دون أي مسرّع.صدّره إلى ONNX باستخدام
python export.py --weights best.pt --include onnx، ومرّر مسار الملف بوصفه الوسيطةmodel_pathبدلًا من عنصر نائب من SparseZoo. تستفيد النماذج الكثيفة أيضًا من بيئة التشغيل، بينما تحقق النماذج المشذّبة والمكمّمة أكبر فائدة.أجرِ الضبط الدقيق لأحد نقاط التحقق المُعدّة مسبقًا للتناثر في SparseZoo باستخدام SparseML، الذي يحافظ على بنية التناثر أثناء التدريب، ثم صدّر النموذج إلى ONNX.
لا. أُوقفت إصدارات المجتمع في 2 يونيو 2025، وجُمّدت الحزم على PyPI. ستظل مسارات العمل الحالية تعمل، لكن يُنصح بأن تدرس عمليات النشر الجديدة استخدام مساري OpenVINO أو ONNX Runtime، إذ يجري صيانتهما بنشاط.
التعليقات
اطرح سؤالًا، وشارك نتائجك، أو ساعد شخصًا آخر.