انتقل إلى المحتوى

Neural Magicديب سبارس

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

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

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

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

For the first time, your deep learning workloads can meet the performance demands of production without the complexity and costs of hardware accelerators. Put simply, DeepSparse gives you the performance of GPUs and the simplicity of software:

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

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

يستفيد DeepSparse من تناثر النموذج للحصول على تسريع أدائه.

Sparsification through pruning and quantization is a broadly studied technique, allowing order-of-magnitude reductions in the size and compute needed to execute a network, while maintaining high accuracy. DeepSparse is sparsity-aware, meaning it skips the zeroed out parameters, shrinking amount of compute in a forward pass. Since the sparse computation is now memory bound, DeepSparse executes the network depth-wise, breaking the problem into Tensor Columns, vertical stripes of computation that fit in cache.

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

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

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

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

الخروج Neural Magic's YOLOv5 وثائق لمزيد من التفاصيل.

استخدام عميق متفرق

سنتعرف على مثال لقياس الأداء ونشر نسخة متفرقة من YOLOv5s باستخدام DeepSparse.

تثبيت ديب سبارس

قم بتشغيل ما يلي لتثبيت DeepSparse. نوصيك باستخدام بيئة افتراضية مع Python.

pip install "deepsparse[server,yolo,onnxruntime]"

اجمع ONNX ملف

يقبل DeepSparse نموذجا في ONNX ، تم تمريره إما على النحو التالي:

  • كعب SparseZoo الذي يحدد ONNX في حديقة المتفرقة
  • مسار محلي إلى 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 API

Pipelines التفاف المعالجة المسبقة والإخراج بعد المعالجة في وقت التشغيل ، مما يوفر واجهة نظيفة لإضافة 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 runs on top of the popular FastAPI web framework and Uvicorn web server. With just a single CLI command, you can easily setup a model service endpoint with DeepSparse. The Server supports any Pipeline from DeepSparse, including object detection with YOLOv5, enabling you to send raw images to the endpoint and receive the bounding boxes.

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

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

مثال على الطلب، باستخدام Python's 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 معدل نقل وقت التشغيل على YOLOv5s ، باستخدام البرنامج النصي لقياس الأداء في DeepSparse.

تم تشغيل المعايير على AWS c6i.8xlarge مثيل (16 مركزا).

مقارنة أداء الدفعة 32

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

في الدفعة 32 ، ONNX يحقق وقت التشغيل 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 أفضل أداء له مع الطرز المتفرقة المحسنة ، فإنه يعمل أيضا بشكل جيد مع 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 يزيد عن ONNX وقت التشغيل أقوى.

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

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

في الدفعة 1 ، ONNX يحقق وقت التشغيل 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

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

في الدفعة 1 ، يحقق DeepSparse 135 عنصرا / ثانية باستخدام YOLOv5s مشذب ، زيادة في الأداء بمقدار 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 عنصرا / ثانية باستخدام YOLOv5s المشذب المكون من 4 كتل ، أ كسب الأداء 3.7x أكثر من 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 مجاني للبحث والاختبار. ابدأ باستخدام وثائقنا.


📅 Created 11 months ago ✏️ Updated 13 days ago

التعليقات