Neural Magicديب سبارس
مرحبا بك في الذكاء الاصطناعي المقدمة من البرامج.
يشرح هذا الدليل كيفية النشر YOLOv5 مع Neural Magicفي ديب سبارس.
DeepSparse هو وقت تشغيل استدلالي مع أداء استثنائي على وحدات المعالجة المركزية. على سبيل المثال ، مقارنة ب ONNX خط الأساس لوقت التشغيل ، يوفر DeepSparse تسريع 5.8x ل YOLOv5s ، يعمل على نفس الجهاز!
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.
تسمح الشبكات المتفرقة ذات الحسابات المضغوطة التي يتم تنفيذها بعمق في ذاكرة التخزين المؤقت، لـ DeepSparse بتقديم أداء من فئة GPU على وحدات المعالجة المركزية!
كيف أقوم بإنشاء نسخة متفرقة من YOLOv5 هل تدربت على بياناتي؟
Neural Magicمستودع النماذج مفتوح المصدر ، SparseZoo ، يحتوي على نقاط تفتيش متفرقة مسبقا لكل منها YOLOv5 نموذج. استخدام SparseML ، الذي يتكامل مع Ultralytics، يمكنك ضبط نقطة تفتيش متفرقة على بياناتك باستخدام نقطة تفتيش واحدة CLI أمر.
الخروج Neural Magic's YOLOv5 وثائق لمزيد من التفاصيل.
استخدام عميق متفرق
سنتعرف على مثال لقياس الأداء ونشر نسخة متفرقة من YOLOv5s باستخدام DeepSparse.
تثبيت ديب سبارس
قم بتشغيل ما يلي لتثبيت DeepSparse. نوصيك باستخدام بيئة افتراضية مع Python.
اجمع 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 إلى تثبيته:
خادم 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 مجاني للبحث والاختبار. ابدأ باستخدام وثائقنا.