الدرس 13: تحسين الغراف والنواة (Graph & Kernel Optimization) — الدمج (Fusion)، CUDA Graphs، وTensorRT
كل عملية على الـGPU تكلّف overhead عند الإطلاق (launch)، وكل عملية تكتب وتقرأ ذاكرة وسيطة. نموذج يحتوي مئات العمليات الصغيرة يهدر معظم وقته على الـoverhead. الحل: دمج العمليات (fusion)، والتقاط الغراف وإعادة تشغيله (CUDA Graphs / torch.compile)، وأخيراً التصريف إلى engine مضبوط باستخدام TensorRT. في
تشغيل 100 عملية منفصلة يشبه شراء 100 غرض عبر 100 رحلة منفصلة إلى المتجر. الدمج (fusion) هو القيام بكل ذلك في رحلة واحدة. وTensorRT هو التخطيط المسبق للمسار الأمثل عبر المتجر كله.
- Kernel fusion
- دمج عدة عمليات في kernel واحد — عدد أقل من الإطلاقات (launches) وكتابة/قراءة أقل للذاكرة الوسيطة.
- torch.compile / CUDA Graphs
- التقاط غراف العمليات مرة واحدة وإعادة تشغيله — ما يلغي overhead الإطلاق (launch) في كل تشغيل.
- TensorRT
- يصرّف نموذجاً مدرَّباً إلى engine مضبوط للـGPU: الدمج (fusion)، واختيار الـkernels، والدقة (precision) (FP16/INT8)، والتقاط الغراف.
- KV-cache
- في نماذج الـLLM، نخزّن الـkeys/values الخاصة بالـtokens السابقة كي لا يُعاد حسابها مع كل token جديد.