خطوات الاستخدام
الخطوة 1: فهم زمن الدفعة الأساسي (Base Latency). يمثل هذا المدخل الوقت الكلي الذي تستغرقه عملية الاستدلال لدفعة كاملة من العينات. على سبيل المثال، إذا كان زمن الدفعة الأساسي 100 ملي ثانية لدفعة حجمها 32، فهذا يعني أن النموذج يستغرق 100 ملي ثانية لمعالجة 32 عينة معاً. كلما زاد زمن الدفعة، زادت الموارد المستهلكة (مثل الذاكرة) لكن قد تزيد الإنتاجية.
الخطوة 2: إدخال حجم الدفعة (Batch Size). يشير هذا الرقم إلى عدد العينات التي تتم معالجتها معاً في جلسة واحدة. على سبيل المثال، حجم دفعة 64 يعني معالجة 64 عينة في وقت واحد. في أنظمة التعلم العميق، غالباً ما تزيد كفاءة المعالجة مع حجم الدفعة حتى حد معين بسبب تنفيذ العمليات المتوازية على وحدات معالجة الرسوميات (GPU). لكن تجاوز حجم الدفعة المثالي قد يؤدي إلى بطء شديد أو تجاوز الذاكرة.
الخطوة 3: حساب زمن الاستدلال لكل عينة (Per-Sample Latency). يتم حسابه بقسمة زمن الدفعة الأساسي على حجم الدفعة. المعادلة: زمن العينة = زمن الدفعة الأساسي / حجم الدفعة. على سبيل المثال، إذا كان زمن الدفعة = 200 ملي ثانية وحجم الدفعة = 64، فإن زمن العينة = 200/64 = 3.125 ملي ثانية. هذا المقياس مهم لأنه يعطي فكرة عن مدى سرعة استجابة النموذج لكل طلب فردي عندما يتم تجميع الطلبات في دفعات.
الخطوة 4: تحليل المفاضلة بين زمن الاستجابة والإنتاجية. كلما زاد حجم الدفعة، انخفض زمن العينة (بسبب مشاركة التكاليف الثابتة)، مما يزيد من الإنتاجية (عدد العينات في الثانية). لكن زيادة حجم الدفعة تزيد أيضاً من زمن الدفعة الكلي، مما قد يؤثر سلباً على التطبيقات الحساسة لزمن الاستجابة (مثل الأنظمة التفاعلية). استخدم الحاسبة لاستكشاف النسب المثلى بناءً على متطلباتك.
الخطوة 5: تطبيق النتائج عملياً. على سبيل المثال، في تطبيق معالجة فيديو في الوقت الفعلي، قد تحتاج إلى زمن عينة منخفض جداً (مثل < 10 ملي ثانية) لضمان عدم التأخير. باستخدام الحاسبة، يمكنك اختيار حجم الدفعة الذي يحقق هذا الهدف. كما يجب مراعاة حدود الذاكرة: كلما زاد حجم الدفعة، زادت الذاكرة المطلوبة لتخزين البيانات الوسيطة.
أمثلة محلولة
تطبيقات عملية على تحليل زمن الدفعة بخطوات الحل كاملة.
الحل
لدينا: زمن الدفعة الأساسي = 150 ملي ثانية، حجم الدفعة = 128. أولاً، زمن العينة = 150 / 128 ≈ 1.171875 ملي ثانية (أقل من 1.2 ملي ثانية). هذا منخفض جداً، مما يجعله مناسباً للتطبيقات في الوقت الفعلي. ثانياً، الإنتاجية = (حجم الدفعة / زمن الدفعة) × 1000 = (128 / 150) × 1000 ≈ 853.33 عينة في الثانية. هذه إنتاجية عالية. لنقارن مع حجم دفعة أصغر: إذا كان حجم الدفعة 32، زمن العينة = 150 / 32 = 4.6875 ملي ثانية، والإنتاجية = (32 / 150) × 1000 ≈ 213.33 عينة في الثانية. يتضح أن زيادة حجم الدفعة يقلل زمن العينة ويزيد الإنتاجية، لكن يجب مراعاة أن زمن الدفعة الكلي (150 ملي ثانية) قد يكون كبيراً نسبياً إذا كان المطلوب معالجة دفعة واحدة فقط. في الأنظمة الحقيقية، غالباً ما يتم تجميع الطلبات الواردة في دفعات لتحقيق التوازن.
الحل
بالنسبة لحجم الدفعة 16: زمن العينة = 50 / 16 = 3.125 ملي ثانية. الإنتاجية النظرية لحجم الدفعة 16: (16 / 50) × 1000 = 320 عينة في الثانية. هذا أعلى من الطلب (100/ثانية)، لذا النظام يتحمل الحمل. لكن زمن الدفعة الكلي 50 ملي ثانية، مما يعني أن كل طلب ينتظر حتى امتلاء الدفعة قد يزيد زمن الانتظار. أما بالنسبة لحجم الدفعة 32: زمن العينة = 80 / 32 = 2.5 ملي ثانية، أقل من السابق. الإنتاجية = (32 / 80) × 1000 = 400 عينة في الثانية. بذلك تتحسن الإنتاجية لكن زمن الدفعة الكلي يزيد إلى 80 ملي ثانية، مما قد يزيد زمن استجابة الطلب الأول إذا كانت الدفعة تملأ ببطء. هنا يظهر تأثير المفاضلة: مع حجم الدفعة الأكبر، زمن العينة أقل لكن زمن الدفعة الكلي أطول، مما قد يضر بزمن الاستجابة للطلبات الفردية إذا كانت الدفعة متكررة. يجب اختيار حجم الدفعة بناءً على نمط الطلبات: إذا كانت الطلبات متدفقة باستمرار، فحجم الدفعة الأكبر أفضل؛ أما إذا كانت متفرقة، فحجم الدفعة الأصغر يقلل من زمن الانتظار.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة تحليل زمن الدفعة.
128 صورة في 150 ms: 1.171875 ms للصورة و 853.33 صورة/ثانية
- حجم الدفعة
- 128
- الزمن الأساسي (مللي ثانية)
- 150
دفعة 16 بزمن 50 ms: 3.125 ms و 320 عينة/ثانية
- حجم الدفعة
- 16
- الزمن الأساسي (مللي ثانية)
- 50
رفع الدفعة إلى 32: زمن أقل وإنتاجية أعلى لكن انتظار أطول
- حجم الدفعة
- 32
- الزمن الأساسي (مللي ثانية)
- 80
نفس الزمن بدفعة 32: 4.6875 ms و 213.33 عينة/ثانية
- حجم الدفعة
- 32
- الزمن الأساسي (مللي ثانية)
- 150