نشر YOLOv5 باستخدام DeepSparse من Neural Magic
مرحبًا بك في عالم الذكاء الاصطناعي المعتمد على البرمجيات.
يشرح هذا الدليل كيفية نشر YOLOv5 باستخدام DeepSparse من Neural Magic.
DeepSparse هو بيئة تشغيل استدلال ذات أداء استثنائي على وحدات المعالجة المركزية (CPUs). على سبيل المثال، مقارنةً بخط أساس ONNX Runtime، يوفر DeepSparse تسريعًا بمقدار 5.8 ضعف لنموذج YOLOv5s عند التشغيل على نفس الجهاز!
لأول مرة، يمكن لأحمال عمل التعلم العميق الخاصة بك تلبية متطلبات الأداء للإنتاج دون تعقيدات وتكاليف مسرعات الأجهزة. ببساطة، يمنحك DeepSparse أداء وحدات معالجة الرسومات (GPUs) وبساطة البرمجيات:
- نشر مرن: تشغيل ثابت عبر السحابة، ومراكز البيانات، والحافة مع أي مزود أجهزة من Intel إلى AMD إلى ARM
- قابلية توسع غير محدودة: توسع عموديًا ليصل إلى مئات النوى، أو أفقيًا مع Kubernetes القياسي، أو بشكل مجرد تمامًا مع Serverless
- تكامل سهل: واجهات برمجة تطبيقات (APIs) نظيفة لدمج نموذجك في تطبيق ما ومراقبته في بيئة الإنتاج
كيف يحقق DeepSparse أداءً بمستوى وحدات معالجة الرسومات؟
يستفيد DeepSparse من تفرق النموذج (model sparsity) لتحقيق تسريع الأداء.
تعد التفرقة (Sparsification) من خلال التقليم (pruning) والكمية (quantization) تقنية مدروسة على نطاق واسع، وتسمح بتقليل حجم الحوسبة المطلوبة لتنفيذ الشبكة بأضعاف، مع الحفاظ على دقة عالية. DeepSparse مدرك للتفرقة، مما يعني أنه يتخطى المعاملات الصفرية، مما يقلل من حجم الحوسبة في التمريرة الأمامية. وبما أن الحوسبة المتفرقة أصبحت الآن مقيدة بالذاكرة، يقوم DeepSparse بتنفيذ الشبكة بعمق، مقسمًا المشكلة إلى أعمدة موتر (Tensor Columns)، وهي شرائط عمودية من الحوسبة تتناسب مع ذاكرة التخزين المؤقت.
الشبكات المتفرقة ذات الحوسبة المضغوطة، التي يتم تنفيذها بعمق داخل ذاكرة التخزين المؤقت، تسمح لـ DeepSparse بتقديم أداء بمستوى وحدات معالجة الرسومات على وحدات المعالجة المركزية!
كيف يمكنني إنشاء نسخة متفرقة من YOLOv5 تم تدريبها على بياناتي؟
يحتوي مستودع النماذج مفتوح المصدر الخاص بـ Neural Magic، SparseZoo، على نقاط تحقق (checkpoints) متفرقة مسبقًا لكل نموذج YOLOv5. باستخدام SparseML، المدمج مع Ultralytics، يمكنك ضبط نقطة تحقق متفرقة على بياناتك باستخدام أمر CLI واحد.
اطلع على وثائق YOLOv5 الخاصة بـ Neural Magic لمزيد من التفاصيل.
استخدام 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.jpgPython API
تغلف Pipelines المعالجة المسبقة وما بعد المعالجة للمخرجات حول بيئة التشغيل، مما يوفر واجهة نظيفة لإضافة DeepSparse إلى تطبيق ما. يتضمن تكامل DeepSparse-Ultralytics Pipeline جاهزًا للاستخدام يقبل الصور الخام ويخرج مربعات الإحاطة (bounding boxes).
أنشئ 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)إذا كنت تعمل في السحابة، فقد تحصل على خطأ يفيد بأن OpenCV لا يمكنه العثور على libGL.so.1. يمكنك إما تثبيت المكتبة المفقودة:
apt-get install libgl1أو استخدام حزمة Ultralytics غير المرئية (headless) التي تتجنب تبعيات واجهة المستخدم الرسومية تمامًا:
pip install ultralytics-opencv-headlessخادم HTTP
يعمل DeepSparse Server فوق إطار عمل الويب الشهير FastAPI وخادم الويب Uvicorn. باستخدام أمر CLI واحد فقط، يمكنك بسهولة إعداد نقطة نهاية لخدمة النموذج باستخدام DeepSparse. يدعم الخادم أي Pipeline من DeepSparse، بما في ذلك اكتشاف الكائنات باستخدام YOLOv5، مما يتيح لك إرسال صور خام إلى نقطة النهاية واستقبال مربعات الإحاطة.
قم بتشغيل الخادم باستخدام نموذج YOLOv5s المقلم والمكمم:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-noneطلب مثال، باستخدام حزمة requests الخاصة بـ Python:
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)
يمكنك أيضًا استخدام أمر 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 (Batch 32)
خط أساس ONNX Runtime
في الدفعة 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.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 المتفرق
عند تطبيق التفرقة على النموذج، تكون مكاسب أداء DeepSparse مقارنة بـ ONNX Runtime أقوى حتى.
في الدفعة 32، يحقق DeepSparse 241 صورة/ثانية مع نموذج YOLOv5s المقلم والمكمم، وهو تحسن في الأداء بمقدار 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
DeepSparse قادر أيضًا على اكتساب تسريع مقارنة بـ ONNX Runtime لسيناريو الدفعة 1 الحساس لزمن الانتقال.
خط أساس ONNX Runtime
في الدفعة 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.8 ضعف مقارنة بـ 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.7 ضعف مقارنة بـ 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 Community مجاني للأبحاث والاختبار. ابدأ مع وثائقهم.
لمزيد من المعلومات حول نشر YOLOv5 باستخدام DeepSparse، تحقق من وثائق DeepSparse الخاصة بـ Neural Magic و منشور مدونة Ultralytics حول تكامل DeepSparse.