تصدير YOLO26 إلى TensorRT#
قد يتطلب نشر نماذج الرؤية الحاسوبية في بيئات عالية الأداء تنسيقاً يحقق أقصى سرعة وكفاءة. وينطبق ذلك بوجه خاص عند نشر النموذج على وحدات GPU من NVIDIA.
باستخدام تنسيق التصدير TensorRT، يمكنك تحسين نماذج Ultralytics YOLO26 لتوفير استدلال سريع وفعّال على أجهزة NVIDIA. يقدم لك هذا الدليل خطوات سهلة الاتباع لعملية التحويل، ويساعدك على الاستفادة القصوى من تقنية NVIDIA المتقدمة في مشاريع التعلّم العميق.
TensorRT#
إن TensorRT، الذي طورته NVIDIA، حزمة تطوير برمجيات متقدمة (SDK) مصممة لاستدلال التعلّم العميق عالي السرعة. وهي مناسبة تماماً للتطبيقات الآنية مثل اكتشاف الكائنات.
تحسّن مجموعة الأدوات هذه نماذج التعلّم العميق لوحدات GPU من NVIDIA، ما يؤدي إلى عمليات أسرع وأكثر كفاءة. وتخضع نماذج TensorRT للتحسين باستخدام TensorRT، الذي يشمل تقنيات مثل دمج الطبقات، ومعايرة الدقة (INT8 وFP16)، وإدارة ذاكرة الموترات الديناميكية، والضبط التلقائي للنوى. ويتيح تحويل نماذج التعلّم العميق إلى تنسيق TensorRT للمطورين الاستفادة الكاملة من إمكانات وحدات GPU من NVIDIA.
تشتهر TensorRT بتوافقها مع تنسيقات نماذج متعددة، منها TensorFlow وPyTorch وONNX، ما يوفر للمطورين حلاً مرناً لدمج النماذج من أطر عمل مختلفة وتحسينها. وتتيح هذه المرونة نشر النماذج بكفاءة عبر بيئات متنوعة من الأجهزة والبرمجيات.
تنشئ TensorRT محركاً وتضبطه على وحدة GPU المستخدمة في بنائه. أنشئ المحرك بما يتوافق مع بنية وحدة GPU المستهدفة للنشر، وطابق بيئة تشغيل TensorRT/CUDA؛ ولا تتعامل مع ملف .engine على أنه تنسيق نموذج قابل للنقل. وللنشر الطرفي، توفر منصة Ultralytics ثمانية خيارات لأجهزة Jetson المستهدفة، مع توثيق حالة البناء والتحقق الفعلي لكل منها، أو يمكنك التصدير محلياً على الجهاز المستهدف.
الميزات الرئيسية لنماذج TensorRT#
توفر نماذج TensorRT مجموعة من الميزات الرئيسية التي تسهم في كفاءتها وفاعليتها في استدلال التعلّم العميق عالي السرعة:
-
معايرة الدقة: تدعم TensorRT معايرة الدقة، ما يتيح ضبط النماذج بدقة لتلبية متطلبات محددة. ويشمل ذلك دعم تنسيقات الدقة المخفّضة مثل INT8 وFP16، التي يمكنها زيادة سرعة الاستدلال مع الحفاظ على مستويات دقة مقبولة.
-
دمج الطبقات: تشمل عملية التحسين في TensorRT دمج الطبقات، حيث تُدمج طبقات متعددة من الشبكة العصبية في عملية واحدة. ويقلل هذا من العبء الحسابي ويحسّن سرعة الاستدلال عن طريق الحد من الوصول إلى الذاكرة والحسابات.
-
إدارة ذاكرة الموترات الديناميكية: تدير TensorRT استخدام ذاكرة الموترات بكفاءة أثناء الاستدلال، ما يقلل العبء على الذاكرة ويحسّن تخصيصها. وينتج عن ذلك استخدام أكثر كفاءة لذاكرة GPU.
-
الضبط التلقائي للنوى: تطبق TensorRT ضبطاً تلقائياً للنوى لاختيار نواة GPU المثلى لكل طبقة من النموذج. ويضمن هذا النهج التكيفي استفادة النموذج استفادة كاملة من القدرة الحسابية لوحدة GPU.
خيارات النشر في TensorRT#
قبل الاطلاع على الشيفرة اللازمة لتصدير نماذج YOLO26 إلى تنسيق TensorRT، دعنا نفهم المواضع التي تُستخدم فيها نماذج TensorRT عادةً.
توفر TensorRT عدة خيارات للنشر، ويوازن كل خيار بين سهولة الدمج وتحسين الأداء والمرونة على نحو مختلف:
- النشر ضمن TensorFlow: تدمج هذه الطريقة TensorRT مع TensorFlow، ما يتيح تشغيل النماذج المحسّنة في بيئة TensorFlow مألوفة. وهي مفيدة للنماذج التي تجمع بين طبقات مدعومة وأخرى غير مدعومة، إذ يستطيع TF-TRT التعامل معها بكفاءة.
-
واجهة برمجة تطبيقات بيئة تشغيل TensorRT المستقلة: توفر تحكماً دقيقاً، وهي مثالية للتطبيقات الحساسة للأداء. وتتميز بتعقيد أكبر، لكنها تتيح تنفيذ عوامل تشغيل غير مدعومة بطريقة مخصصة.
-
خادم الاستدلال NVIDIA Triton: خيار يدعم نماذج من أطر عمل متنوعة. وهو مناسب بوجه خاص للاستدلال السحابي أو الطرفي، ويوفر ميزات مثل التنفيذ المتزامن للنماذج وتحليلها.
المهام المدعومة#
يدعم تصدير TensorRT مهام Ultralytics السبعة كلها. ولا يتوفر التجزؤ الدلالي وتقدير العمق إلا مع YOLO26، وهي العائلة الوحيدة التي تتضمن رأسيْ هاتين المهمتين.
تصدير نماذج YOLO26 إلى TensorRT#
يمكنك تحسين كفاءة التنفيذ والأداء بتحويل نماذج YOLO26 إلى تنسيق TensorRT.
التثبيت#
لتثبيت الحزمة المطلوبة، شغّل:
# Install the required package for YOLO26
pip install ultralyticsللحصول على تعليمات مفصلة وأفضل الممارسات المتعلقة بعملية التثبيت، راجع دليل تثبيت YOLO26. وإذا واجهت أي صعوبات أثناء تثبيت الحزم المطلوبة لـ YOLO26، فاستعن بـدليل المشكلات الشائعة للاطلاع على الحلول والنصائح.
الاستخدام#
قبل التعمق في تعليمات الاستخدام، احرص على الاطلاع على مجموعة نماذج YOLO26 التي تقدمها Ultralytics. سيساعدك ذلك على اختيار النموذج الأنسب لمتطلبات مشروعك.
يدعم تنسيق TensorRT أوضاع التصدير والتنبؤ والتحقق. ويتطلب الاستدلال والتحقق وحدة GPU من NVIDIA. صدّر النموذج، ثم حمّل النموذج المُصدّر لإجراء الاستدلال أو التحقق من دقته.
from ultralytics import YOLO
# تحميل نموذج YOLO26
model = YOLO("yolo26n.pt")
# صدّر النموذج إلى تنسيق TensorRT
model.export(format="engine") # ينشئ 'yolo26n.engine'from ultralytics import YOLO
# تحميل نموذج TensorRT المُصدَّر
model = YOLO("yolo26n.engine")
# تنفيذ الاستدلال
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# تحميل نموذج TensorRT المُصدَّر
model = YOLO("yolo26n.engine")
# # التحقق من الدقة على مجموعة بيانات COCO8
metrics = model.val(data="coco8.yaml")وسيطات التصدير#
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'engine' | التنسيق المستهدف للنموذج المُصدَّر، ويحدد مدى توافقه مع بيئات النشر المختلفة. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب كمدخل للنموذج. يمكن تحديده كعدد صحيح للصور المربعة أو كصف (height, width) للأبعاد المحددة. |
quantize | int أو str | None | دقة التكميم: 16 (FP16) أو 8 (INT8/PTQ؛ يتطلب بيانات معايرة data/fraction)؛ أما 32/غير المحدد فيعني FP32. وتُصدّر دائماً نقطة تحقق دُرّبت باستخدام quantize=8 بدقة INT8، اعتماداً على النطاقات التي تتضمنها، من دون معايرة. ويحل ذلك محل الخيارين المهملين half/int8. |
dynamic | bool | False | يتيح أحجام إدخال ديناميكية، ما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة. |
simplify | bool | True | يُبسّط مخطط النموذج باستخدام onnxslim، ما قد يحسّن الأداء والتوافق. |
opset | int | None | يحدد إصدار opset الخاص بـ ONNX لرسم ONNX الوسيط. وإذا لم يُحدَّد، فسيُستخدم أحدث إصدار مدعوم. |
workspace | float أو None | None | يحدد الحد الأقصى لحجم مساحة العمل، بوحدة GiB، لتحسينات TensorRT، بما يوازن بين استخدام الذاكرة والأداء؛ استخدم None كي تخصص TensorRT الذاكرة تلقائياً حتى الحد الأقصى للجهاز. |
nms | bool، اختياري | None | اختر المخرجات الأولية (None، الافتراضي)، أو NMS المضمّن (True)، أو الرأس الخالي من NMS (False). |
batch | int | 1 | يحدد حجم الدفعة للاستدلال بنموذج التصدير، أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المُصدّر بالتزامن في وضع predict. |
data | str | None | مسار ملف YAML الخاص بـمجموعة البيانات، وهو ضروري للتكميم؛ أما التصنيف فيتطلب دليلاً لمجموعة بيانات أو اسم مجموعة بيانات مضمّنة. إذا حُذف هذا الخيار مع quantize=8، فستختار Ultralytics مجموعة بيانات المعايرة الافتراضية لمهمة النموذج؛ أما نقطة التحقق التي دُرّبت باستخدام quantize=8 فلا تحتاج إلى مجموعة بيانات. |
fraction | float أو int أو list | 1.0 | مجموعة فرعية للمعايرة محددة كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم المكوّنة من عنصرين test كاملة، بينما تتجاوزها 0. |
device | str | None | يحدد الجهاز المستخدم للتصدير: وحدة GPU (device=0)، أو DLA لأجهزة NVIDIA Jetson (device=dla:0 أو device=dla:1). |
يرجى التأكد من استخدام وحدة GPU تدعم CUDA عند التصدير إلى TensorRT.
لا يدعم TensorRT 11.2.1 نظام JetPack، بما في ذلك Thor؛ استخدم بيئة تشغيل TensorRT 10.x التي يدعمها إصدار JetPack لديك. وبالنسبة إلى device=dla:0 أو device=dla:1، تحدد NVIDIA الإصدار TensorRT 10.7 على أنه آخر إصدار يتضمن دعم DLA. ولا تدعم الإصدارات TensorRT 11.0 و11.1 و11.2 تقنية DLA.
لمزيد من التفاصيل حول عملية التصدير، تفضّل بزيارة صفحة وثائق Ultralytics حول التصدير.
تصدير TensorRT باستخدام تكميم INT8#
ينفّذ تصدير نماذج Ultralytics YOLO باستخدام TensorRT بدقة INT8 تكميم ما بعد التدريب (PTQ). تستخدم TensorRT المعايرة في PTQ لقياس توزيع التنشيطات داخل كل موتر تنشيط أثناء معالجة نموذج YOLO للاستدلال على بيانات إدخال تمثيلية، ثم تستخدم ذلك التوزيع لتقدير قيم المقياس لكل موتر. ولكل موتر تنشيط مرشح للتكميم مقياس مرتبط به، تحدده عملية المعايرة. أما نقطة التحقق التي ضُبطت بدقة باستخدام quantize=8 عبر التدريب الواعي بالتكميم، فتحمل بالفعل نطاقات INT8 الخاصة بها؛ لذا يستخدمها التصدير ويتجاوز المعايرة.
أزال TensorRT 11 التكميم الضمني وواجهة IInt8Calibrator. في TensorRT 11 والإصدارات الأحدث، تنفذ Ultralytics تكميم INT8 باستخدام التكميم الصريح عبر NVIDIA ModelOpt، الذي يدرج عقد Q/DQ في مخطط ONNX قبل إنشاء محرك ذي أنواع محددة بصرامة، بينما يُطبّق FP16 بتحويل الدقة المختلطة AutoCast في ModelOpt. تعمل الوسائط quantize=8 وquantize=16 وdata بالطريقة نفسها؛ ويُثبّت ModelOpt تلقائياً عند الاستخدام لأول مرة. أما في TensorRT 7-10، فيُستخدم بدلاً من ذلك المُعاير القديم الموضح أدناه.
عند معالجة الشبكات المكمّمة ضمنياً، تستخدم TensorRT دقة INT8 عند الحاجة لتحسين زمن تنفيذ الطبقة. فإذا كان تنفيذ طبقة ما أسرع بدقة INT8 وكانت مقاييس التكميم معيّنة لمدخلات بياناتها ومخرجاتها، فستُخصّص لتلك الطبقة نواة بدقة INT8؛ وإلا فتختار TensorRT للنواة دقة FP32 أو FP16، وفقاً للخيار الذي يحقق زمناً أسرع لتنفيذ تلك الطبقة.
من الأهمية البالغة استخدام الجهاز نفسه الذي سيُستخدم لنشر أوزان نموذج TensorRT في التصدير بدقة INT8، إذ قد تختلف نتائج المعايرة من جهاز إلى آخر.
إعداد تصدير INT8#
ستؤثر الوسائط المقدمة عند استخدام التصدير لنموذج Ultralytics YOLO تأثيراً كبيراً في أداء النموذج المُصدّر. ويجب أيضاً اختيارها بناءً على موارد الجهاز المتاحة، إلا أن الوسائط الافتراضية يفترض أن تكون مناسبة لمعظم وحدات GPU المنفصلة من NVIDIA بمعمارية Ampere أو أحدث. خوارزمية المعايرة المستخدمة هي "MINMAX_CALIBRATION" عند التصدير إلى GPU، بينما تستخدم عمليات التصدير إلى DLA على أجهزة NVIDIA Jetson الخوارزمية "ENTROPY_CALIBRATION_2". يمكنك قراءة مزيد من التفاصيل حول الخيارات المتاحة في دليل مطوري TensorRT. وجدت اختبارات Ultralytics أن "MINMAX_CALIBRATION" هو الخيار الأفضل للتصدير إلى GPU، وتُحدَّد الخوارزمية تلقائياً بناءً على جهاز التصدير.
-
workspace: يتحكم في حجم تخصيص ذاكرة الجهاز (بوحدة GiB) أثناء تحويل أوزان النموذج.-
اضبط قيمة
workspaceوفقاً لاحتياجات المعايرة والموارد المتاحة. قد يؤدي استخدام قيمة أكبر لـworkspaceإلى زيادة زمن المعايرة، لكنه يتيح لـTensorRT استكشاف نطاق أوسع من أساليب التحسين، ما قد يعزز أداء النموذج ودقته. وعلى النقيض، يمكن أن تقلل قيمة أصغر لـworkspaceزمن المعايرة، لكنها قد تحد من استراتيجيات التحسين، ما يؤثر في جودة النموذج المكمّم. -
القيمة الافتراضية هي
workspace=None، ما يسمح لـTensorRT بتخصيص الذاكرة تلقائياً. وعند إعداد هذه القيمة يدوياً، قد يلزم زيادتها إذا تعطلت المعايرة (أي توقفت من دون تحذير). -
ستُبلغ TensorRT عن
UNSUPPORTED_STATEأثناء التصدير إذا تجاوزت قيمةworkspaceالذاكرة المتاحة للجهاز؛ وهذا يعني ضرورة خفض قيمةworkspaceأو ضبطها علىNone. -
إذا ضُبط
workspaceعلى القيمة القصوى وفشلت المعايرة أو تعطلت، ففكّر في استخدامNoneللتخصيص التلقائي، أو خفض قيمتيimgszوbatchلتقليل متطلبات الذاكرة. -
تذكّر أن معايرة INT8 خاصة بكل جهاز؛ لذا فإن استعارة وحدة GPU «عالية الأداء» للمعايرة قد تؤدي إلى أداء ضعيف عند إجراء الاستدلال على جهاز آخر.
-
-
batch: الحد الأقصى لحجم الدفعة المستخدم في الاستدلال. معdynamic=True، يمكن استخدام دفعات أصغر أثناء الاستدلال، لكن الاستدلال لن يقبل دفعات أكبر من الحجم المحدد.
قد يؤدي استخدام دفعات صغيرة إلى قياس غير دقيق أثناء معايرة INT8، لأن العملية تضبط نفسها استناداً إلى البيانات التي تراها. وقد لا تلتقط الدفعات الصغيرة النطاق الكامل للقيم، ما يؤدي إلى مشكلات في المعايرة النهائية. ويساعد استخدام حجم دفعة أكبر على ضمان نتائج معايرة أكثر تمثيلاً.
قادَت تجارب NVIDIA إلى التوصية باستخدام 500 صورة معايرة على الأقل، تمثل بيانات نموذجك، عند معايرة التكميم INT8. وهذه إرشادات وليست شرطاً صارماً، وستحتاج إلى اختبار ما يلزم لتحقيق أداء جيد مع مجموعة بياناتك. وبما أن بيانات المعايرة مطلوبة لمعايرة INT8 باستخدام TensorRT، احرص على استخدام الوسيطة data عند تصدير نقطة تحقق لم تُدرّب باستخدام quantize=8 (تكميم ما بعد التدريب) عند ضبط quantize=8 على TensorRT، واستخدم data="my_dataset.yaml" للاستعانة بصور التحقق في المعايرة. وتتجاوز نقطة التحقق التي دُرّبت باستخدام quantize=8 المعايرة؛ لذا احذف الوسيطة data عند استخدامها. وإذا لم تُمرّر قيمة لـdata عند التصدير إلى TensorRT مع تكميم INT8، فستُستخدم افتراضياً إحدى مجموعات البيانات النموذجية «الصغيرة» وفقاً لمهمة النموذج بدلاً من إظهار خطأ.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
quantize=8,
data="coco.yaml", # (4)!
)
# تحميل نموذج TensorRT INT8 المُصدّر
model = YOLO("yolo26n.engine", task="detect")
# تنفيذ الاستدلال
result = model.predict("https://ultralytics.com/images/bus.jpg")- يُصدّر النموذج بمحاور ديناميكية، ويقبل أحجام إدخال من 32 بكسلاً حتى ضعف قيمة التصدير
imgsz؛ وتظلdynamicمساوية لـFalseما لم تُضبط صراحةً. راجع وسائط التصدير لمزيد من المعلومات. - يضبط الحد الأقصى لحجم الدفعة على 8 للنموذج المُصدّر ولمعايرة INT8.
- يخصص 4 GiB من الذاكرة بدلاً من تخصيص كامل ذاكرة الجهاز لعملية التحويل.
- يستخدم مجموعة بيانات COCO للمعايرة، وتحديداً الصور المستخدمة في التحقق (إجماليها 5,000 صورة).
مزايا استخدام YOLO مع TensorRT INT8#
-
تقليل حجم النموذج: يمكن أن يؤدي التكميم من FP32 إلى INT8 إلى تقليل حجم النموذج بمقدار 4 أضعاف (على القرص أو في الذاكرة)، ما يسرّع التنزيل ويقلل متطلبات التخزين وبصمة الذاكرة عند نشر النموذج.
-
استهلاك أقل للطاقة: يمكن أن تستهلك العمليات ذات الدقة المنخفضة لنماذج YOLO المُصدَّرة بصيغة INT8 طاقة أقل مقارنةً بنماذج FP32، ولا سيما على الأجهزة التي تعمل بالبطارية.
-
تحسين سرعات الاستدلال: يعمل TensorRT على تحسين النموذج ليتوافق مع الأجهزة المستهدفة، ما قد يؤدي إلى تسريع الاستدلال على وحدات GPU والأجهزة المضمنة والمسرّعات.
ملاحظة حول سرعات الاستدلال
من المتوقع أن تستغرق أولى مرات الاستدلال باستخدام نموذج مُصدَّر إلى TensorRT INT8 وقتًا أطول من المعتاد في المعالجة المسبقة والاستدلال و/أو المعالجة اللاحقة. وقد يحدث ذلك أيضًا عند تغيير imgsz أثناء الاستدلال، لا سيما عندما لا يكون imgsz مطابقًا لما حُدّد أثناء التصدير (يُضبط imgsz الخاص بالتصدير على ملف تعريف TensorRT "optimal"، أي الأمثل).
عيوب استخدام YOLO مع TensorRT INT8#
-
انخفاض مقاييس التقييم: تعني الدقة الأقل أن
mAPأوPrecisionأوRecallأو أي مقياس آخر يُستخدم لتقييم أداء النموذج قد يكون أسوأ بعض الشيء. تُحافَظ على دقة طبقات Sigmoid الأعلى للحفاظ على معايرة الدرجات، لكن INT8 قد يغيّر قيم الثقة؛ لذا اختر عتبة التشغيل من منحنى F1 الخاص بنموذج INT8 نفسه. راجع قسم نتائج الأداء لمقارنة الاختلافات فيmAP50وmAP50-95عند التصدير باستخدام INT8 على عينة صغيرة من أجهزة مختلفة. -
زيادة وقت التطوير: قد يستغرق العثور على إعدادات "مثلى" لمعايرة INT8 لمجموعة البيانات والجهاز وقتًا طويلًا من الاختبارات.
-
الاعتماد على العتاد: قد تعتمد المعايرة ومكاسب الأداء بدرجة كبيرة على العتاد، كما أن أوزان النموذج أقل قابلية للنقل.
أداء تصدير Ultralytics YOLO إلى TensorRT#
NVIDIA A100#
اختُبر باستخدام Ubuntu 22.04.3 LTS وpython 3.10.12 وultralytics==8.2.4 وtensorrt==8.6.1.post1
راجع وثائق الكشف للاطلاع على أمثلة استخدام هذه النماذج المدرّبة على COCO، والتي تتضمن 80 فئة مدرّبة مسبقًا.
أوقات الاستدلال المعروضة هي mean (الأسرع) وmin وmax (الأبطأ) لكل اختبار باستخدام الأوزان المدرَّبة مسبقًا yolov8n.engine
| الدقة | اختبار التقييم | المتوسط (مللي ثانية) | الحد الأدنى | الحد الأقصى (مللي ثانية) | mAPالتحقق 50(B) | mAPالتحقق 50-95(B) | batch | الحجم (بكسل) |
|---|---|---|---|---|---|---|---|
| FP32 | التنبؤ | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOالتحقق | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | التنبؤ | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOالتحقق | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | التنبؤ | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
| INT8 | COCOالتحقق | 0.29 | 0.47 | 0.33 | 1 | 640 |
وحدات GPU الاستهلاكية#
اختُبر باستخدام Windows 10.0.19045 وpython 3.10.9 وultralytics==8.2.4 وtensorrt==10.0.0b6
أوقات الاستدلال المعروضة هي mean (الأسرع) وmin وmax (الأبطأ) لكل اختبار باستخدام الأوزان المدرَّبة مسبقًا yolov8n.engine
| الدقة | اختبار التقييم | المتوسط (مللي ثانية) | الحد الأدنى | الحد الأقصى (مللي ثانية) | mAPالتحقق 50(B) | mAPالتحقق 50-95(B) | batch | الحجم (بكسل) |
|---|---|---|---|---|---|---|---|
| FP32 | التنبؤ | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOالتحقق | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | التنبؤ | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOالتحقق | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | التنبؤ | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOالتحقق | 0.74 | 0.47 | 0.33 | 1 | 640 |
الأجهزة المضمنة#
اختُبر باستخدام JetPack 6.0 (L4T 36.3) وUbuntu 22.04.4 LTS وpython 3.10.12 وultralytics==8.2.16 وtensorrt==10.0.1
أوقات الاستدلال المعروضة هي mean (الأسرع) وmin وmax (الأبطأ) لكل اختبار باستخدام الأوزان المدرَّبة مسبقًا yolov8n.engine
| الدقة | اختبار التقييم | المتوسط (مللي ثانية) | الحد الأدنى | الحد الأقصى (مللي ثانية) | mAPالتحقق 50(B) | mAPالتحقق 50-95(B) | batch | الحجم (بكسل) |
|---|---|---|---|---|---|---|---|
| FP32 | التنبؤ | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOالتحقق | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | التنبؤ | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOالتحقق | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | التنبؤ | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOالتحقق | 2.32 | 0.46 | 0.32 | 1 | 640 |
راجع دليل البدء السريع لاستخدام Ultralytics YOLO على NVIDIA Jetson لمعرفة المزيد عن الإعداد والتهيئة.
راجع دليل البدء السريع لاستخدام Ultralytics YOLO على NVIDIA DGX Spark لمعرفة المزيد عن الإعداد والتهيئة.
أساليب التقييم#
وسّع الأقسام أدناه لمعرفة كيفية تصدير هذه النماذج واختبارها.
إعدادات التصدير
راجع وضع التصدير لمعرفة تفاصيل وسيطات إعداد التصدير.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)
# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=16)
# TensorRT INT8 مع `data` للمعايرة (أي COCO أو ImageNet أو DOTAv1 لمهمة النموذج المناسبة)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)حلقة التنبؤ
راجع وضع التنبؤ لمزيد من المعلومات.
import cv2
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")
for _ in range(100):
result = model.predict(
[img] * 8, # batch=8 of the same image
verbose=False,
device="cuda",
)إعداد التحقق
راجع وضع val لمعرفة المزيد عن وسيطات إعداد التحقق.
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
results = model.val(
data="data.yaml", # COCO أو ImageNet أو DOTAv1 لمهمة النموذج المناسبة
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)نشر نماذج YOLO26 المُصدَّرة إلى TensorRT#
بعد تصدير نماذج Ultralytics YOLO26 بنجاح إلى تنسيق TensorRT، تصبح جاهزًا لنشرها. للاطلاع على تعليمات مفصلة حول نشر نماذج TensorRT في إعدادات مختلفة، راجع الموارد التالية:
-
نشر Ultralytics باستخدام خادم Triton: يشرح دليلنا كيفية استخدام NVIDIA Triton Inference Server (المعروف سابقًا باسم TensorRT Inference Server) خصيصًا مع نماذج Ultralytics YOLO.
-
نشر الشبكات العصبية العميقة باستخدام NVIDIA TensorRT: تشرح هذه المقالة كيفية استخدام NVIDIA TensorRT لنشر الشبكات العصبية العميقة بكفاءة على منصات النشر المعتمدة على GPU.
-
ذكاء اصطناعي شامل لأجهزة الكمبيوتر المعتمدة على NVIDIA: النشر باستخدام NVIDIA TensorRT: يشرح منشور المدونة هذا استخدام NVIDIA TensorRT لتحسين نماذج الذكاء الاصطناعي ونشرها على أجهزة الكمبيوتر المعتمدة على NVIDIA.
-
مستودع NVIDIA TensorRT على GitHub: هذا هو مستودع GitHub الرسمي الذي يحتوي على الشيفرة المصدرية والوثائق الخاصة بـ NVIDIA TensorRT.
الملخص#
ركزنا في هذا الدليل على تحويل نماذج Ultralytics YOLO26 إلى تنسيق نماذج NVIDIA TensorRT. وتُعد خطوة التحويل هذه أساسية لتحسين كفاءة نماذج YOLO26 وسرعتها، ما يجعلها أكثر فاعلية وملاءمة لبيئات النشر المتنوعة.
لمزيد من المعلومات حول تفاصيل الاستخدام، راجع الوثائق الرسمية لـ TensorRT.
إذا كنت ترغب في معرفة المزيد عن تكاملات Ultralytics YOLO26 الإضافية، فستجد في صفحة دليل التكامل مجموعة واسعة من الموارد المفيدة والرؤى.
الأسئلة الشائعة#
لتحويل نماذج Ultralytics YOLO26 إلى تنسيق TensorRT من أجل استدلال مُحسّن على وحدات NVIDIA GPU، اتبع الخطوات التالية:
-
ثبّت الحزمة المطلوبة:
pip install ultralytics -
صدّر نموذج YOLO26:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine") # ينشئ 'yolo26n.engine' # تنفيذ الاستدلال model = YOLO("yolo26n.engine") results = model("https://ultralytics.com/images/bus.jpg")
لمزيد من التفاصيل، راجع دليل تثبيت YOLO26 ووثائق التصدير.
-
يوفر استخدام TensorRT لتحسين نماذج YOLO26 عدة فوائد:
- استدلال أسرع: يحسّن TensorRT طبقات النموذج ويستخدم معايرة الدقة (INT8 وFP16) لتسريع الاستدلال من دون التضحية بالدقة بدرجة كبيرة.
- كفاءة الذاكرة: يدير TensorRT ذاكرة الموترات ديناميكيًا، ما يقلل الحمل الزائد ويحسن الاستفادة من ذاكرة GPU.
- دمج الطبقات: يدمج طبقات متعددة في عمليات مفردة، ما يقلل التعقيد الحسابي.
- الضبط التلقائي للنوى: يختار تلقائيًا نوى GPU المحسّنة لكل طبقة في النموذج، لضمان تحقيق أقصى أداء.
لمعرفة المزيد، اطّلع على وثائق TensorRT الرسمية من NVIDIA ونظرتنا المتعمقة إلى TensorRT.
نعم، يمكنك تصدير نماذج YOLO26 باستخدام TensorRT مع تكميم INT8. تتضمن هذه العملية التكميم بعد التدريب (PTQ) والمعايرة، إلا إذا كانت نقطة التحقق قد دُرّبت باستخدام
quantize=8(التدريب المُراعي للتكميم)، ففي هذه الحالة تُصدَّر النطاقات التي تحملها نقطة التحقق من دون معايرة:-
التصدير باستخدام INT8:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml") -
تشغيل الاستدلال:
from ultralytics import YOLO model = YOLO("yolo26n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
لمزيد من التفاصيل، راجع قسم تصدير TensorRT باستخدام تكميم INT8.
-
يمكن نشر نماذج YOLO26 TensorRT على NVIDIA Triton Inference Server بالاستعانة بالموارد التالية:
- نشر Ultralytics YOLO26 باستخدام Triton Server: إرشادات خطوة بخطوة لإعداد Triton Inference Server واستخدامه.
- نشر الشبكات العصبية العميقة باستخدام NVIDIA TensorRT: دليل NVIDIA لنشر نماذج التعلم العميق باستخدام TensorRT، مع خيارات وإعدادات مفصلة للنشر.
ستساعدك هذه الأدلة على دمج نماذج YOLO26 بكفاءة في بيئات نشر متنوعة.
قد تختلف تحسينات الأداء باستخدام TensorRT بحسب النموذج والعتاد المستخدم. فيما يلي معايير أداء نموذجية قِيست باستخدام YOLOv8n، وتوضح المكاسب النسبية لكل دقة:
-
NVIDIA A100:
- استدلال FP32: ~0.52 مللي ثانية / صورة
- استدلال FP16: ~0.34 مللي ثانية / صورة
- استدلال INT8: ~0.28 مللي ثانية / صورة
- انخفاض طفيف في mAP عند استخدام دقة INT8، يقابله تحسن ملحوظ في السرعة.
-
وحدات GPU الاستهلاكية (مثل RTX 3080):
- استدلال FP32: ~1.06 مللي ثانية / صورة
- استدلال FP16: ~0.62 مللي ثانية / صورة
- استدلال INT8: ~0.52 مللي ثانية / صورة
يمكن العثور على معايير أداء مفصلة لتكوينات العتاد المختلفة في قسم الأداء.
للاطلاع على معلومات أشمل حول أداء TensorRT، راجع وثائق Ultralytics وتقارير تحليل الأداء الخاصة بنا.
-