خطوات الاستخدام
الخطوة 1: إدخال عدد الطلبات المتزامنة (concurrentRequests). هذا العدد يمثل إجمالي الطلبات التي تصل إلى الخادم في نفس الوقت أو في فترة زمنية قصيرة جداً. في خادم Triton، كل طلب يتطلب استنتاجاً من النموذج. إذا كان العدد أكبر من عدد مثيلات النموذج، فإن بعض الطلبات ستضطر للانتظار.
الخطوة 2: إدخال عدد مثيلات النموذج (modelInstances). كل مثيل يمثل نسخة من النموذج تعمل على وحدة معالجة (CPU/GPU) ويمكنها معالجة طلب واحد في كل مرة. هذا الرقم يحدد سعة الخادم المتوازية.
الخطوة 3: إدخال متوسط وقت الاستنتاج (avgInferTime) بالمللي ثانية. هذا هو الزمن الذي يستغرقه مثيل واحد لمعالجة طلب واحد. يتم حسابه عادة من التجارب أو من سجلات الخادم. بناءً على هذه القيم، يتم حساب وقت الانتظار التقديري باستخدام الصيغة: وقت الانتظار = (max(0, concurrentRequests - modelInstances) * avgInferTime) / modelInstances. نفترض وصول الطلبات في دفعة واحدة وأن نموذج الخدمة هو (M/M/c) لكن مع تبسيط للحمل الفوري.
أمثلة محلولة
تطبيقات عملية على وقت انتظار طابور Triton بخطوات الحل كاملة.
الحل
الحل: أولاً، نحسب عدد الطلبات التي ستنتظر: 10 - 4 = 6 طلبات. ثم نقسم عدد الطلبات المنتظرة على عدد المثيلات: 6 / 4 = 1.5. ثم نضرب في متوسط وقت الاستنتاج: 1.5 * 50 = 75 مللي ثانية. هذا يعني أن أي طلب جديد سينتظر في المتوسط 75 مللي ثانية قبل البدء في المعالجة. لاحظ أن هذا الافتراض مبني على أن الطلبات تصل في نفس الوقت وأن المعالجة خطية. في الواقع، قد يكون وقت الانتظار أقل بسبب التوزيع العشوائي للطلبات، أو أكثر إذا كانت الطلبات تصل باستمرار. هذا المثال يوضح كيفية تأثير زيادة عدد المثيلات في تقليل وقت الانتظار. إذا كان لدينا 10 مثيلات بدلاً من 4، فسيكون وقت الانتظار صفراً.
الحل
الحل: عدد الطلبات المتزامنة (5) أقل من عدد المثيلات (8)، وبالتالي وقت الانتظار = 0 مللي ثانية. لا توجد طلبات تنتظر لأن السعة كافية لمعالجة جميع الطلبات فورياً. هذا يوضح أهمية توفير عدد كافٍ من المثيلات لتجنب التأخير. لكن يجب الانتباه إلى أن وقت الانتظار الصفري لا يعني أن زمن الاستجابة الكلي (وقت الانتظار + وقت الاستنتاج) هو صفر، بل فقط الجزء الخاص بالانتظار. في هذه الحالة، زمن الاستجابة الكلي يساوي متوسط وقت الاستنتاج (100 مللي ثانية).