تمكين Ultralytics YOLOv5 تدريب النماذج ونشرها باستخدام Neural Magic'DeepSparse من 'DeepSparse لأداء GPU-الفئة على وحدات المعالجة المركزية. تحقيق عمليات نشر YOLOv5 أسرع وقابلة للتطوير .
تريد تسريع التدريب ونشر الخاص بك YOLOv5 نماذج؟ لقد حصلت على تغطيتها! نقدم لكم أحدث شريك لنا ، Neural Magic. مثل Neural Magic يوفر أدوات برمجية تؤكد على ذروة أداء النموذج وبساطة سير العمل ، ومن الطبيعي أن نجتمع معا لتقديم حل لجعل YOLOv5 عملية النشر أفضل.
DeepSparse هو وقت تشغيل الاستدلال CPU الخاص بـ Neural Magic، والذي يستفيد من التباعد والحسابات منخفضة الدقة داخل الشبكات العصبية لتقديم أداء استثنائي على الأجهزة السلعية. على سبيل المثال، بالمقارنة مع خط الأساس لوقت التشغيل ONNX Runtime، يوفر DeepSparse سرعة 5.8 أضعاف لـ YOLOv5s التي تعمل على نفس الجهاز!
لأول مرة ، يمكن لأحمال عمل التعلم العميق تلبية متطلبات أداء الإنتاج دون تعقيد وتكاليف مسرعات الأجهزة. ببساطة ، يمنحك DeepSparse أداء وحدات معالجة الرسومات وبساطة البرنامج:
يستفيد DeepSparse من تناثر النموذج للحصول على تسريع أدائه.
يسمح التوزيع من خلال التقليم والتكميم بتخفيضات في الحجم والحوسبة اللازمة لتنفيذ الشبكة مع الحفاظ على الدقة العالية. DeepSparse مدرك للتناثر ، ويتخطى عمليات الجمع المضاعفة بمقدار صفر ويقلص مقدار الحوسبة في التمرير الأمامي. نظرا لأن الحساب المتناثر مرتبط بالذاكرة ، فإن DeepSparse ينفذ عمق الشبكة من حيث العمق ، ويقسم المشكلة إلى Tensor الأعمدة ، وهي خطوط عمودية للحساب تتناسب مع ذاكرة التخزين المؤقت.
تسمح الشبكات المتفرقة ذات الحسابات المضغوطة التي يتم تنفيذها بعمق في ذاكرة التخزين المؤقت، لـ DeepSparse بتقديم أداء من فئة GPU على وحدات المعالجة المركزية!
Neural Magicمستودع النماذج مفتوح المصدر ، SparseZoo ، يحتوي على نقاط تفتيش متفرقة مسبقا لكل منها YOLOv5 نموذج. استخدام SparseML ، الذي يتكامل مع Ultralytics، يمكنك ضبط نقطة تفتيش متفرقة على بياناتك باستخدام نقطة تفتيش واحدة CLI أمر.
سحب Neural Magic's YOLOv5 وثائق لمزيد من التفاصيل.
قم بتشغيل ما يلي لتثبيت DeepSparse. نوصيك باستخدام بيئة افتراضية مع Python.
نقطة تثبيت deepsparse[الخادم,yolo، onnxruntime]
يقبل DeepSparse نموذجا في ONNX ، تم تمريره إما على النحو التالي:
سنقارن YOLOv5s الكثيفة القياسية ب YOLOv5s المشذبة ، والتي تم تحديدها بواسطة بذرة SparseZoo التالية:
حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/ كوكو / قاعدة لا شيء
حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned65_quant-لا شيء
يوفر DeepSparse واجهات برمجة تطبيقات ملائمة لدمج نموذجك في أحد التطبيقات.
لتجربة أمثلة النشر أدناه، اسحب صورة عينة للمثال لأسفل واحفظها ك basilica.jpg الأمر التالي:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
تلتف خطوط الأنابيب حول المعالجة المسبقة والمعالجة اللاحقة للإخراج في وقت التشغيل ، مما يوفر واجهة نظيفة لإضافة DeepSparse إلى أحد التطبيقات. المتناثر العميق-Ultralytics يتضمن التكامل خط أنابيب جاهز يقبل الصور الأولية ويخرج المربعات المحيطة.
إنشاء خط أنابيب وتشغيل الاستدلال:
من خط أنابيب الاستيراد المتناثر العميق
# قائمة الصور في نظام الملفات المحلي
الصور = ["basilica.jpg"]
# إنشاء خط أنابيب
model_stub = "حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned65_quant-لا شيء"
yolo_pipeline = خط الأنابيب.إنشاء (
المهمة = "yolo",
model_path=model_stub,
)
# تشغيل الاستدلال على الصور ، وتلقي المربعات المحيطة + الفئات
pipeline_outputs = yolo_pipeline (الصور = الصور ، iou_thres = 0.6 ، conf_thres = 0.001)
طباعة(pipeline_outputs)
إذا كنت تعمل في السحابة ، فقد تحصل على خطأ مفاده أن open-cv لا يمكنه العثور على libGL.so.1. يؤدي تشغيل ما يلي على Ubuntu إلى تثبيته:
apt-get install libgl1-mesa-glx
يعمل خادم DeepSparse على رأس إطار عمل الويب FastAPI الشهير وخادم الويب Uvicorn. مع واحد فقط CLI ، يمكنك بسهولة إعداد نقطة نهاية خدمة نموذج باستخدام DeepSparse. يدعم الخادم أي خط أنابيب من DeepSparse ، بما في ذلك اكتشاف الكائنات باستخدام YOLOv5، مما يتيح لك إرسال صور أولية إلى نقطة النهاية واستقبال المربعات المحيطة.
قم بتدوير الخادم باستخدام YOLOv5s المشذبة:
خادم deepsparse.server \
--مهمة yolo \
--model_path حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned65_quant-لا شيء
مثال على الطلب، باستخدام Pythonحزمة الطلبات:
طلبات الاستيراد، JSON
# قائمة الصور للاستدلال (الملفات المحلية على جانب العميل)
المسار = ['basilica.jpg']
الملفات = [('طلب' ، فتح (IMG ، 'RB')) ل IMG في المسار]
# إرسال طلب عبر HTTP إلى نقطة النهاية / التنبؤ / from_files
عنوان URL = "http://0.0.0.0:5543/predict/from_files"
resp = requests.post (عنوان url = url ، الملفات = الملفات)
# يتم إرجاع الاستجابة في JSON
التعليقات التوضيحية = json.loads (resp.text) # قاموس نتائج التعليقات التوضيحية
bounding_boxes = التعليقات التوضيحية["مربعات"]
التسميات = التعليقات التوضيحية["التسميات"]
يمكنك أيضا استخدام الأمر annotate لجعل المحرك يحفظ صورة مشروحة على القرص. جرب --source 0 لإضافة تعليق توضيحي على موجز كاميرا الويب المباشر!
deepsparse.object_detection.annotate --model_filepath حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/ كوكو / pruned65_quant - لا شيء - المصدر basilica.jpg
سيؤدي تشغيل الأمر أعلاه إلى إنشاء مجلد نتائج التعليقات التوضيحية وحفظ الصورة المشروحة بالداخل.
باستخدام البرنامج النصي لقياس الأداء في DeepSparse ، سنقارن إنتاجية DeepSparse ب ONNX معدل نقل وقت التشغيل على YOLOv5s.
تم تشغيل المعايير على مثيل AWS c6i.8xlarge (16 مركزا).
في الدفعة 32 ، ONNX يحقق وقت التشغيل 42 صورة / ثانية باستخدام YOLOv5s القياسية الكثيفة:
deepsparse.benchmark حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/ كوكو / قاعدة لا شيء -S مزامنة -B 32 -nstreams 1 -e onnxruntime
> مسار النموذج الأصلي: حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/ كوكو / قاعدة لا شيء
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (العناصر/ثانية): 41.9025
بينما يقدم DeepSparse أفضل أداء له مع الطرز المتفرقة المحسنة ، فإنه يعمل أيضا بشكل جيد مع YOLOv5s الكثيفة القياسية.
في الدفعة 32 ، يحقق DeepSparse 70 صورة / ثانية مع YOLOv5s الكثيف القياسي - وهو تحسين أداء 1.7x مقارنة ب ORT!
deepsparse.benchmark حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/ كوكو / قاعدة لا شيء -S مزامنة -B 32 -nstreams 1
> مسار النموذج الأصلي: حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/ كوكو / قاعدة لا شيء
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (العناصر/ثانية): 69.5546
عندما يتم تطبيق التناثر على النموذج ، فإن أداء DeepSparse يزيد عن ONNX وقت التشغيل أقوى.
في الدفعة 32 ، يحقق DeepSparse 241 صورة / ثانية باستخدام YOLOv5s المشذبة - وهو تحسن في الأداء بمقدار 5.8 مرة مقارنة ب ORT!
deepsparse.benchmark حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned65_quant-لا شيء-ق سينك -ب 32 -nstreams 1
> مسار النموذج الأصلي: حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned65_quant-لا شيء
> حجم الدفعة: 32
> السيناريو: مزامنة
> الإنتاجية (عناصر / ثانية): 241.2452
DeepSparse قادر أيضا على الحصول على تسريع أكثر من ONNX وقت التشغيل لسيناريو الدفعة 1 الحساس لزمن الوصول.
في الدفعة 1 ، ONNX يحقق وقت التشغيل 48 صورة / ثانية باستخدام YOLOv5s القياسية الكثيفة.
deepsparse.benchmark حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/ كوكو / قاعدة لا شيء -S مزامنة -B 1 -nstreams 1 -e onnxruntime
> مسار النموذج الأصلي: حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/ كوكو / قاعدة لا شيء
> حجم الدفعة: 1
> السيناريو: مزامنة
> الإنتاجية (العناصر/ثانية): 48.0921
عندما يتم تطبيق التناثر على النموذج ، فإن أداء DeepSparse يزيد عن ONNX وقت التشغيل أقوى.
في الدفعة 1 ، يحقق DeepSparse 135 صورة / ثانية باستخدام YOLOv5s المشذب -تحسن في الأداء بمقدار 2.8 مرة ONNX وقت التشغيل!
deepsparse.benchmark حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned65_quant-لا شيء-ق سينك -ب 32 -nstreams 1
> مسار النموذج الأصلي: حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned65_quant-لا شيء
> حجم الدفعة: 1
> السيناريو: مزامنة
> الإنتاجية (العناصر/ثانية): 134.9468
نظرا لأن مثيلات c6i.8xlarge تحتوي على تعليمات VNNI ، يمكن دفع إنتاجية DeepSparse إلى أبعد من ذلك إذا تم تقليم الأوزان في كتل من 4.
في الدفعة 1 ، يحقق DeepSparse 180 عنصرا / ثانية باستخدام YOLOv5s المشذب المكون من 4 كتل -زيادة في الأداء بمقدار 3.7 أضعاف ONNX وقت التشغيل!
deepsparse.benchmark حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned35_quant-لا شيء-vnni -s sync -b 1 -nstreams 1
> مسار النموذج الأصلي: حديقة: السيرة الذاتية / الكشف /yolov5-ق/pytorch/ultralytics/كوكو/pruned35_quant-نوني-فني
> حجم الدفعة: 1
> السيناريو: مزامنة
> الإنتاجية (العناصر/ثانية): 179.7375
وفويلا! أنت جاهز ل تحسين YOLOv5 النشر باستخدام DeepSparse.
للتواصل معنا ، انضم إلى مجتمعنا واترك لنا أسئلتك وتعليقاتك. تحقق من Ultralytics YOLOv5 مستودع وكامل Neural Magic وثائق النشر YOLOv5.
في Ultralytics، نحن نتشارك تجاريا مع الشركات الناشئة الأخرى لمساعدتنا في تمويل البحث والتطوير لأدواتنا الرائعة مفتوحة المصدر ، مثل YOLOv5، لإبقائها مجانية للجميع. قد تحتوي هذه المقالة على روابط تابعة لهؤلاء الشركاء.