انشر YOLOv5 باستخدام DeepSparse من Neural Magic#
استحوذت Red Hat على Neural Magic في يناير 2025، وأوقفت الإصدارات المجتمعية من DeepSparse وSparseML وSparseZoo وSparsify في 2 يونيو 2025. وما زالت الأدوات تعمل، لكنها لم تعد تتلقى تحديثات أو دعمًا. لتسريع CPU مع صيانة مستمرة، اطّلع على تكاملي OpenVINO وONNX.
مرحبًا بك في عالم الذكاء الاصطناعي المقدم عبر البرمجيات.
يشرح هذا الدليل كيفية نشر YOLOv5 باستخدام DeepSparse من Neural Magic.
DeepSparse هو بيئة تشغيل للاستدلال تتميز بأداء استثنائي على وحدات CPU. فعلى سبيل المثال، يوفر DeepSparse تسريعًا بمقدار 5.8x لنموذج YOLOv5s مقارنةً بخط أساس ONNX Runtime، على الجهاز نفسه!
للمرة الأولى، يمكن لأعباء عملك في التعلّم العميق تلبية متطلبات الأداء في بيئات الإنتاج دون تعقيد مسرّعات الأجهزة وتكاليفها. ببساطة، يمنحك DeepSparse أداء وحدات GPU وبساطة البرمجيات:
- عمليات نشر مرنة: شغّل نماذجك باستمرار عبر السحابة ومراكز البيانات والحافة، باستخدام أي مزود للأجهزة، من Intel إلى AMD وARM.
- قابلية توسع غير محدودة: وسّع نطاق العمل رأسيًا إلى مئات الأنوية، أو أفقيًا باستخدام Kubernetes القياسي، أو عبر طبقة تجريد كاملة باستخدام الحوسبة دون خادم.
- تكامل سهل: واجهات API واضحة لدمج نموذجك في تطبيق ومراقبته في بيئة الإنتاج.
كيف يحقق DeepSparse أداءً بمستوى GPU؟#
يستفيد DeepSparse من تناثر النموذج لزيادة سرعة أدائه.
يُعد إضفاء التناثر من خلال التقليم والتكميم تقنية مدروسة على نطاق واسع، تتيح تقليل حجم الشبكة والحوسبة اللازمة لتشغيلها بمقادير كبيرة، مع الحفاظ على الدقة. وDeepSparse واعٍ بالتناثر، أي إنه يتجاوز المعلمات التي جرى تصفيرها، ما يقلل مقدار الحوسبة في المرور الأمامي. وبما أن الحوسبة المتناثرة أصبحت الآن محدودة بعرض نطاق الذاكرة، ينفذ DeepSparse الشبكة على امتداد العمق، ويجزئ المسألة إلى أعمدة Tensor، وهي شرائط عمودية من الحوسبة تلائم ذاكرة التخزين المؤقت.
تتيح الشبكات المتناثرة ذات الحوسبة المضغوطة، والمنفذة على امتداد العمق ضمن ذاكرة التخزين المؤقت، لـ DeepSparse توفير أداء بمستوى GPU على وحدات 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 مقارنةً بـ ORT!
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 مقارنةً بـ ORT!
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 المشذّب والمكمّم في كتل من 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
# 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، إذ يجري صيانتهما بنشاط.