خطوات الاستخدام
الخطوة 1: أدخل زمن الاستدلال الأصلي (original latency) بوحدة المللي ثانية (ms). هذا الزمن يمثل المدة التي يستغرقها نموذجك لتوليد استجابة واحدة على وحدة معالجة الرسوميات (GPU) باستخدام الدقة الأصلية (عادة FP32). تأكد من قياس هذا الزمن باستخدام أداة موثوقة (مثل NVIDIA Nsight أو TensorRT profiling) للحصول على قيمة دقيقة. كلما كان الزمن أصغر، كلما كان التطبيق أسرع، ولكن التحسين يهدف إلى تقليله أكثر.
الخطوة 2: اختر الدقة (precision) المستهدفة التي تريد تحويل النموذج إليها باستخدام TensorRT. الخيارات: FP32 (دقة عائمة 32 بت، لا تحسين في السرعة ولكنه المرجع)، FP16 (دقة عائمة 16 بت، يوفر تسريعًا يتراوح بين 1.5x إلى 2x عادةً)، وINT8 (عدد صحيح 8 بت، يوفر تسريعًا يتراوح بين 2x إلى 4x). يجب مراعاة أن الدقة المنخفضة قد تؤدي إلى فقدان طفيف في دقة النموذج، لكن TensorRT يستخدم تقنيات معايرة لتقليل هذا التأثير.
الخطوة 3: اضغط على زر "احسب" ليقوم النظام بتقدير زمن الاستدلال المحسن. تستخدم الحاسبة معاملات تسريع نموذجية مأخوذة من أداء NVIDIA على نماذج شائعة (مثل ResNet وBERT). المعادلة المستخدمة: الزمن المحسن = الزمن الأصلي / عامل التسريع. حيث عامل التسريع يعتمد على الدقة: FP32: 1.0، FP16: 1.8 (قيمة افتراضية، قد تختلف بين 1.5-2.0 حسب النموذج)، INT8: 3.5 (قيمة افتراضية، قد تتراوح بين 2.5-4.0). هذه القيم تقريبية، والنتيجة الفعلية تعتمد على حجم النموذج، هندسة GPU، وتطبيق تحسينات TensorRT المحددة.
الخطوة 4: راجع النتيجة وقارنها مع الزمن الأصلي. يمكنك تكرار الحساب بدقة مختلفة لتقييم المفاضلة بين السرعة والدقة. إذا كنت تستخدم تطبيقًا حساسًا للدقة (مثل التشخيص الطبي)، فقد تفضل FP16 على INT8. استخدم النتيجة كتقدير أولي، ثم قم بقياس الأداء الفعلي باستخدام TensorRT لإعداداتك الخاصة.
أمثلة محلولة
تطبيقات عملية على تسريع TensorRT بخطوات الحل كاملة.
الحل
لتحويل YOLOv5 إلى FP16: نستخدم عامل تسريع 1.8 (قيمة متوسطة). الزمن المحسن = 15 / 1.8 ≈ 8.33 مللي ثانية. أي تحسن بنسبة 44.4% تقريبًا. لتحويله إلى INT8: نستخدم عامل تسريع 3.5. الزمن المحسن = 15 / 3.5 ≈ 4.29 مللي ثانية. هذا تحسن بنسبة 71.4% تقريبًا. يجب ملاحظة أن YOLOv5 قد يظهر فقدانًا طفيفًا في الدقة (mAP) عند استخدام INT8، لكن تقنيات المعايرة مثل Intel-PTQ يمكن أن تحد من هذا الفقدان إلى أقل من 1%. في الممارسة العملية، يمكن أن يصل التسريع الفعلي إلى 2.5x لـ FP16 و4x لـ INT8 على بنية Ampere، لذا استخدم هذه النتائج كتقدير أولي وقم بقياس أداء النموذج المُحسَّن بدقة.
الحل
نستخدم عامل تسريع 1.8 لـ FP16. الزمن المحسن = 25 / 1.8 ≈ 13.89 مللي ثانية. هذا أكبر من 10 مللي ثانية، لذا قد لا يكون كافيًا للوقت الفعلي. يمكنك تجربة INT8: الزمن المحسن = 25 / 3.5 ≈ 7.14 مللي ثانية، وهو أقل من 10 مللي ثانية. ولكن، BERT-Large قد يفقد دقة أكبر مع INT8 (انخفاض في F1-score يصل إلى 1-2%). الحل الأمثل هو استخدام FP16 مع تحسينات إضافية مثل تكميم الانتباه أو تقليل حجم الدفعة. لتحقيق الوقت الفعلي، قد تحتاج إلى استخدام GPU أقوى (مثل A10) أو تقليص النموذج (مثل DistilBERT). تذكر أن TensorRT يدعم أيضًا تقنيات مثل التجميع الديناميكي وضبط الدقة المختلطة لزيادة السرعة مع الحفاظ على الدقة.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة تسريع TensorRT.
مثال 1: YOLOv5 من 15ms إلى 8.333ms في FP16
- الزمن الأصلي (مللي ثانية)
- 15
- الدقة
- fp16
مثال 1 INT8: 15ms ÷ 3.5 = 4.286ms وتحسن 71.43%
- الزمن الأصلي (مللي ثانية)
- 15
- الدقة
- int8
مثال 2: BERT-Large 25ms → 13.889ms بـ FP16 ولا يكفي
- الزمن الأصلي (مللي ثانية)
- 25
- الدقة
- fp16
مثال 2 INT8: 7.143ms يحقق الوقت الفعلي و140 استدلال/ث
- الزمن الأصلي (مللي ثانية)
- 25
- الدقة
- int8
FP32 مرجع بلا تسريع: 8ms تبقى 8ms
- الزمن الأصلي (مللي ثانية)
- 8
- الدقة
- fp32