تحسين استدلال OpenVINO لـ YOLO
مقدمة
عند نشر نماذج التعلم العميق، وخاصة تلك الخاصة بـ اكتشاف الكائنات مثل نماذج Ultralytics YOLO، فإن تحقيق الأداء الأمثل أمر بالغ الأهمية. يتعمق هذا الدليل في الاستفادة من أداة OpenVINO من Intel لتحسين الاستدلال، مع التركيز على زمن الوصول والإنتاجية. سواء كنت تعمل على تطبيقات من الدرجة الاستهلاكية أو عمليات نشر واسعة النطاق، فإن فهم وتطبيق استراتيجيات التحسين هذه سيضمن تشغيل نماذجك بكفاءة على أجهزة مختلفة.
تحسين زمن الوصول
يعد تحسين زمن الوصول أمرًا حيويًا للتطبيقات التي تتطلب استجابة فورية من نموذج واحد بالنظر إلى مدخل واحد، وهو أمر نموذجي في سيناريوهات المستهلكين. الهدف هو تقليل التأخير بين الإدخال ونتيجة الاستدلال. ومع ذلك، فإن تحقيق زمن وصول منخفض ينطوي على دراسة متأنية، خاصة عند تشغيل عمليات استدلال متزامنة أو إدارة نماذج متعددة.
الاستراتيجيات الرئيسية لتحسين زمن الوصول:
- استدلال واحد لكل جهاز: أبسط طريقة لتحقيق زمن وصول منخفض هي الاقتصار على استدلال واحد في كل مرة لكل جهاز. غالبًا ما تؤدي التزامن الإضافي إلى زيادة زمن الوصول.
- الاستفادة من الأجهزة الفرعية: يمكن للأجهزة مثل وحدات المعالجة المركزية (CPUs) متعددة المقابس أو وحدات معالجة الرسوميات (GPUs) متعددة الشرائح تنفيذ طلبات متعددة مع الحد الأدنى من زيادة زمن الوصول عن طريق استخدام أجهزتها الفرعية الداخلية.
- تلميحات أداء OpenVINO: الاستفادة من OpenVINO
ov::hint::PerformanceMode::LATENCY
لـov::hint::performance_mode
تعمل الخاصية أثناء تجميع النموذج على تبسيط ضبط الأداء، مما يوفر طريقة مستقلة عن الجهاز ومقاومة للمستقبل.
إدارة زمن الوصول للاستدلال الأول:
- تخزين النماذج مؤقتًا: للتخفيف من تأثير أوقات تحميل النموذج وتجميعه على زمن الوصول، استخدم تخزين النموذج مؤقتًا حيثما أمكن ذلك. بالنسبة للسيناريوهات التي لا يكون فيها التخزين المؤقت ممكنًا، توفر وحدات المعالجة المركزية (CPUs) عمومًا أسرع أوقات تحميل للنموذج.
- تعيين النموذج مقابل القراءة: لتقليل أوقات التحميل، استبدلت OpenVINO قراءة النموذج بالتعيين. ومع ذلك، إذا كان النموذج موجودًا على محرك أقراص قابل للإزالة أو محرك أقراص شبكة، ففكر في استخدامه
ov::enable_mmap(false)
للتبديل مرة أخرى إلى القراءة. - تحديد الجهاز تلقائيًا (AUTO): يبدأ هذا الوضع الاستدلال على وحدة المعالجة المركزية (CPU)، وينتقل إلى مسرّع بمجرد أن يصبح جاهزًا، مما يقلل بسلاسة من زمن الوصول للاستدلال الأول.
تحسين الإنتاجية
يُعد تحسين الإنتاجية أمرًا بالغ الأهمية للسيناريوهات التي تخدم طلبات استدلال متعددة في وقت واحد، مما يزيد من استخدام الموارد إلى أقصى حد دون التضحية بأداء الطلب الفردي بشكل كبير.
مناهج تحسين الإنتاجية:
-
تلميحات أداء OpenVINO: طريقة عالية المستوى ومقاومة للمستقبل لتحسين الإنتاجية عبر الأجهزة باستخدام تلميحات الأداء.
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)
-
التقسيم المجمّع والتيارات الصريحة: نهج أكثر تفصيلاً يتضمن التقسيم المجمّع الصريح واستخدام التيارات لضبط الأداء المتقدم.
تصميم التطبيقات الموجهة نحو الإنتاجية:
لتحقيق أقصى قدر من الإنتاجية، يجب على التطبيقات:
- معالجة المدخلات بالتوازي، والاستفادة الكاملة من قدرات الجهاز.
- تقسيم تدفق البيانات إلى طلبات استدلال متزامنة، مجدولة للتنفيذ المتوازي.
- استخدام واجهة برمجة التطبيقات غير المتزامنة (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("yolov8n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precision
بعد التصدير، يمكنك تشغيل الاستدلال باستخدام النموذج الأمثل:
# Load the OpenVINO model
ov_model = YOLO("yolov8n_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: استخدم OpenVINO
ov::hint::PerformanceMode::LATENCY
أثناء تجميع النموذج لتبسيط الضبط المستقل عن الجهاز.
للحصول على مزيد من النصائح العملية حول تحسين زمن الوصول، تحقق من قسم تحسين زمن الوصول في دليلنا.
لماذا يجب علي استخدام 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)
) إذا كان النموذج موجودًا على محرك أقراص قابل للإزالة أو شبكة. - تحديد الجهاز تلقائيًا: استخدم الوضع التلقائي للبدء باستنتاج وحدة المعالجة المركزية والانتقال إلى مسرّع بسلاسة.
للحصول على استراتيجيات مفصلة حول إدارة زمن الوصول للاستنتاج الأول، راجع قسم إدارة زمن الوصول للاستنتاج الأول.
كيف يمكنني تحقيق التوازن بين التحسين لزمن الوصول والإنتاجية باستخدام Ultralytics YOLO و OpenVINO؟
تتطلب موازنة تحسين زمن الوصول والإنتاجية فهم احتياجات التطبيق الخاص بك:
- تحسين زمن الوصول: مثالي للتطبيقات في الوقت الفعلي التي تتطلب استجابات فورية (مثل تطبيقات الدرجة الاستهلاكية).
- تحسين الإنتاجية: الأفضل للسيناريوهات التي تتضمن العديد من الاستنتاجات المتزامنة، مما يزيد من استخدام الموارد (مثل عمليات النشر واسعة النطاق).
يمكن أن يساعد استخدام تلميحات الأداء عالية المستوى وأنماط الأجهزة المتعددة في OpenVINO في تحقيق التوازن الصحيح. اختر تلميحات أداء OpenVINO المناسبة بناءً على متطلباتك الخاصة.
هل يمكنني استخدام نماذج Ultralytics YOLO مع أطر عمل الذكاء الاصطناعي الأخرى إلى جانب OpenVINO؟
نعم، نماذج Ultralytics YOLO متعددة الاستخدامات للغاية ويمكن دمجها مع العديد من أطر عمل الذكاء الاصطناعي. تشمل الخيارات:
- TensorRT: لتحسين NVIDIA GPU، اتبع دليل تكامل TensorRT.
- CoreML: لأجهزة Apple، راجع تعليمات تصدير CoreML الخاصة بنا.
- TensorFlow.js: لتطبيقات الويب و Node.js، راجع دليل تحويل TF.js.
استكشف المزيد من عمليات الدمج على صفحة عمليات دمج Ultralytics.