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