Ultralytics YOLO27: انضم إلى قائمة الانتظار.
Get Started
Ultralytics YOLO في بيئة الإنتاج·اختر بيئة تشغيل·الدرس 1/9
الدرسمتوسط

اختر هدف النشر

حدّد بيئة تشغيل وتنسيق تصدير انطلاقًا من الجهاز وميزانية زمن الاستجابة وأسطول الأجهزة، ثم تحقّق من الاختيار على الجهاز.

كاميرا مرورية فوق طريق سريع في مدينة عند غروب الشمس، يتتبع فيها Ultralytics YOLO سيارات وشاحنة صغيرة وشاحنات، وكل منها يحمل تسمية فئة ومعرّفًا

يستغرق YOLO26n نفسه 38.9 مللي ثانية لكل صورة على CPU باستخدام ONNX Runtime، و1.7 مللي ثانية على وحدة معالجة رسومية T4 باستخدام TensorRT في اختبارات YOLO26 المعيارية. اختر بيئة التشغيل الخاطئة، فإما أن تدفع تكلفة أجهزة تفوق حاجتك بكثير، أو تنشر كاميرات لا تستطيع مواكبة العمل. يحوّل هذا الدرس الاختيار إلى قرار مدته عشر دقائق، ويمكنك تبريره بأرقام قِيست على الجهاز نفسه.

النتيجة

اختر بيئة التشغيل وقيمة format= لجهاز ما، وحوّل هدف FPS إلى ميزانية بالمللي ثانية، ثم تحقق من الاختيار عبر اختبارات معيارية متكررة.

المسار السريع
إذا كنت تعرف الأساسيات بالفعل، فإليك النسخة المختصرة.
  1. وحدة معالجة رسومية من NVIDIA أو Jetson ← TensorRT (engine)، يُنشأ على الجهاز المستهدف. وحدة CPU أو iGPU أو NPU من Intel ← OpenVINO (openvino).

  2. Apple ← CoreML (coreml). Android ← LiteRT (litert). وحدة NPU من Snapdragon ← QNN (qnn). Raspberry Pi ← NCNN (ncnn).

  3. أي جهاز آخر ← ONNX Runtime (onnx). لا تريد خوادم؟ استخدم نقطة نهاية مُدارة على منصة Ultralytics.

  4. الميزانية = 1000 ÷ FPS، بعد طرح زمن فك الترميز والمعالجة اللاحقة. قِس أداء الخيارات على الجهاز، واعتمد المئين 95 لا المتوسط.

عملي

ابدأ من الجهاز#

تُحدَّد بيئة التشغيل وفقًا لمكان إجراء الاستدلال، لا للعادة. اتبع شجرة القرار من أعلاها وتوقف عند أول خيار ينطبق:

ترتبط كل بيئة تشغيل بقيمة format= واحدة في وضع التصدير:

الهدفبيئة التشغيلformat=انتبه إلى
وحدة معالجة رسومية من NVIDIA، أو JetsonTensorRTengineلا يعمل المحرك إلا على عائلة وحدات معالجة الرسوميات وإصدار TensorRT اللذين أنشآه
وحدة CPU أو iGPU أو NPU من IntelOpenVINOopenvinoمُحسّن لأجهزة Intel؛ قِس الأداء قبل استخدامه على أجهزة أخرى
أي وحدة CPU أو GPUONNX Runtimeonnxاختر موفّر التنفيذ صراحةً
iPhone أو iPad أو MacCoreMLcoremlيُجرى التصدير على macOS أو Linux، وليس Windows
Android أو جهاز مضمّنLiteRTlitertيتطلب INT8 بيانات معايرة data
وحدة NPU من SnapdragonQualcomm QNNqnnللتصدير الكمّي فقط؛ مرّر هدف Hexagon على النحو name
Raspberry Pi، ووحدة معالجة مركزية ARMNCNNncnnأسرع تنسيق في دليل Raspberry Pi
المتصفحONNX Runtime Webonnxالتزم بنماذج n أو s

على منصات Apple الحديثة، يمكنك أيضًا التصدير بتنسيق Core AI الأحدث من Apple (format=coreai، ويُصدَّر على macOS 26+ باستخدام Apple silicon أو Linux بمعمارية x86-64). هل أنت جديد على التصدير؟ يشرح درس التصدير للنشر الأساسيات.

إذا كنت تفضّل عدم تشغيل خوادم الاستدلال مطلقًا، تنشر Ultralytics Platform النموذج بوصفه نقطة نهاية مخصصة في واحدة من 42 منطقة، وتُظهر علامة تبويب Deployments في ملفك الشخصي مواقع تشغيل كل منها:

علامة تبويب Deployments في ملف Ultralytics Platform الشخصي، وتضم خريطة عالمية لمناطق النشر وبطاقات نظرة عامة على عمليات النشر النشطة وطلبات HTTP ومعدل الأخطاء وزمن الاستجابة P95

يتناول نشر نقطة نهاية واستدعاؤها هذا المسار. أما بقية هذه الدورة فتتناول تشغيلك للنموذج بنفسك.

حوّل هدف FPS إلى ميزانية بالمللي ثانية#

«الوقت الفعلي» ليس متطلبًا؛ بل المطلوب رقم محدد. احسبه قبل إجراء أي اختبار للأداء:

الانتقالمثال: 20 FPS لكل كاميرا
ميزانية الإطار = 1000 ÷ FPS50 ms
اطرح زمن فك الترميز (RTSP، بدقة 1080p)نحو 10 ms
اطرح زمن التتبع والعدّ والمصارفنحو 5 ms
اطرح هامشًا احتياطيًا بنسبة 20% لمواجهة الارتفاعات10 ms
المتبقي للنموذجنحو 25–30 ms

ثم طبّق قواعد اتخاذ القرار التالية:

  • إذا تجاوز YOLO26n ميزانية النموذج على وحدة المعالجة المركزية للجهاز، فانتقل إلى مسرّع (GPU أو iGPU أو NPU)، أو قلّص imgsz قبل أي شيء آخر؛ تسرد معايير YOLO26 زمن YOLO26n البالغ 38.9 ms على ONNX باستخدام CPU و1.7 ms على T4 باستخدام TensorRT.
  • إذا كان على جهاز واحد خدمة عدة كاميرات، فاقسم ميزانية النموذج على عدد الكاميرات.
  • إذا ضم الأسطول أكثر من بضعة أنواع من الأجهزة، ففضّل بيئات التشغيل التي لا تتطلب إصدارات مخصّصة لكل جهاز، أو خطط لإنشاء إصدار لكل فئة من الأجهزة.
  • إذا كان رمز الاستدعاء مكتوبًا بـ Swift أو Kotlin أو C++، فتحقق من توفر SDK لبيئة التشغيل باللغة المعنية قبل الالتزام بها.

اختبر أداء الخيارات المرشحة على الجهاز#

تُعدّ المواصفات الفنية واختبارات الأداء التي أجراها الآخرون نقطة بداية. لكن القرار يُتخذ على العتاد الذي ستنشر عليه، وبناءً على الإطارات البطيئة لا المتوسط: فبيئة التشغيل السريعة عند القيمة الوسيطة، لكنها تتوقف عند إطار واحد من كل عشرين، ستظل تُسقط إطارات. يصدّر هذا البرنامج النصي كل خيار مرشح، ويقيس زمن 100 عملية استدلال على إطار حقيقي، ثم يقيّم كل خيار وفق النسبة المئوية الخامسة والتسعين (p95):

from ultralytics import YOLO
from ultralytics.utils.downloads import safe_download

BUDGET_MS = 30  # the model's share of a 20 FPS frame budget
CANDIDATES = ("onnx", "openvino")  # runtimes the decision tree allows on this machine

if __name__ == "__main__":  # exports and inference can start worker processes on macOS and Windows
    frame = str(safe_download("https://ultralytics.com/images/bus.jpg"))  # use a real frame from your camera
    for fmt in CANDIDATES:
        model = YOLO(YOLO("yolo26n.pt").export(format=fmt))
        for _ in range(5):  # warm up: the first calls include one-time setup
            model(frame, verbose=False)
        runs = sorted(model(frame, verbose=False)[0].speed["inference"] for _ in range(100))
        p50, p95 = runs[49], runs[94]
        verdict = "meets" if p95 <= BUDGET_MS else "misses"
        print(f"{fmt:9s} p50 {p50:5.1f} ms  p95 {p95:5.1f} ms  {verdict} the {BUDGET_MS} ms budget")

على حاسوب Apple silicon المحمول المستخدم لاختبار هذه الدورة، مع مشاركة مهام أخرى لوحدة المعالجة المركزية:

onnx      p50  30.0 ms  p95  46.4 ms  misses the 30 ms budget
openvino  p50  22.8 ms  p95 113.5 ms  misses the 30 ms budget

اقرأها سطرًا سطرًا:

  • speed["inference"] هو الزمن الذي استغرقه النموذج لمعالجة ذلك الإطار، دون فك الترميز أو الرسم، ما يتيح مقارنة بيئات التشغيل على نحو عادل.
  • يتفوق OpenVINO في القيمة الوسيطة، لكنه يتراجع في p95 بفارق يزيد على الضعف. لو اعتمدت على المتوسطات، لشحنت بيئة التشغيل التي تتوقف في أوقات الازدحام؛ أما عند التقييم وفق p95، فـ ONNX Runtime هو الخيار الأكثر استقرارًا على هذا الجهاز.
  • كلاهما يتجاوز الميزانية، لذا فالخطوة التالية هنا هي استخدام imgsz أصغر، أو مسرّع، أو عدد أقل من الكاميرات لكل جهاز، وليس تجربة بيئة تشغيل أخرى لوحدة المعالجة المركزية.

لإجراء مقارنة سريعة للدقة والسرعة عبر التنسيقات، يصدّر وضع Benchmark كل تنسيق ويُجري التحقق منه وقياس زمنه:

yolo benchmark model=yolo26n.pt data=coco8.yaml imgsz=640 format=onnx

احذف format= لاختبار كل تنسيق يدعمه الجهاز. لا يضم COCO8 سوى أربع صور للتحقق، لذا تعامل مع عمود mAP فيه بوصفه اختبارًا سريعًا لسلامة المسار، واستخدم ملف YAML لمجموعة بياناتك لاتخاذ قرارات الدقة.

مواطن الخلل#

إجراء القياس المعياري على الجهاز الخطأ

العَرَض: حقق النموذج 60 FPS على محطة العمل، لكنه يسقط الإطارات على الجهاز. الحل: اختبر الأداء على عتاد النشر أو على أقرب جهاز متاح، وشغّله تحت الحمل المتوقع في بيئة الإنتاج (عمليات أخرى وكاميرات أخرى).

محركات TensorRT خاصة بالجهاز

العَرَض: يتعذر تحميل .engine المبني على GPU في مركز بيانات على Jetson Orin. الحل: ابنِه على الجهاز المستهدف وقت التثبيت (يستغرق بناء YOLO26n FP16 نحو 5 دقائق على Jetson Orin، وفقًا لوثائق تصدير Platform)، أو احتفظ ببناء لكل فئة أجهزة وإصدار TensorRT، واشحن .pt أو .onnx كي يتمكن أي جهاز من إعادة البناء.

اختبر الأداء بالحجم الذي ستقدّم الخدمة به

يقيس yolo benchmark الأداء عند imgsz الذي تحدده. إذا كان التشغيل في بيئة الإنتاج عند imgsz=1280، فاختبر الأداء عند 1280: يزداد الحساب مع عدد البكسلات، لذا تقلّل أرقام 640 من تقدير أداء نشر 1280 بنحو أربعة أضعاف.

للأجهزة الطرفية أربعة أسئلة إضافية#

تشرح أدلة Raspberry Pi وNVIDIA Jetson وDeepStream على Jetson الأهداف الشائعة بالتفصيل. قبل اعتماد جهاز طرفي، أجب عن الأسئلة التالية:

  • بدء التشغيل البارد: أين يُبنى محرك TensorRT، ومن ينتظر اكتمال بنائه؟
  • الطاقة والحرارة: هل يستطيع الغلاف الحفاظ على تشغيل النموذج بأقصى FPS طوال اليوم؟
  • الذاكرة: هل تتوفر مساحة لمخازن الإطارات وحالة المتعقّب بجوار النموذج؟ يقلّص INT8 حصة النموذج إلى النصف.
  • التحديثات: كيف يصل إصدار جديد من best.pt إلى 1,000 جهاز؟ تحافظ صورة Docker على اتساق الأجهزة.
جرّبه

اكتب موجز نشر من خمسة أسطر لمشروع حقيقي أو مخطط له: الجهاز المستهدف، وFPS لكل كاميرا، وعدد الكاميرات لكل جهاز، ولغة الاستدعاء، وحجم الأسطول. حوّله إلى ميزانية للنموذج بالمللي ثانية، واختر الخيارات المرشحة من شجرة القرار، وشغّل pick_runtime.py (باستخدام نموذجك والخيارات المرشحة) على الجهاز المستهدف أو أقرب جهاز متاح لديك.

متى يُعدّ مكتملًا
تكون قد أتممت الدرس عند تحقق جميع الشروط التالية.
  • يحدد موجزك الجهاز وبيئة التشغيل والقيمة الدقيقة لـ format=.

  • اشتققت ميزانية النموذج بالمللي ثانية من هدف FPS، وبيّنت ما طرحته.

  • لديك أزمنة استدلال p50 وp95 لكل خيار مرشح، مقاسة على الجهاز، وحكم بمقارنتها بالميزانية.

عرض الحل

موجز تطبيقي لمشروع توسيع نطاق تحليلات تجارة التجزئة:

السؤالالإجابة
الجهاز40 حاسوبًا صغيرًا داخل المتاجر مزودة بمعالجات Intel Core Ultra، من دون GPU منفصلة
FPS والكاميرات10 FPS لكل كاميرا، وكاميرتان لكل جهاز
الجهة المستدعيةخدمة Python على Linux
الأسطول40 جهازًا، تُحدَّث باستخدام صورة Docker

الميزانية: 1000 ÷ 10 = 100 ms لكل إطار؛ وبعد طرح نحو 15 ms لفك الترميز والتتبع وهامش احتياطي بنسبة 20%، يتبقى نحو 65 ms، موزعة على كاميرتين، أي نحو 30 ms لكل عملية استدلال. تشير شجرة القرار إلى OpenVINO (لوحدة معالجة Intel المركزية)، مع ONNX Runtime خيارًا احتياطيًا؛ لذا، على أحد أجهزة المتجر:

python pick_runtime.py  # CANDIDATES = ("onnx", "openvino"), BUDGET_MS = 30

يُظهر اختبار أداء وحدة المعالجة المركزية Core Ultra 7 155H في وثائق OpenVINO أن YOLO26n يستغرق 13.4 ms باستخدام OpenVINO FP32؛ لذا يُفترض أن يلائم yolo26n الميزانية بهامش مريح. إذا كان p95 على الجهاز الفعلي أقل من 30 ms أثناء تشغيل مساري الكاميرتين، فاعتمد OpenVINO. وإذا تجاوز ذلك، فجرّب GPU المدمجة في الجهاز باستخدام device="intel:gpu" قبل شراء عتاد جديد.

ما الخطوة التالية

بعد اختيار الهدف، يشرح الدرس التالي التصدير إلى ONNX والتحقق من أن نتائج التصدير تطابق نتائج PyTorch.

سجّل الدخول لحفظ التقدم