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

Neural Magicديب سبارس

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

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

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

YOLOv5 تحسين السرعة

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

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

كيف يحقق DeepSparse أداءً GPU-Class؟

تستفيد DeepSparse من تباعد النماذج لزيادة سرعة أدائها.

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

YOLO التقليم النموذجي

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

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

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

راجع الموقع الإلكتروني Neural Magic' 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 واجهات برمجة تطبيقات ملائمة لدمج نموذجك في تطبيق ما.

لتجربة أمثلة النشر أدناه، اسحب نموذج صورة واحفظه بصيغة 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

# 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 Server على إطار عمل الويب FastAPI الشهير وخادم الويب Uvicorn. باستخدام أمر واحد فقط CLI ، يمكنك بسهولة إعداد نقطة نهاية خدمة نموذجية باستخدام DeepSparse. يدعم الخادم أي خط أنابيب من DeepSparse، بما في ذلك اكتشاف الكائنات باستخدام YOLOv5 ، مما يتيح لك إرسال الصور الخام إلى نقطة النهاية واستلام المربعات المحدودة.

قم بتشغيل الخادم باستخدام YOLOv5s YOLOv5s المشذبة والمقلّمة:

deepsparse.server \
    --task yolo \
    --model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

مثال على الطلب، باستخدام Python 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

يمكنك أيضًا استخدام أمر التعليق التوضيحي لجعل المحرك يحفظ صورة مشروحة على القرص. جرّب --المصدر 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 صورة/ثانية باستخدام وحدات YOLOv5 القياسية الكثيفة:

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 يقدم أفضل أداء له مع النماذج المتفرقة المحسّنة، فإنه يؤدي أيضًا أداءً جيدًا مع نماذج YOLOv5 القياسية الكثيفة.

عند الدُفعة 32، يحقق DeepSparse 70 صورة/ثانية باستخدام YOLOv5s القياسية الكثيفة YOLOv5، وهو ما يمثل تحسنًا في الأداء بمقدار 1.7 مرة مقارنةً بـ 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 على أداء ONNX Runtime أقوى.

عند الدُفعة 32، يحقق DeepSparse 241 صورة/ثانية باستخدام YOLOv5s المنقحة والمقننة والمقننة في الدفعة 32، وهو ما يمثل تحسنًا في الأداء بمقدار 5.8 أضعاف مقارنةً بأداء 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 من الدفعة 1

كما أن DeepSparse قادر أيضًا على زيادة السرعة على ONNX وقت التشغيل لسيناريو الدُفعة 1 الحساس لوقت الاستجابة.

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

في الدفعة 1، يحقق وقت التشغيل ONNX 48 صورة/ثانية باستخدام وحدات YOLOv5 القياسية الكثيفة YOLOv5.

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

أداء متناثر عميق ومتفرق

في الدفعة 1، يحقق DeepSparse 135 عنصرًا/ثانية باستخدام YOLOv5s مشذبة ومختصرة ومختصرة في الدفعة 1، وهو ما يمثل زيادة في الأداء بمقدار 2.8 مرة عن أداء ONNX وقت التشغيل !

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 عنصرًا/ثانية باستخدام YOLOv5 المقطوع والمُقَطَّع والمُقَسَّم إلى 4 كتل؛ وهو ما يمثل زيادة في الأداء بمقدار 3.7 مرة عن أداء ONNX وقت التشغيل !

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

📅 تم إنشاؤها منذ 1 سنة مضت ✏️ تم التحديث منذ 2 شهر

التعليقات