الدرس 7: القياس الصحيح — Warmup و synchronize والمئينات
الرقم الأول الذي تقيسه سيكون كذبة في أغلب الأحيان. يعمل الـ GPU بشكل غير متزامن، لذا فإن time.time() يلتقط الإطلاق (launch) فقط، لا الحساب. التشغيلة الأولى تدفع ثمن التخصيصات و autotuning. والمتوسط الواحد يخفي الذيل الذي يشعر به المستخدمون فعلاً. في هذا الدرس نتعلم القواعد الثلاث للقياس الموثوق: war
قياس زمن الـ GPU يشبه تصوير قطار متحرك: إذا ضغطت مبكراً جداً تحصل على إطار فارغ. عليك أن تنتظر وصوله (synchronize)، وأن تتجاهل تشغيلات الإحماء (warmup)، وأن تنظر إلى القطارات البطيئة أيضاً (المئينات)، لا إلى المتوسط فقط.
- torch.cuda.synchronize()
- ينتظر انتهاء كل عمل الـ GPU. مطلوب قبل قياس الزمن وبعده، لأن استدعاءات CUDA غير متزامنة.
- Warmup
- تشغيل بضع تكرارات قبل القياس لتجاوز التكاليف التي تحدث لمرة واحدة (التخصيصات، autotuning، caching).
- المئينات (p50/p99)
- p99 هو الزمن الذي تفي به 99% من الطلبات. يكشف الذيل البطيء الذي يخفيه المتوسط.