تصدير TensorRT لنماذج YOLO26#
قد يتطلب نشر نماذج computer vision في بيئات عالية الأداء تنسيقاً يعظم السرعة والكفاءة. ينطبق هذا بشكل خاص عند نشر نموذجك على وحدات معالجة الرسومات من NVIDIA.
باستخدام تنسيق تصدير TensorRT، يمكنك تحسين نماذج Ultralytics YOLO26 الخاصة بك للاستدلال السريع والفعال على أجهزة NVIDIA. سيوفر لك هذا الدليل خطوات سهلة المتابعة لعملية التحويل ويساعدك على تحقيق أقصى استفادة من تقنية NVIDIA المتقدمة في مشاريع deep learning الخاصة بك.
TensorRT#
TensorRT، الذي ططوره NVIDIA، هو مجموعة تطوير برمجيات متقدمة (SDK) مصممة للاستدلال السريع بالتعلم العميق. وهو مناسب تماماً للتطبيقات في الوقت الفعلي مثل object detection.
تعمل هذه المجموعة من الأدوات على تحسين نماذج التعلم العميق لوحدات معالجة الرسومات من NVIDIA وتؤدي إلى عمليات أسرع وأكثر كفاءة. تخضع نماذج TensorRT لتحسين TensorRT، والذي يتضمن تقنيات مثل دمج الطبقات (layer fusion)، ومعايرة الدقة (INT8 و FP16)، وإدارة ذاكرة الموتر الديناميكية، والضبط التلقائي للنواة (kernel auto-tuning). يتيح تحويل نماذج التعلم العميق إلى تنسيق TensorRT للمطورين إدراك إمكانات وحدات معالجة الرسومات من NVIDIA بالكامل.
تشتهر TensorRT بتوافقها مع تنسيقات النماذج المختلفة، بما في ذلك TensorFlow وPyTorch وONNX، مما يوفر للمطورين حلاً مرناً لدمج وتحسين النماذج من أطر عمل مختلفة. تتيح هذه التعددية إمكانية model deployment بكفاءة عبر بيئات الأجهزة والبرمجيات المتنوعة.
تقوم TensorRT بإنشاء ملف تعريف لمحرك وتعديله على وحدة معالجة الرسومات الخاصة بالبناء. قم بالبناء لمعمارية وحدة معالجة الرسومات الخاصة بالنشر وقم بمطابقة وقت تشغيل TensorRT/CUDA؛ لا تعامل ملف .engine كتنسيق نموذج محمول. لنشر الحافة، توفر Ultralytics Platform ثمانية خيارات مستهدفة لـ Jetson، مع توثيق حالة البناء الفعلي والتحقق لكل منها، أو يمكنك التصدير محلياً على الجهاز الوجهة.
الميزات الرئيسية لنماذج TensorRT#
توفر نماذج TensorRT مجموعة من الميزات الرئيسية التي تساهم في كفاءتها وفعاليتها في استنتاج التعلم العميق عالي السرعة:
-
معايرة الدقة (Precision Calibration): يدعم TensorRT معايرة الدقة، مما يسمح بضبط النماذج لتلبية متطلبات دقة محددة. يتضمن ذلك دعم تنسيقات الدقة المنخفضة مثل INT8 و FP16، والتي يمكن أن تعزز سرعة الاستنتاج مع الحفاظ على مستويات دقة مقبولة.
-
دمج الطبقات: تتضمن عملية تحسين TensorRT دمج الطبقات، حيث يتم الجمع بين طبقات متعددة من neural network في عملية واحدة. يقلل هذا من العبء الحسابي ويحسن سرعة الاستدلال عن طريق تقليل الوصول إلى الذاكرة والحوسبة.
-
إدارة ذاكرة الموتر الديناميكية (Dynamic Tensor Memory Management): يدير TensorRT استخدام ذاكرة الموتر بكفاءة أثناء الاستنتاج، مما يقلل من عبء الذاكرة ويحسن تخصيص الذاكرة. ينتج عن هذا استخدام أكثر كفاءة لذاكرة GPU.
-
الضبط التلقائي للنواة (Automatic Kernel Tuning): يطبق TensorRT الضبط التلقائي للنواة لاختيار نواة GPU الأكثر تحسيناً لكل طبقة من النموذج. يضمن هذا النهج التكيفي أن النموذج يستفيد بالكامل من القوة الحسابية لـ GPU.
خيارات النشر في TensorRT#
قبل أن ننظر إلى الكود الخاص بتصدير نماذج YOLO26 إلى تنسيق TensorRT، دعنا نفهم أين تُستخدم نماذج TensorRT عادةً.
يوفر TensorRT العديد من خيارات النشر، ويوازن كل خيار بين سهولة التكامل وتحسين الأداء والمرونة بشكل مختلف:
- النشر داخل TensorFlow: تدمج هذه الطريقة TensorRT في TensorFlow، مما يسمح للنماذج المحسنة بالعمل في بيئة TensorFlow مألوفة. وهي مفيدة للنماذج التي تحتوي على مزيج من الطبقات المدعومة وغير المدعومة، حيث يمكن لـ TF-TRT التعامل مع هذه بكفاءة.
-
واجهة برمجة تطبيقات وقت التشغيل المستقلة (Standalone TensorRT Runtime API): توفر تحكماً دقيقاً، وهي مثالية للتطبيقات الحساسة للأداء. إنها أكثر تعقيداً ولكنها تسمح بتنفيذ مخصص للمشغلين غير المدعومين.
-
خادم استنتاج NVIDIA Triton (NVIDIA Triton Inference Server): خيار يدعم النماذج من أطر عمل مختلفة. وهو مناسب بشكل خاص للاستنتاج السحابي أو على الحافة (edge)، حيث يوفر ميزات مثل تنفيذ النموذج المتزامن وتحليل النموذج.
المهام المدعومة#
يدعم تصدير TensorRT جميع مهام Ultralytics السبع. تتوفّر التجزئة الدلالية وتقدير العمق حصرياً مع YOLO26، وهي العائلة الوحيدة التي توفّر تلك الرؤوس.
تصدير نماذج YOLO26 إلى TensorRT#
يمكنك تحسين كفاءة التنفيذ وتعزيز الأداء عن طريق تحويل نماذج YOLO26 إلى تنسيق TensorRT.
التثبيت#
لتثبيت الحزمة المطلوبة، قم بتشغيل:
# Install the required package for YOLO26
pip install ultralyticsللحصول على إرشادات تفصيلية وأفضل الممارسات المتعلقة بعملية التثبيت، راجع دليل تثبيت YOLO26. أثناء تثبيت الحزم المطلوبة لـ YOLO26، إذا واجهت أي صعوبات، فاستشر دليل المشكلات الشائعة للحصول على الحلول والنصائح.
الاستخدام#
قبل الغوص في إرشادات الاستخدام، تأكد من الاطلاع على مجموعة نماذج YOLO26 التي توفرها Ultralytics. سيساعدك هذا في اختيار النموذج الأنسب لمتطلبات مشروعك.
يدعم تنسيق TensorRT أوضاع Export وPredict وValidate. يتطلب الاستدلال والتحقق وحدة معالجة رسومات 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 | حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون رقماً صحيحاً للصور المربعة أو صفاً (tuple) (height, width) لأبعاد محددة. |
quantize | int أو str | None | دقة التكميم: 16 (FP16) أو 8 (INT8/PTQ؛ يتطلب المعايرة data/fraction)؛ 32/غير المحدد هو FP32. يحل محل علامات half/int8 المهملة. |
dynamic | bool | False | يسمح بأحجام إدخال ديناميكية، مما يعزز المرونة في التعامل مع أبعاد الصور المتغيرة. |
simplify | bool | True | يبسط رسم البياني للنموذج باستخدام onnxslim، مما قد يحسن الأداء والتوافق. |
opset | int | None | يحدد إصدار ONNX opset للرسم البياني الوسيط ONNX. في حال عدم تحديده، يتم استخدام أحدث إصدار مدعوم. |
workspace | float أو None | None | يحدد الحد الأقصى لحجم مساحة العمل بـ GiB لتحسينات TensorRT، مع موازنة استخدام الذاكرة والأداء؛ استخدم None للتخصيص التلقائي بواسطة TensorRT حتى الحد الأقصى للجهاز. |
nms | bool | False | يضيف كبت غير الحد الأقصى (NMS)، وهو أمر ضروري لمعالجة الاكتشاف بدقة وكفاءة. |
batch | int | 1 | يحدد حجم الاستدلال المفعلي لنموذج التصدير أو الحد الأقصى لعدد الصور التي سيعالجها النموذج المُصدّر في نفس الوقت في وضع predict. |
data | str | None | مسار ملف YAML للـdataset، وهو أمر أساسي للكمية (quantization)؛ بينما يتطلب التصنيف مجلد مجموعة بيانات أو اسم مجموعة بيانات مدمجة بدلاً من ذلك. إذا تم تخطيه باستخدام quantize=8، فإن Ultralytics تحدد مجموعة بيانات المعايرة الافتراضية لمهمة النموذج. |
fraction | float أو int أو list | 1.0 | مجموعة المعايرة الفرعية كنسبة، أو عدد للصور، أو نسب/أعداد [train, val]؛ تحد القائمة train أو val، بينما تظل test كاملة. |
device | str | None | يحدد الجهاز للتصدير: وحدة معالجة الرسومات (device=0)، أو DLA لـ NVIDIA Jetson (device=dla:0 أو device=dla:1). |
يرجى التأكد من استخدام GPU مع دعم CUDA عند التصدير إلى TensorRT.
لا تدعم TensorRT 11.0 تقنية DLA؛ استخدم TensorRT 10.x لـ device=dla:0 أو device=dla:1، أو قم بتصدير محرك وحدة معالجة رسومات TensorRT 11.0.
لمزيد من التفاصيل حول عملية التصدير، تفضل بزيارة صفحة وثائق Ultralytics حول التصدير.
تصدير TensorRT مع تكميم INT8#
يؤدي تصدير نماذج Ultralytics YOLO باستخدام TensorRT بدقة precision INT8 إلى تنفيذ الكمية بعد التدريب (PTQ). تستخدم TensorRT المعايرة لـ PTQ، والتي تقيس توزيع التنشيطات داخل كل موتر تنشيط أثناء قيام نموذج YOLO بمعالجة الاستدلال على بيانات إدخال ممثلة، ثم تستخدم هذا التوزيع لتقدير قيم القياس لكل موتر. كل موتر تنشيط مرشح للكمية له مقياس مرتب يتم استنتاجه بواسطة عملية معايرة.
أزالت TensorRT 11 الكمية الضمنية واجهة IInt8Calibrator. على TensorRT 11 والأحدث، تقوم Ultralytics بتنفيذ كمية INT8 مع كمية صريحة لـ NVIDIA ModelOpt، والتي تدرج عقد Q/DQ في رسم بياني ONNX قبل بناء محرك مكتوب بقوة، ويتم تطبيق FP16 مع تحويل الدقة المختلطة ModelOpt AutoCast. تعمل وسائط quantize=8 وquantize=16 وdata بنفس الطريقة؛ يتم تثبيت ModelOpt تلقائياً عند الاستخدام الأول. على TensorRT 7-10 يتم استخدام المعاير القديم الموصوف أدناه بدلاً من ذلك.
عند معالجة الشبكات المكممة ضمنياً، يستخدم TensorRT تقنية INT8 بشكل انتهازي لتحسين وقت تنفيذ الطبقة. إذا كانت الطبقة تعمل بشكل أسرع في INT8 ولديها مقاييس تكميم معينة على مدخلات ومخرجات بياناتها، فسيتم تعيين نواة بدقة INT8 لتلك الطبقة، وإلا يختار TensorRT دقة إما FP32 أو FP16 للنواة بناءً على أيهما ينتج وقت تنفيذ أسرع لتلك الطبقة.
من الحاسم التأكد من استخدام نفس الجهاز الذي سيستخدم أوزان نموذج TensorRT للنشر عند التصدير بدقة INT8، حيث يمكن أن تختلف نتائج المعايرة عبر الأجهزة.
تكوين تصدير INT8#
الوسائط المتوفرة عند استخدام export لنموذج Ultralytics YOLO ستؤثر بشكل كبير على أداء النموذج المصدر. ستحتاج أيضاً إلى اختيارها بناءً على موارد الجهاز المتاحة، ومع ذلك يجب أن تعمل الوسائط الافتراضية مع معظم Ampere (or newer) NVIDIA discrete GPUs. خوارزمية المعايرة المستخدمة هي "MINMAX_CALIBRATION" لصادرات وحدة معالجة الرسومات، بينما تستخدم صادرات DLA على NVIDIA Jetson "ENTROPY_CALIBRATION_2". يمكنك قراءة المزيد من التفاصيل حول الخيارات المتاحة in the TensorRT Developer Guide. وجدت اختبارات Ultralytics أن "MINMAX_CALIBRATION" هو الخيار الأفضل لصادرات وحدة معالجة الرسومات، ويتم اختيار الخوارزمية تلقائياً بناءً على جهاز التصدير.
-
workspace: يتحكم في حجم (بـ GiB) تخصيص ذاكرة الجهاز أثناء تحويل أوزان النموذج.-
اضبط قيمة
workspaceوفقاً لاحتياجات المعايرة وتوفر الموارد. بينما قد تؤديworkspaceالأكبر إلى زيادة وقت المعايرة، إلا أنها تسمح لـ TensorRT باكتشاف نطاق أوسع من تكتيكات التحسين، مما قد يعزز أداء النموذج وaccuracy. على العكس من ذلك، يمكن أن تقللworkspaceالأصغر وقت المعايرة ولكنها قد تقيد استراتيجيات التحسين، مما يؤثر على جودة النموذج الكمي. -
الافتراضي هو
workspace=None، والذي سيسمح لـ TensorRT بتخصيص الذاكرة تلقائياً، عند التكوين يدويًا، قد تحتاج هذه القيمة إلى الزيادة في حالة تعطل المعايرة (الخروج بدون تحذير). -
ستبلغ TensorRT عن
UNSUPPORTED_STATEأثناء التصدير إذا كانت قيمةworkspaceأكبر من الذاكرة المتاحة للجهاز، مما يعني أنه يجب خفض قيمةworkspaceأو ضبطها علىNone. -
إذا تم ضبط
workspaceعلى الحد الأقصى وفشلت/تعطلت المعايرة، ففكر في استخدامNoneللتخصيص التلقائي أو عن طريق تقليل قيمimgszوbatchلتقليل متطلبات الذاكرة. -
تذكر أن المعايرة لـ INT8 خاصة بكل جهاز، حيث أن استعارة GPU "عالي الأداء" للمعايرة قد يؤدي إلى ضعف الأداء عند تشغيل الاستنتاج على جهاز آخر.
-
-
batch: الحد الأقصى لحجم الدفعة الذي سيتم استخدامه للاستدلال. أثناء الاستدلال، يمكن استخدام دفعات أصغر، لكن الاستدلال لن يقبل دفعات أكبر من المحددة.
يمكن أن يؤدي استخدام دفعات صغيرة إلى قياس غير دقيق أثناء معايرة INT8. وذلك لأن العملية تتكيف بناءً على البيانات التي تراها. قد لا تلتقط الدفعات الصغيرة النطاق الكامل للقيم، مما يؤدي إلى مشاكل في المعايرة النهائية. يساعد استخدام batch size أكبر في ضمان نتائج معايرة أكثر تمثيلاً.
أدت تجارب NVIDIA إلى التوصية باستخدام ما لا يقل عن 500 صورة معايرة ممثلة لبيانات نموذجك، مع معايرة كمية INT8. هذا إرشادي وليس متطلباً صارماً، وستحتاج إلى التجربة لمعرفة ما هو مطلوب للعمل بشكل جيد لمجموعة البيانات الخاصة بك. نظراً لأن بيانات المعايرة مطلوبة لمعايرة INT8 مع TensorRT، فتأكد من استخدام وسيط data عندما يكون quantize=8 لـ TensorRT واستخدام data="my_dataset.yaml"، والذي سيستخدم الصور من validation للمعايرة بها. عندما لا يتم تمرير أي قيمة لـ 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")- الصادرات ذات المحاور الديناميكية، سيتم تمكين هذا بشكل افتراضي عند التصدير باستخدام
quantize=8حتى لو لم يتم تعيينه صراحةً. راجع export arguments للحصول على معلومات إضافية. - يضبط الحد الأقصى لحجم الدفعة على 8 للنموذج المصدر ومعايرة INT8.
- يخصص 4 جيجابايت من الذاكرة بدلاً من تخصيص الجهاز بالكامل لعملية التحويل.
- يستخدم COCO dataset للمعايرة، وتحديداً الصور المستخدمة لـ validation (5,000 إجمالي).
ذاكرة التخزين المؤقت للمعايرة (Calibration Cache)
ستقوم 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أو أي other metric used to evaluate model performance من المرجح أن يكون أسوأ إلى حد ما. يتم الاحتفاظ بطبقات السيجمويد بدقة أعلى للحفاظ على معايرة النتائج، ولكن يمكن لـ INT8 أن تظل تغير قيم الثقة، لذا حدد عتبة التشغيل من منحنى F1 الخاص بنموذج INT8. راجع Performance results section لمقارنة الاختلافات في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
| الدقة (Precision) | اختبار التقييم | المتوسط (ملي ثانية) | الحد الأدنى | الأقصى (ملي ثانية) | 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
| الدقة (Precision) | اختبار التقييم | المتوسط (ملي ثانية) | الحد الأدنى | الأقصى (ملي ثانية) | 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
| الدقة (Precision) | اختبار التقييم | المتوسط (ملي ثانية) | الحد الأدنى | الأقصى (ملي ثانية) | 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 |
راجع quickstart guide on NVIDIA Jetson with Ultralytics YOLO لمعرفة المزيد حول الإعداد والتكوين.
راجع quickstart guide on NVIDIA DGX Spark with Ultralytics YOLO لمعرفة المزيد حول الإعداد والتكوين.
طرق التقييم#
قم بتوسيع الأقسام أدناه للحصول على معلومات حول كيفية تصدير هذه النماذج واختبارها.
تكوينات التصدير
راجع export mode للحصول على تفاصيل بخصوص وسائط تكوين التصدير.
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"
)حلقة التنبؤ
راجع predict mode للحصول على معلومات إضافية.
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 mode لمعرفة المزيد حول وسائط تكوين التحقق.
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 الخاصة بك في بيئات مختلفة، ألقِ نظرة على الموارد التالية:
-
Deploy Ultralytics with a Triton Server: دليلنا حول كيفية استخدام خادم NVIDIA Triton Inference (TensorRT Inference سابقاً) خصيصاً للاستخدام مع نماذج Ultralytics YOLO.
-
Deploying Deep Neural Networks with NVIDIA TensorRT: تشرح هذه المقالة كيفية استخدام NVIDIA TensorRT لنشر شبكات عصبية عميقة بكفاءة على منصات النشر القائمة على وحدة معالجة الرسومات.
-
End-to-End AI for NVIDIA-Based PCs: NVIDIA TensorRT Deployment: توضح هذه المقالة استخدام NVIDIA TensorRT لتحسين ونشر نماذج الذكاء الاصطناعي على أجهزة الكمبيوتر التي تعمل بنظام NVIDIA.
-
GitHub Repository for NVIDIA TensorRT:: هذا هو مستودع GitHub الرسمي الذي يحتوي على الكود المصدري والتوثيق لـ NVIDIA TensorRT.
ملخص#
في هذا الدليل، ركزنا على تحويل نماذج Ultralytics YOLO26 إلى تنسيق نموذج TensorRT الخاص بـ NVIDIA. تعد خطوة التحويل هذه حاسمة لتحسين كفاءة وسرعة نماذج YOLO26، مما يجعلها أكثر فاعلية ومناسبة لبيئات النشر المتنوعة.
لمزيد من المعلومات حول تفاصيل الاستخدام، ألق نظرة على TensorRT official documentation.
إذا كنت مهتماً بتكاملات Ultralytics YOLO26 الإضافية، فإن integration guide page الخاصة بنا توفر مجموعة واسعة من الموارد والمعلومات المفيدة.
الأسئلة الشائعة#
لتحويل نماذج 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 Installation guide وexport documentation.
-
يوفر استخدام TensorRT لتحسين نماذج YOLO26 العديد من المزايا:
- سرعة استدلال أسرع: يعمل TensorRT على تحسين طبقات النموذج ويستخدم معايرة الدقة (INT8 وFP16) لتسريع الاستدلال دون التضحية بالدقة بشكل كبير.
- كفاءة الذاكرة: يدير TensorRT ذاكرة الـ tensor ديناميكيًا، مما يقلل من النفقات العامة ويحسن استخدام ذاكرة GPU.
- دمج الطبقات: يجمع طبقات متعددة في عمليات مفردة، مما يقلل من التعقيد الحسابي.
- الضبط التلقائي للنواة (Kernel Auto-Tuning): يختار تلقائيًا أنوية GPU المحسّنة لكل طبقة من طبقات النموذج، مما يضمن أقصى أداء.
لمعرفة المزيد، استكشف official TensorRT documentation from NVIDIA وin-depth TensorRT overview الخاص بنا.
نعم، يمكنك تصدير نماذج YOLO26 باستخدام TensorRT مع تكميم INT8. تتضمن هذه العملية التكميم بعد التدريب (PTQ) والمعايرة:
-
التصدير باستخدام 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")
لمزيد من التفاصيل، راجع قسم exporting TensorRT with INT8 quantization section.
-
يمكن نشر نماذج YOLO26 TensorRT على خادم NVIDIA Triton Inference Server باستخدام الموارد التالية:
- Deploy Ultralytics YOLO26 with Triton Server: إرشاد خطوة بخطوة حول إعداد واستخدام خادم Triton Inference Server.
- Deploying Deep Neural Networks with NVIDIA TensorRT: دليل NVIDIA حول نشر نماذج التعلم العميق باستخدام TensorRT لخيارات وتكوينات النشر المفصلة.
ستساعدك هذه الأدلة على دمج نماذج YOLO26 بكفاءة في بيئات نشر متنوعة.
يمكن أن تختلف تحسينات الأداء مع TensorRT بناءً على الأجهزة المستخدمة. إليك بعض المعايير النموذجية:
-
NVIDIA A100:
- FP32 الاستدلال: ~0.52 مللي ثانية / صورة
- FP16 الاستدلال: ~0.34 مللي ثانية / صورة
- INT8 الاستدلال: ~0.28 مللي ثانية / صورة
- انخفاض طفيف في mAP مع دقة INT8، ولكن تحسن ملحوظ في السرعة.
-
GPUs للمستهلكين (مثل RTX 3080):
- FP32 الاستدلال: ~1.06 مللي ثانية / صورة
- FP16 الاستدلال: ~0.62 مللي ثانية / صورة
- INT8 الاستدلال: ~0.52 مللي ثانية / صورة
يمكن العثور على معايير الأداء التفصيلية لتكوينات الأجهزة المختلفة في performance section.
للاطلاع على رؤى أكثر شمولاً حول أداء TensorRT، راجع Ultralytics documentation وتقارير تحليل الأداء الخاصة بنا.
-