تحسين استنتاج OpenVINO لنموذج YOLO
مقدمة
عند نشر نماذج التعلم العميق، وخاصة تلك المخصصة لـ اكتشاف الكائنات مثل نماذج Ultralytics YOLO، فإن تحقيق الأداء الأمثل أمر بالغ الأهمية. يتعمق هذا الدليل في الاستفادة من مجموعة أدوات OpenVINO من Intel لتحسين الاستنتاج، مع التركيز على زمن الوصول والإنتاجية. سواء كنت تعمل على تطبيقات استهلاكية أو عمليات نشر واسعة النطاق، فإن فهم وتطبيق استراتيجيات التحسين هذه سيضمن تشغيل نماذجك بكفاءة على أجهزة متنوعة.
التحسين لزمن الوصول
يعد تحسين زمن الوصول أمراً حيوياً للتطبيقات التي تتطلب استجابة فورية من نموذج واحد لمدخل واحد، وهو أمر شائع في سيناريوهات المستهلك. الهدف هو تقليل التأخير بين الإدخال ونتيجة الاستنتاج. ومع ذلك، فإن تحقيق زمن وصول منخفض يتضمن دراسة متأنية، خاصة عند تشغيل استنتاجات متزامنة أو إدارة نماذج متعددة.
استراتيجيات رئيسية لتحسين زمن الوصول:
- استنتاج واحد لكل جهاز: الطريقة الأبسط لتحقيق زمن وصول منخفض هي القصر على استنتاج واحد في المرة الواحدة لكل جهاز. غالباً ما يؤدي التزامن الإضافي إلى زيادة في زمن الوصول.
- الاستفادة من الأجهزة الفرعية: يمكن للأجهزة مثل وحدات المعالجة المركزية متعددة المقابس أو وحدات معالجة الرسومات متعددة البلاطات تنفيذ طلبات متعددة مع حد أدنى من زيادة زمن الوصول من خلال استخدام أجهزتها الفرعية الداخلية.
- تلميحات أداء OpenVINO: يساهم استخدام
ov::LATENCYمن OpenVINO لخاصيةov::performance_modeأثناء تجميع النموذج في تبسيط ضبط الأداء، مما يوفر نهجاً مستقلاً عن الجهاز ومستقبلياً.
إدارة زمن وصول الاستنتاج الأول:
- التخزين المؤقت للنموذج: لتقليل تأثير تحميل النموذج وأوقات التجميع على زمن الوصول، استخدم التخزين المؤقت للنموذج حيثما أمكن. بالنسبة للسيناريوهات التي لا يكون فيها التخزين المؤقت ممكناً، توفر وحدات المعالجة المركزية عادةً أسرع أوقات تحميل للنموذج.
- تعيين النموذج مقابل القراءة: لتقليل أوقات التحميل، استبدلت OpenVINO قراءة النموذج بالتعيين. ومع ذلك، إذا كان النموذج على محرك أقراص قابل للإزالة أو شبكة، ففكر في استخدام
ov::enable_mmap(false)للعودة إلى القراءة. - اختيار الجهاز التلقائي (AUTO): يبدأ هذا الوضع الاستنتاج على وحدة المعالجة المركزية، ثم ينتقل إلى مُسرّع بمجرد أن يصبح جاهزاً، مما يقلل من زمن وصول الاستنتاج الأول بسلاسة.
التحسين للإنتاجية
يعد تحسين الإنتاجية أمراً بالغ الأهمية للسيناريوهات التي تخدم طلبات استنتاج عديدة في وقت واحد، مما يزيد من استخدام الموارد دون التضحية بشكل كبير بأداء الطلب الفردي.
نهج تحسين الإنتاجية:
-
تلميحات أداء OpenVINO: طريقة عالية المستوى ومستقبلية لتعزيز الإنتاجية عبر الأجهزة باستخدام تلميحات الأداء.
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
التجميع الصريح والتدفقات (Streams): نهج أكثر دقة يتضمن التجميع الصريح واستخدام التدفقات لضبط الأداء المتقدم.
تصميم التطبيقات الموجهة نحو الإنتاجية:
لتحقيق أقصى قدر من الإنتاجية، يجب على التطبيقات:
- معالجة المدخلات بالتوازي، والاستفادة الكاملة من قدرات الجهاز.
- تقسيم تدفق البيانات إلى طلبات استنتاج متزامنة، مجدولة للتنفيذ المتوازي.
- استخدام واجهة برمجة التطبيقات غير المتزامنة (Async API) مع ردود الاتصال للحفاظ على الكفاءة وتجنب نقص موارد الجهاز.
تنفيذ متعدد الأجهزة:
يعمل وضع الأجهزة المتعددة في OpenVINO على تبسيط توسيع نطاق الإنتاجية من خلال موازنة طلبات الاستنتاج تلقائياً عبر الأجهزة دون الحاجة إلى إدارة الجهاز على مستوى التطبيق.
مكاسب الأداء الواقعية
يمكن أن يؤدي تنفيذ تحسينات OpenVINO مع نماذج Ultralytics YOLO إلى تحسينات كبيرة في الأداء. كما هو موضح في المعايير، يمكن للمستخدمين تجربة سرعات استنتاج أسرع بما يصل إلى 3 مرات على وحدات المعالجة المركزية من Intel، مع إمكانية تحقيق تسارعات أكبر عبر مجموعة أجهزة Intel بما في ذلك وحدات معالجة الرسومات المدمجة، ووحدات معالجة الرسومات المخصصة، وVPUs.
على سبيل المثال، عند تشغيل نماذج YOLOv8 على وحدات المعالجة المركزية Intel Xeon، تتفوق الإصدارات المحسنة بواسطة OpenVINO باستمرار على نظيراتها في PyTorch من حيث وقت الاستنتاج لكل صورة، دون المساومة على الدقة.
التنفيذ العملي
لتصدير وتحسين نموذج Ultralytics YOLO الخاص بك لـ OpenVINO، يمكنك استخدام وظيفة التصدير:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precisionبعد التصدير، يمكنك تشغيل الاستنتاج باستخدام النموذج المحسن:
# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")
# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)خاتمة
إن تحسين نماذج Ultralytics YOLO لزمن الوصول والإنتاجية باستخدام OpenVINO يمكن أن يعزز أداء تطبيقك بشكل كبير. من خلال تطبيق الاستراتيجيات الموضحة في هذا الدليل بعناية، يمكن للمطورين ضمان تشغيل نماذجهم بكفاءة، وتلبية متطلبات سيناريوهات النشر المختلفة. تذكر أن الاختيار بين التحسين لزمن الوصول أو الإنتاجية يعتمد على احتياجات تطبيقك المحددة وخصائص بيئة النشر.
لمزيد من المعلومات الفنية التفصيلية وأحدث التحديثات، راجع وثائق OpenVINO و مستودع Ultralytics YOLO. توفر هذه الموارد أدلة متعمقة، ودروساً تعليمية، ودعماً مجتمعياً لمساعدتك في تحقيق أقصى استفادة من نماذج التعلم العميق الخاصة بك.
إن ضمان تحقيق نماذجك للأداء الأمثل لا يقتصر فقط على تعديل التكوينات؛ بل يتعلق بفهم احتياجات تطبيقك واتخاذ قرارات مستنيرة. سواء كنت تحسن للاستجابات في الوقت الفعلي أو تزيد من الإنتاجية للمعالجة واسعة النطاق، فإن الجمع بين نماذج Ultralytics YOLO وOpenVINO يوفر مجموعة أدوات قوية للمطورين لنشر حلول ذكاء اصطناعي عالية الأداء.
الأسئلة الشائعة
كيف يمكنني تحسين نماذج Ultralytics YOLO لزمن وصول منخفض باستخدام OpenVINO؟
يتضمن تحسين نماذج Ultralytics YOLO لزمن وصول منخفض عدة استراتيجيات رئيسية:
- استنتاج واحد لكل جهاز: قصر الاستنتاجات على واحد في كل مرة لكل جهاز لتقليل التأخير.
- الاستفادة من الأجهزة الفرعية: استخدم أجهزة مثل وحدات المعالجة المركزية متعددة المقابس أو وحدات معالجة الرسومات متعددة البلاطات التي يمكنها التعامل مع طلبات متعددة مع حد أدنى من زيادة زمن الوصول.
- تلميحات أداء OpenVINO: استخدم
ov::LATENCYمن OpenVINO أثناء تجميع النموذج لضبط مبسط ومستقل عن الجهاز.
لمزيد من النصائح العملية حول تحسين زمن الوصول، تحقق من قسم تحسين زمن الوصول في دليلنا.
لماذا يجب علي استخدام OpenVINO لتحسين إنتاجية Ultralytics YOLO؟
يعمل OpenVINO على تعزيز إنتاجية نموذج Ultralytics YOLO من خلال زيادة استخدام موارد الجهاز إلى أقصى حد دون التضحية بالأداء. تشمل الفوائد الرئيسية:
- تلميحات الأداء: ضبط أداء بسيط وعالي المستوى عبر الأجهزة.
- التجميع الصريح والتدفقات: ضبط دقيق لأداء متقدم.
- تنفيذ متعدد الأجهزة: موازنة تحميل الاستنتاج تلقائياً، مما يسهل الإدارة على مستوى التطبيق.
مثال على التكوين:
import openvino.properties.hint as hints
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)تعرف على المزيد حول تحسين الإنتاجية في قسم تحسين الإنتاجية من دليلنا التفصيلي.
ما هي أفضل الممارسات لتقليل زمن وصول الاستنتاج الأول في OpenVINO؟
لتقليل زمن وصول الاستنتاج الأول، ضع في اعتبارك هذه الممارسات:
- التخزين المؤقت للنموذج: استخدم التخزين المؤقت للنموذج لتقليل أوقات التحميل والتجميع.
- تعيين النموذج مقابل القراءة: استخدم التعيين (
ov::enable_mmap(true)) بشكل افتراضي ولكن انتقل إلى القراءة (ov::enable_mmap(false)) إذا كان النموذج على محرك أقراص قابل للإزالة أو شبكة. - اختيار الجهاز التلقائي (AUTO): استخدم وضع AUTO للبدء باستنتاج وحدة المعالجة المركزية والانتقال إلى مُسرّع بسلاسة.
للحصول على استراتيجيات مفصلة حول إدارة زمن وصول الاستنتاج الأول، راجع قسم إدارة زمن وصول الاستنتاج الأول.
كيف يمكنني الموازنة بين التحسين لزمن الوصول والإنتاجية مع Ultralytics YOLO وOpenVINO؟
تتطلب موازنة تحسين زمن الوصول والإنتاجية فهم احتياجات تطبيقك:
- تحسين زمن الوصول: مثالي للتطبيقات في الوقت الفعلي التي تتطلب استجابات فورية (مثل تطبيقات المستهلك).
- تحسين الإنتاجية: الأفضل للسيناريوهات التي تحتوي على العديد من الاستنتاجات المتزامنة، مما يزيد من استخدام الموارد (مثل عمليات النشر واسعة النطاق).
يمكن أن يساعد استخدام تلميحات أداء OpenVINO عالية المستوى وأوضاع الأجهزة المتعددة في تحقيق التوازن الصحيح. اختر تلميحات أداء OpenVINO المناسبة بناءً على متطلباتك المحددة.
هل يمكنني استخدام نماذج Ultralytics YOLO مع أطر عمل ذكاء اصطناعي أخرى بخلاف OpenVINO؟
نعم، نماذج Ultralytics YOLO متعددة الاستخدامات للغاية ويمكن دمجها مع مختلف أطر عمل الذكاء الاصطناعي. تشمل الخيارات:
- TensorRT: لتحسين وحدات معالجة الرسومات من NVIDIA، اتبع دليل تكامل TensorRT.
- CoreML: لأجهزة Apple، راجع تعليمات تصدير CoreML الخاصة بنا.
- TensorFlow.js: لتطبيقات الويب وNode.js، راجع دليل تحويل TF.js.
استكشف المزيد من عمليات التكامل على صفحة تكاملات Ultralytics.