تصدير TensorRT لنماذج YOLO26#
قد يتطلب نشر نماذج الرؤية الحاسوبية في بيئات عالية الأداء تنسيقًا يزيد السرعة والكفاءة إلى أقصى حد. وينطبق ذلك خصوصًا عند نشر نموذجك على وحدات معالجة الرسومات NVIDIA.
باستخدام تنسيق تصدير TensorRT، يمكنك تحسين نماذج Ultralytics YOLO26 للاستدلال السريع والفعال على أجهزة NVIDIA. سيقدم لك هذا الدليل خطوات سهلة الاتباع لعملية التحويل، ويساعدك على تحقيق أقصى استفادة من تقنية NVIDIA المتقدمة في مشاريع التعلم العميق.
TensorRT#
إن TensorRT، الذي طورته NVIDIA، هو حزمة متقدمة لتطوير البرمجيات (SDK) مصممة للاستدلال عالي السرعة في التعلم العميق. وهو ملائم تمامًا للتطبيقات في الوقت الفعلي مثل اكتشاف الكائنات.
تعمل هذه الأدوات على تحسين نماذج التعلم العميق لوحدات معالجة الرسومات NVIDIA، ما ينتج عنه عمليات أسرع وأكثر كفاءة. تخضع نماذج TensorRT لتحسين TensorRT، الذي يتضمن تقنيات مثل دمج الطبقات، ومعايرة الدقة (INT8 وFP16)، والإدارة الديناميكية لذاكرة الموترات، والضبط التلقائي للنوى. ويتيح تحويل نماذج التعلم العميق إلى تنسيق TensorRT للمطورين الاستفادة الكاملة من إمكانات وحدات معالجة الرسومات NVIDIA.
يُعرف TensorRT بتوافقه مع تنسيقات نماذج متعددة، بما في ذلك TensorFlow وPyTorch وONNX، ما يوفر للمطورين حلًا مرنًا لدمج النماذج وتحسينها من أطر عمل مختلفة. ويتيح هذا التنوع نشر النماذج بكفاءة عبر بيئات متنوعة من الأجهزة والبرمجيات.
ينشئ TensorRT محركًا ويضبطه على وحدة معالجة الرسومات المستخدمة في بنائه. أنشئه لمعمارية وحدة معالجة الرسومات المستهدفة للنشر، وطابق بيئة تشغيل TensorRT/CUDA؛ ولا تتعامل مع ملف .engine على أنه تنسيق نموذج قابل للنقل. للنشر على الأجهزة الطرفية، توفر Ultralytics Platform ثمانية اختيارات مستهدفة لـ Jetson، مع توثيق حالة الإنشاء الفعلي والتحقق لكل منها، أو يمكنك التصدير محليًا على الجهاز الوجهة.
الميزات الرئيسية لنماذج TensorRT#
توفر نماذج TensorRT مجموعة من الميزات الرئيسية التي تسهم في كفاءتها وفعاليتها في الاستدلال عالي السرعة للتعلم العميق:
-
معايرة الدقة: يدعم TensorRT معايرة الدقة، ما يتيح ضبط النماذج بدقة لتلبية متطلبات محددة. ويشمل ذلك دعم تنسيقات الدقة المخفضة مثل INT8 وFP16، التي يمكن أن تزيد سرعة الاستدلال مع الحفاظ على مستويات دقة مقبولة.
-
دمج الطبقات: تتضمن عملية تحسين TensorRT دمج الطبقات، حيث تُدمج طبقات متعددة من شبكة عصبية في عملية واحدة. ويقلل ذلك الحمل الحسابي الزائد ويحسن سرعة الاستدلال من خلال تقليل الوصول إلى الذاكرة والحسابات.
-
الإدارة الديناميكية لذاكرة الموترات: يدير TensorRT استخدام ذاكرة الموترات بكفاءة أثناء الاستدلال، ما يقلل الحمل الزائد على الذاكرة ويحسن تخصيصها. وينتج عن ذلك استخدام أكثر كفاءة لذاكرة وحدة معالجة الرسومات.
-
الضبط التلقائي للنوى: يطبق TensorRT ضبطًا تلقائيًا للنوى لاختيار نواة وحدة معالجة الرسومات الأكثر تحسينًا لكل طبقة من طبقات النموذج. ويضمن هذا النهج التكيفي استفادة النموذج الكاملة من القدرة الحسابية لوحدة معالجة الرسومات.
خيارات النشر في 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 أوضاع التصدير والتنبؤ والتحقق. ويتطلب الاستدلال والتحقق وحدة معالجة رسومات NVIDIA. صدّر نموذجك، ثم حمّل النموذج المُصدّر لإجراء الاستدلال أو التحقق من دقته.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo26n.engine'from ultralytics import YOLO
# Load the exported TensorRT model
model = YOLO("yolo26n.engine")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported TensorRT model
model = YOLO("yolo26n.engine")
# Validate accuracy on the COCO8 dataset
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 | يحدد إصدار مجموعة عمليات 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 | مسار ملف dataset YAML، وهو أساسي للتكميم؛ بينما يتخذ التصنيف بدلاً من ذلك دليلاً لمجموعة البيانات أو اسم مجموعة بيانات مدمجة. إذا تم حذفه مع quantize=8, تقوم Ultralytics بتحديد مجموعة بيانات المعايرة الافتراضية لمهمة النموذج؛ نقطة التحقق المدربة باستخدام quantize=8 لا تتطلب شيئاً. |
fraction | float أو int أو list | 1.0 | مجموعة المعايرة الجزئية كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم ذات العنصرين test ممتلئًا، بينما تتخطى 0. |
device | str | None | يحدد الجهاز المستخدم للتصدير: وحدة معالجة الرسومات (device=0)، أو DLA لأجهزة NVIDIA Jetson (device=dla:0 أو device=dla:1). |
يرجى التأكد من استخدام وحدة معالجة رسومات تدعم 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 بدقة precision INT8 إلى تنفيذ تكميم ما بعد التدريب (PTQ). تستخدم TensorRT المعايرة لتكميم ما بعد التدريب (PTQ)، والتي تقيس توزيع التنشيطات داخل كل موتر تنشيط أثناء قيام نموذج YOLO بمعالجة الاستدلال على بيانات إدخال ممثلة، ثم تستخدم هذا التوزيع لتقدير قيم المقاييس لكل موتر. كل موتر تنشيط يكون مرشحاً للتكميم له مقياس مرتبط يتم استنتاجه بواسطة عملية معايرة. نقطة التحقق التي تم ضبطها بدقة باستخدام quantize=8 من خلال quantization-aware training تحلل مسبقاً نطاقات 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 تأثيرًا كبيرًا في أداء النموذج المُصدّر. كما يجب اختيارها بناءً على موارد الجهاز المتاحة، إلا أن الوسائط الافتراضية ينبغي أن تعمل مع معظم وحدات معالجة الرسومات 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 خاصة بكل جهاز، فقد يؤدي استعارة وحدة معالجة رسومات «عالية الأداء» للمعايرة إلى أداء ضعيف عند إجراء الاستدلال على جهاز آخر.
-
-
batch: حجم الدفعة الأقصى الذي سيُستخدم للاستدلال. يمكن استخدام دفعات أصغر أثناء الاستدلال، لكن الاستدلال لن يقبل دفعات أكبر من الحجم المحدد.
قد يؤدي استخدام دفعات صغيرة إلى تحجيم غير دقيق أثناء معايرة INT8. ويعود ذلك إلى أن العملية تضبط نفسها استنادًا إلى البيانات التي تراها. وقد لا تلتقط الدفعات الصغيرة النطاق الكامل للقيم، ما يؤدي إلى مشكلات في المعايرة النهائية. ويساعد استخدام حجم دفعة أكبر على ضمان نتائج معايرة أكثر تمثيلًا.
أدت التجربة من قبل NVIDIA إلى توصيتهم باستخدام ما لا يقل عن 500 صورة معايرة تكون ممثلة للبيانات الخاصة بنموذجك، مع معايرة تكميم INT8. هذا إرشادي وليس متطلباً صارماً، وستحتاج إلى التجربة بما هو مطلوب للأداء الجيد لمجموعة البيانات الخاصة بك. نظراً لأن بيانات المعايرة مطلوبة لمعايرة INT8 باستخدام TensorRT، تأكد من استخدام الوسيط data عند تصدير نقطة تحقق لم يتم تدريبها باستخدام quantize=8 (تكميم ما بعد التدريب) عند quantize=8 لـ TensorRT، واستخدم data="my_dataset.yaml"، والذي سيستخدم الصور من validation للمعايرة بها. تتخطى نقطة التحقق المدربة باستخدام quantize=8 المعايرة، لذا احذف data لها. عندما لا يتم تمرير أي قيمة لـ data مع التصدير إلى TensorRT باستخدام تكميم INT8، ستكون القيمة الافتراضية هي استخدام إحدى "small" example datasets based on the model task بدلاً من إلقاء خطأ.
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)!
)
# Load the exported TensorRT INT8 model
model = YOLO("yolo26n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")- الصادرات ذات المحاور الديناميكية؛ يظل
dynamicبقيمةFalseما لم يتم تعيينه بشكل صريح. انظر إلى export arguments للحصول على معلومات إضافية. - يحدد الحد الأقصى لحجم الدفعة بـ 8 للنموذج المُصدّر ولمعايرة INT8.
- يخصص 4 GiB من الذاكرة بدلًا من تخصيص كامل الجهاز لعملية التحويل.
- يستخدم مجموعة بيانات COCO للمعايرة، وتحديدًا الصور المستخدمة في التحقق (إجماليها 5,000 صورة).
ذاكرة التخزين المؤقت للمعايرة
سينشئ TensorRT ملف معايرة .cache يمكن إعادة استخدامه لتسريع تصدير أوزان النماذج المستقبلية باستخدام البيانات نفسها، لكن ذلك قد يؤدي إلى معايرة ضعيفة عندما تختلف البيانات اختلافًا كبيرًا أو إذا تغيرت قيمة batch بشكل كبير. وفي هذه الحالات، ينبغي إعادة تسمية .cache الموجود ونقله إلى دليل مختلف أو حذفه نهائيًا.
مزايا استخدام YOLO مع TensorRT INT8#
-
تقليل حجم النموذج: يمكن أن يقلل التكميم من FP32 إلى INT8 حجم النموذج بمقدار 4 أضعاف (على القرص أو في الذاكرة)، ما يؤدي إلى أوقات تنزيل أسرع ومتطلبات تخزين أقل وبصمة ذاكرة أصغر عند نشر النموذج.
-
خفض استهلاك الطاقة: يمكن أن تستهلك عمليات الدقة المخفضة لنماذج YOLO المُصدّرة بدقة INT8 طاقة أقل مقارنةً بنماذج FP32، ولا سيما على الأجهزة التي تعمل بالبطارية.
-
تحسين سرعات الاستدلال: يعمل TensorRT على تحسين النموذج للأجهزة المستهدفة، ما قد يؤدي إلى سرعات استدلال أعلى على وحدات معالجة الرسومات والأجهزة المضمنة والمسرّعات.
ملاحظة حول سرعات الاستدلال
يمكن توقع أن تستغرق استدعاءات الاستدلال الأولى القليلة لنموذج مُصدّر إلى TensorRT INT8 وقتًا أطول من المعتاد في المعالجة المسبقة والاستدلال و/أو المعالجة اللاحقة. وقد يحدث ذلك أيضًا عند تغيير imgsz أثناء الاستدلال، خصوصًا عندما لا تكون imgsz مماثلة لما حُدد أثناء التصدير (يُعيَّن imgsz في تصدير TensorRT على أنه الملف التعريفي «الأمثل»).
عيوب استخدام 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
| الدقة | اختبار التقييم | المتوسط (مللي ثانية) | الحد الأدنى | الحد الأقصى (مللي ثانية) | mAPval 50(B) | mAPval 50-95(B) | batch | الحجم (بكسل) |
|---|---|---|---|---|---|---|---|
| FP32 | التنبؤ | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | التنبؤ | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | التنبؤ | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
| INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
وحدات معالجة الرسومات للمستهلكين#
اختُبر باستخدام Windows 10.0.19045 وpython 3.10.9 وultralytics==8.2.4 وtensorrt==10.0.0b6
أزمنة الاستدلال المعروضة هي mean وmin (الأسرع) وmax (الأبطأ) لكل اختبار، باستخدام الأوزان المدربة مسبقًا yolov8n.engine
| الدقة | اختبار التقييم | المتوسط (مللي ثانية) | الحد الأدنى | الحد الأقصى (مللي ثانية) | mAPval 50(B) | mAPval 50-95(B) | batch | الحجم (بكسل) |
|---|---|---|---|---|---|---|---|
| FP32 | التنبؤ | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | التنبؤ | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | التنبؤ | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOval | 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
| الدقة | اختبار التقييم | المتوسط (مللي ثانية) | الحد الأدنى | الحد الأقصى (مللي ثانية) | mAPval 50(B) | mAPval 50-95(B) | batch | الحجم (بكسل) |
|---|---|---|---|---|---|---|---|
| FP32 | التنبؤ | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | التنبؤ | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | التنبؤ | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
راجع دليل البدء السريع الخاص بنا حول NVIDIA Jetson مع Ultralytics YOLO لمعرفة المزيد عن الإعداد والتهيئة.
راجع دليل البدء السريع الخاص بنا حول NVIDIA DGX Spark مع Ultralytics YOLO لمعرفة المزيد عن الإعداد والتهيئة.
أساليب التقييم#
وسّع الأقسام أدناه للحصول على معلومات حول كيفية تصدير هذه النماذج واختبارها.
تهيئات التصدير
راجع وضع التصدير للحصول على تفاصيل حول وسائط تهيئة التصدير.
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 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
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, or DOTAv1 for appropriate model task
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)نشر نماذج YOLO26 المُصدَّرة بصيغة TensorRT#
بعد تصدير نماذج Ultralytics YOLO26 بنجاح إلى صيغة TensorRT، أصبحت الآن جاهزًا لنشرها. للحصول على إرشادات معمّقة حول نشر نماذج TensorRT في إعدادات متنوعة، اطلع على الموارد التالية:
-
نشر Ultralytics باستخدام خادم Triton: دليلنا حول كيفية استخدام خادم Triton للاستدلال من NVIDIA (المعروف سابقًا باسم خادم TensorRT للاستدلال) تحديدًا مع نماذج Ultralytics YOLO.
-
نشر الشبكات العصبية العميقة باستخدام NVIDIA TensorRT: تشرح هذه المقالة كيفية استخدام NVIDIA TensorRT لنشر الشبكات العصبية العميقة بكفاءة على منصات النشر المعتمدة على GPU.
-
الذكاء الاصطناعي الشامل لأجهزة الكمبيوتر المستندة إلى NVIDIA: نشر NVIDIA TensorRT: يشرح منشور المدونة هذا استخدام NVIDIA TensorRT لتحسين نماذج الذكاء الاصطناعي ونشرها على أجهزة الكمبيوتر المستندة إلى NVIDIA.
-
مستودع GitHub الخاص بـ NVIDIA TensorRT: هذا هو مستودع GitHub الرسمي الذي يحتوي على الكود المصدر والوثائق الخاصة بـ NVIDIA TensorRT.
الملخص#
ركزنا في هذا الدليل على تحويل نماذج Ultralytics YOLO26 إلى صيغة نماذج TensorRT من NVIDIA. تُعد خطوة التحويل هذه ضرورية لتحسين كفاءة نماذج 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") # creates 'yolo26n.engine' # Run inference 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(quantization-aware training)، وفي هذه الحالة يتم تصدير النطاقات التي تحملها نقطة التحقق دون معايرة:-
التصدير باستخدام 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 للاستدلال باستخدام الموارد التالية:
- نشر Ultralytics YOLO26 باستخدام خادم Triton: إرشادات خطوة بخطوة لإعداد خادم Triton للاستدلال واستخدامه.
- نشر الشبكات العصبية العميقة باستخدام NVIDIA TensorRT: دليل NVIDIA حول نشر نماذج التعلم العميق باستخدام TensorRT، مع خيارات وإعدادات نشر مفصلة.
ستساعدك هذه الأدلة على دمج نماذج YOLO26 بكفاءة في بيئات النشر المتنوعة.
يمكن أن تختلف تحسينات الأداء مع TensorRT بناءً على العتاد المستخدم. فيما يلي بعض المعايير النموذجية:
-
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 وتقارير تحليل الأداء لدينا.
-