أطر عمل البرمجيات المُحسّنة لوحدات معالجة الرسوميات (GPUs) في مجال الذكاء الاصطناعي: CUDA، ROCm، Triton، TensorRT – مسارات المُجمّع وآثار الأداء
يعتمد معدل إنتاجية التعلم العميق بشكل كبير على مدى فعالية مجموعة المُجمّعات في تعيين برامج المُصفوفات (tensors) على وحدة معالجة الرسوميات (GPU)؛ وهذا يشمل جدولة الخيوط/الكُتل، ونقل الذاكرة، واختيار التعليمات (مثل خطوط أنابيب Tensor Core MMA). سنركز في هذا المقال على أربع مجموعات مُجمّعات رئيسية – CUDA، ROCm، Triton، و TensorRT – من منظور المُجمّع، وسنشرح التحسينات التي تُحدث فرقاً ملموساً في الأداء.
ما الذي يحدد الأداء فعلياً على وحدات معالجة الرسوميات الحديثة؟
تتكرر نفس العوامل المؤثرة على الأداء عبر جميع الشركات المصنعة:
- جدولة المُشغّلات والدمج: تقليل عمليات تشغيل النواة (kernels) والرحلات ذهاباً وإياباً إلى ذاكرة HBM؛ وكشف سلاسل أطول منتج→مستهلك لإعادة استخدام السجلات/الذاكرة المُشتركة. يُجسّد TensorRT و cuDNN “محركات دمج وقت التشغيل” هذا الأمر بالنسبة لكتل الانتباه والالتفاف.
- التقسيم وترتيب البيانات: مطابقة أشكال البلاطات (tiles) لأحجام أجزاء Tensor Core/WGMMA/WMMA الأصلية؛ وتجنب تعارضات بنوك الذاكرة المُشتركة وتقسيم التخييم. تُوثّق CUTLASS تقسيم GEMM على مستوى وحدة المعالجة (warp) لكل من Tensor Cores ونواة CUDA.
- الدقة والكمية: FP16/BF16/FP8 للتدريب/الاستنتاج؛ INT8/INT4 (معايرة أو QAT) للاستنتاج. يُحسّن TensorRT المعايرة واختيار النواة ضمن هذه الدقائق.
- التقاط الرسم البياني وتخصيص وقت التشغيل: تنفيذ الرسم البياني لتخفيف أعباء التشغيل؛ والدمج الديناميكي للرُسوم البيانية الفرعية الشائعة (مثل الانتباه). أضافت cuDNN 9 دعم الرسم البياني لمحركات دمج الانتباه.
- التحسين التلقائي: البحث عن أحجام البلاطات، وعوامل فك الضغط، وعمق خطوط الأنابيب لكل بنية/منتج. يُتيح Triton و CUTLASS نقاط اتصال للتحسين التلقائي الصريح؛ بينما يقوم TensorRT باختيار تكتيكات وقت المُنشئ.
بناءً على ذلك، إليك كيفية تنفيذ كل مجموعة من المجمّعات لما سبق:
CUDA: nvcc/ptxas، cuDNN، CUTLASS، ورسوم CUDA
- مسار المُجمّع: يُجمّع كود CUDA من خلال nvcc إلى PTX، ثم يُخفض ptxas PTX إلى SASS (كود آلة محدد بالبنية). يتطلب التحكم في التحسينات إدخال علامات على كل من مراحل المضيف والجهاز؛ بالنسبة للنواة، يكون المفتاح هو -Xptxas. غالباً ما يغفل المطورون أن -O3 يؤثر فقط على كود المضيف.
- توليد النواة والمكتبات: توفر CUTLASS قوالب بارامترية لـ GEMM/conv، وتُنفذ تقسيم مستوى وحدة المعالجة، وخطوط أنابيب Tensor Core MMA، ومتكررات ذاكرة smem المصممة للوصول بدون تعارضات – مراجع أساسية لكتابة نواة الذروة، بما في ذلك مسار WGMMA في Hopper. قدمت cuDNN 9 محركات دمج وقت التشغيل (لا سيما لكتل الانتباه)، وتكامل رسوم CUDA الأصلية لتلك المحركات، وتحديثات لإمكانيات الحوسبة الجديدة – مما يقلل بشكل كبير من أعباء الإرسال ويحسّن من محلية الذاكرة في مهام معالجة البيانات الضخمة Transformer.
- آثار الأداء: الانتقال من عمليات PyTorch غير المُدمجة إلى دمج انتباه cuDNN عادةً ما يقلل من عمليات تشغيل النواة وحركة ذاكرة الوصول العشوائي العالمية؛ بالإضافة إلى رسوم CUDA، مما يقلل من الاختناقات في وحدة المعالجة المركزية في الاستنتاج قصير التسلسل. على Hopper/Blackwell، يُعدّ محاذاة أشكال البلاطات لأحجام Tensor Core/WGMMA الأصلية حاسماً؛ وتُحدد دروس CUTLASS كيفية إهدار بلاطات ذات أحجام خاطئة لإنتاجية Tensor-core.
- متى تكون CUDA هي الأداة المناسبة؟ تحتاج إلى أقصى قدر من التحكم في اختيار التعليمات، والإشغال، وترتيب smem؛ أو تقوم بتوسيع النواة لتتجاوز تغطية المكتبة مع البقاء على وحدات معالجة رسوميات NVIDIA.
ROCm: سلسلة أدوات HIP/Clang، rocBLAS/MIOpen، وسلسلة 6.x
- مسار المُجمّع: يستخدم ROCm Clang/LLVM لترجمة HIP (مثل CUDA) إلى GCN/RDNA ISA. ركزت سلسلة 6.x على الأداء وتغطية الإطار؛ وتتبع ملاحظات الإصدار التحسينات على مستوى المكون ودعم الأجهزة/نظام التشغيل.
- المكتبات والنواة: يُنفذ rocBLAS و MIOpen بدائيات GEMM/conv مع تقسيم مُدرك للبنية واختيار الخوارزمية مشابهة في جوهرها لـ cuBLAS/cuDNN. يُبرز سجل التغييرات المُوحّد العمل المتكرر على الأداء عبر هذه المكتبات. يتضمن تدفق عمل ROCm الأخير تمكين Triton بشكل أفضل على وحدات معالجة رسوميات AMD، مما يُمكّن إنشاء نواة على مستوى Python مع الحفاظ على تخفيض عبر LLVM إلى الخلفية AMD.
- آثار الأداء: على وحدات معالجة رسوميات AMD، يُعدّ مطابقة عرض بنوك LDS (الذاكرة المُشتركة) والتحميلات العالمية المُتجهة لأشكال مصفوفة البلاطات بالغ الأهمية مثل محاذاة بنك smem على NVIDIA. عادةً ما يُغلّق الدمج المُعزز بالمُجمّع في الأطر (مثل الانتباه) بالإضافة إلى التحسين التلقائي للمكتبة في rocBLAS/MIOpen جزءًا كبيرًا من الفجوة مع النواة المكتوبة يدويًا، بشرط أن تكون البنية/السائق. تشير وثائق الإصدار إلى تحسينات مُستمرة في المُحسّن في 6.0–6.4.x.
- متى تكون ROCm هي الأداة المناسبة؟ تحتاج إلى دعم وتحسين أصلي على مُسرّعات AMD، مع إمكانية نقل HIP من نواة CUDA الحالية وسلسلة أدوات LLVM واضحة.
Triton: لغة وصف مجال (DSL) ومُجمّع للنواة المُخصّصة
- مسار المُجمّع: Triton هي لغة وصف مجال مضمّنة في Python تُخفض عبر LLVM؛ وهي تُعالِج التجهيز المتجهي، ودمج الذاكرة، وتخصيص السجلات مع إعطاء تحكم صريح في أحجام الكتل ومعرفات البرنامج. تُظهر وثائق البناء تبعية LLVM والإصدارات المُخصّصة؛ وتناقش مواد مطوّري NVIDIA تحسين Triton للبنى الأحدث (مثل Blackwell) مع تحسينات FP16/FP8 GEMM.
- التحسينات: التحسين التلقائي لأحجام البلاطات، وعدد وحدات المعالجة، ومرحلة خطوط الأنابيب؛ والتمويه الثابت لشروط الحدود بدون عوائد قياسية؛ وتخزين ذاكرة مُشتركة وخطوط أنابيب برمجية لتداخل التحميلات العالمية مع الحوسبة. يهدف تصميم Triton إلى أتمتة الأجزاء المعرضة للخطأ من تحسين مستوى CUDA مع ترك خيارات تقسيم مستوى الكتلة للمؤلف؛ وتحدد الإعلان الأصلي هذا الفصل بين الاهتمامات.
- آثار الأداء: يبرز Triton عندما تحتاج إلى نواة مُدمجة مُخصّصة للشكل خارج تغطية المكتبة (مثل أنواع انتباه مُخصّصة، وسلاسل التطبيع/التنشيط/الضرب المصفوفي). على أجزاء NVIDIA الحديثة، تُفيد التعاونات مع الشركات المصنعة بتحسينات مُحددة بالبنية في الخلفية Triton، مما يقلل من العقوبة مقابل نواة نمط CUTLASS لـ GEMMs الشائعة.
- متى تكون Triton هي الأداة المناسبة؟ تريد أداءً قريبًا من CUDA لعمليات مُدمجة مُخصّصة دون كتابة SASS/WMMA، وتُقدّر التكرار الأولي لـ Python مع التحسين التلقائي.
TensorRT (وTensorRT-LLM): تحسين الرسم البياني وقت المُنشئ للاستنتاج
- مسار المُجمّع: يستهلك TensorRT رسوم ONNX أو رسوم الإطار ويُصدر محرّكًا مُحدّدًا بالجهاز. أثناء عملية البناء، يقوم بتنفيذ دمج الطبقات/المصفوفات، ومعايرة الدقة (INT8، FP8/FP16)، واختيار تكتيكات النواة؛ وتصف وثائق أفضل الممارسات هذه المراحل. يُوسّع TensorRT-LLM هذا الأمر مع تحسينات وقت التشغيل المُخصّصة لـ LLM.
- التحسينات: على مستوى الرسم البياني: طي الثوابت، وتطبيع الاقتران/التقطيع، ودمج الالتفاف/الانحياز/التنشيط، ودمج الانتباه. الدقة: معايرة ما بعد التدريب (إنتروبيا/نسق مئوي/MSE) والكمية لكل مصفوفة، بالإضافة إلى تدفقات عمل smooth-quant/QAT في TensorRT-LLM. وقت التشغيل: ذاكرة تخزين مؤقت paged-KV، ومعالجة الدُفعات أثناء التنفيذ، والجدولة لنشر متعدد التيارات/متعدد وحدات معالجة الرسوميات (وثائق TensorRT-LLM).
- آثار الأداء: تأتي أكبر المكاسب عادةً من: INT8 من الطرف إلى الطرف (أو FP8 على Hopper/Blackwell حيثما يتم دعمه)، وإزالة عبء الإطار عبر محرّك واحد، ودمج انتباه قوي. ينتج مُنشئ TensorRT خطط محرّك لكل بنية لتجنب النواة العامة وقت التشغيل.
- متى يكون TensorRT هو الأداة المناسبة؟ الاستنتاج الإنتاجي على وحدات معالجة رسوميات NVIDIA حيث يمكنك تجميع محرّك مُحسّن مسبقًا والاستفادة من الكمية ودمج الرسوم البيانية الكبيرة.
إرشادات عملية: اختيار وضبط المجموعة
- التدريب مقابل الاستنتاج: نواة التدريب/التجريبية → CUDA + CUTLASS (NVIDIA) أو ROCm + rocBLAS/MIOpen (AMD)؛ Triton لعمليات مُدمجة مُخصّصة. الاستنتاج الإنتاجي على NVIDIA → TensorRT/TensorRT-LLM لمكاسب عالمية على مستوى الرسم البياني.
- استخدام تعليمات البنية الأصلية: على NVIDIA Hopper/Blackwell، تأكد من أن البلاطات تُطابق أحجام WGMMA/WMMA؛ تُظهر مواد CUTLASS كيف يجب هيكلة GEMM على مستوى وحدة المعالجة ومتكررات smem. على AMD، قم بمحاذاة استخدام LDS وعرض المتجهات لمسارات بيانات CU؛ واستفد من مُحسّنات ROCm 6.x و Triton-on-ROCm لعمليات مُخصّصة للشكل.
- الدمج أولاً، ثم الكمية: يقلل دمج النواة/الرسم البياني من حركة الذاكرة؛ وتُقلل الكمية من عرض النطاق وتزيد من كثافة الرياضيات. غالبًا ما توفر عمليات دمج وقت المُنشئ في TensorRT بالإضافة إلى INT8/FP8 مكاسب مضاعفة.
- استخدم تنفيذ الرسم البياني للتسلسلات القصيرة: تُخفف رسوم CUDA المُدمجة مع عمليات دمج انتباه cuDNN من أعباء التشغيل في الاستنتاج التلقائي.
- عامل على علامات المُجمّع كأولوية قصوى: بالنسبة لـ CUDA، تذكر علامات جانب الجهاز: مثال، -Xptxas -O3,-v (و -Xptxas -O0
اترك تعليقاً