تخطي إلى المحتوى

نشر YOLOv5 باستخدام DeepSparse من Neural Magic

مرحبًا بك في الذكاء الاصطناعي الذي يتم تقديمه عبر البرامج.

يشرح هذا الدليل كيفية نشر YOLOv5 باستخدام DeepSparse الخاص بـ Neural Magic.

DeepSparse هو وقت تشغيل للاستدلال يتميز بأداء استثنائي على وحدات المعالجة المركزية (CPUs). على سبيل المثال، بالمقارنة مع خط الأساس ONNX Runtime، يوفر DeepSparse تسريعًا بمقدار 5.8x لـ YOLOv5s، والذي يعمل على نفس الجهاز!

تحسين سرعة YOLOv5

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

  • عمليات نشر مرنة: تعمل باستمرار عبر السحابة ومركز البيانات والحافة مع أي مزود أجهزة من Intel إلى AMD إلى ARM
  • قابلية توسع لانهائية: قم بالتوسع عموديًا إلى مئات النوى، أو باستخدام Kubernetes القياسي، أو مجردة بالكامل باستخدام Serverless
  • سهولة التكامل: واجهات برمجة تطبيقات نظيفة لدمج النموذج الخاص بك في أحد التطبيقات ومراقبته أثناء الإنتاج

كيف يحقق DeepSparse أداءً يضاهي وحدة معالجة الرسوميات GPU؟

يستفيد DeepSparse من تفرق النموذج لتحقيق تسريع الأداء.

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

تقليم نموذج YOLO

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

كيف يمكنني إنشاء نسخة متفرقة من YOLOv5 تم تدريبها على بياناتي؟

يحتوي مستودع النماذج مفتوح المصدر الخاص بـ Neural Magic،‏ SparseZoo، على نقاط تفتيش مسبقة التحديد لكل نموذج YOLOv5. باستخدام SparseML، المدمج مع Ultralytics، يمكنك ضبط نقطة تفتيش متفرقة على بياناتك باستخدام أمر CLI واحد.

تحقق من وثائق Neural Magic's 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 واجهات برمجة تطبيقات (APIs) ملائمة لدمج النموذج الخاص بك في أحد التطبيقات.

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

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

Python API

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

إنشاء 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

خادم 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 الحزمة:

import json

import requests

# 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"]

التعليق التوضيحي 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

في الدفعة 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 في السيناريو الحساس لزمن الوصول، دفعة واحدة.

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

في الدفعة 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 مجاني للبحث والاختبار. ابدأ باستخدام وثائقهم.

لمزيد من المعلومات حول نشر YOLOv5 باستخدام DeepSparse، تحقق من وثائق DeepSparse الخاصة بـ Neural Magic و منشور مدونة Ultralytics حول تكامل DeepSparse.



📅 أُنشئ منذ سنة واحدة ✏️ تم التحديث منذ 26 يومًا

تعليقات