نشر YOLOv5 باستخدام DeepSparse من Neural Magic
مرحبًا بك في الذكاء الاصطناعي الذي يتم تقديمه عبر البرامج.
يشرح هذا الدليل كيفية نشر YOLOv5 باستخدام DeepSparse الخاص بـ Neural Magic.
DeepSparse هو وقت تشغيل للاستدلال يتميز بأداء استثنائي على وحدات المعالجة المركزية (CPUs). على سبيل المثال، بالمقارنة مع خط الأساس ONNX Runtime، يوفر DeepSparse تسريعًا بمقدار 5.8x لـ YOLOv5s، والذي يعمل على نفس الجهاز!
للمرة الأولى، يمكن لأحمال عمل التعلم العميق الخاصة بك تلبية متطلبات الأداء للإنتاج دون تعقيد وتكاليف مسرّعات الأجهزة. ببساطة، يمنحك DeepSparse أداء وحدات معالجة الرسوميات (GPU) وبساطة البرامج:
- عمليات نشر مرنة: تعمل باستمرار عبر السحابة ومركز البيانات والحافة مع أي مزود أجهزة من Intel إلى AMD إلى ARM
- قابلية توسع لانهائية: قم بالتوسع عموديًا إلى مئات النوى، أو باستخدام Kubernetes القياسي، أو مجردة بالكامل باستخدام Serverless
- سهولة التكامل: واجهات برمجة تطبيقات نظيفة لدمج النموذج الخاص بك في أحد التطبيقات ومراقبته أثناء الإنتاج
كيف يحقق DeepSparse أداءً يضاهي وحدة معالجة الرسوميات GPU؟
يستفيد DeepSparse من تفرق النموذج لتحقيق تسريع الأداء.
إن التخفيف من خلال التقليم والتكميم هو أسلوب تمت دراسته على نطاق واسع، مما يسمح بتقليل حجم الحساب اللازم لتنفيذ الشبكة بترتيب الحجم، مع الحفاظ على دقة عالية. DeepSparse على دراية بالتفرق، مما يعني أنه يتخطى المعلمات التي تم تصفيرها، مما يقلل من مقدار الحساب في التمرير الأمامي. نظرًا لأن الحساب المتفرق مرتبط الآن بالذاكرة، فإن DeepSparse ينفذ الشبكة على مستوى العمق، ويقسم المشكلة إلى أعمدة Tensor، وهي خطوط عمودية من العمليات الحسابية التي تتناسب مع ذاكرة التخزين المؤقت.
تسمح الشبكات المتفرقة ذات الحساب المضغوط، والمنفذة على مستوى العمق في ذاكرة التخزين المؤقت، لـ DeepSparse بتقديم أداء من فئة وحدة معالجة الرسومات (GPU) على وحدات المعالجة المركزية (CPU)!
كيف يمكنني إنشاء نسخة متفرقة من YOLOv5 تم تدريبها على بياناتي؟
يحتوي مستودع النماذج مفتوح المصدر الخاص بـ Neural Magic، SparseZoo، على نقاط تفتيش مسبقة التحديد لكل نموذج YOLOv5. باستخدام SparseML، المدمج مع Ultralytics، يمكنك ضبط نقطة تفتيش متفرقة على بياناتك باستخدام أمر CLI واحد.
تحقق من وثائق Neural Magic's 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 واجهات برمجة تطبيقات (APIs) ملائمة لدمج النموذج الخاص بك في أحد التطبيقات.
لتجربة أمثلة النشر أدناه، اسحب صورة نموذجية واحفظها باسم basilica.jpg
باستخدام ما يلي:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
Python API
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 فوق إطار عمل الويب الشائع FastAPI وخادم الويب Uvicorn. باستخدام أمر CLI واحد فقط، يمكنك بسهولة إعداد نقطة نهاية خدمة النموذج باستخدام DeepSparse. يدعم الخادم أي خط أنابيب من DeepSparse، بما في ذلك اكتشاف الكائنات باستخدام YOLOv5، مما يتيح لك إرسال صور أولية إلى نقطة النهاية وتلقي المربعات المحيطة.
تشغيل الخادم باستخدام YOLOv5s المشذبة والمكممة:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
مثال على طلب، باستخدام 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 Runtime على YOLOv5s، باستخدام برنامج قياس DeepSparse.
تم تشغيل المعايير على AWS c6i.8xlarge
مثيل (16 نواة).
مقارنة أداء الدفعة 32
خط الأساس لوقت تشغيل ONNX
في الدفعة 32، يحقق ONNX Runtime 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 الكثيف
في حين أن 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 المتفرق
عند تطبيق التخفيف على النموذج، يصبح تحسن أداء DeepSparse على ONNX Runtime أقوى.
في الدفعة 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 Runtime في السيناريو الحساس لزمن الوصول، دفعة واحدة.
خط الأساس لوقت تشغيل ONNX
في الدفعة 1، يحقق ONNX Runtime 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
أداء DeepSparse المتفرق
في الدفعة 1، تحقق DeepSparse 135 عنصرًا/ثانية مع YOLOv5s المشذب والمكمم، مكسب أداء قدره 2.8x مقارنة بـ ONNX Runtime!
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 Runtime!
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 مجاني للبحث والاختبار. ابدأ باستخدام وثائقهم.
لمزيد من المعلومات حول نشر YOLOv5 باستخدام DeepSparse، تحقق من وثائق DeepSparse الخاصة بـ Neural Magic و منشور مدونة Ultralytics حول تكامل DeepSparse.