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

Neural Magicديب سبارس

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

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

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

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

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

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

كيف يحقق DeepSparse أداء من فئة GPU؟

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

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

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

قم بتدوير الخادم باستخدام 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 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (6)

التعليقات