The AI / news

نواة الانتباه السريعة ودمج العمليات تُسرّع نماذج الذكاء الاصطناعي

نواة الانتباه السريعة ودمج العمليات تُسرّع نماذج الذكاء الاصطناعي
4 دقيقة للقراءة

تعمل نواة الانتباه السريعة ودمج العمليات على إعادة تنظيم حسابات المحولات (transformers) للحد من حركة البيانات وإطلاق النوى على المسرّع. تترك هذه التحسينات، من حيث المبدأ، أوزان النموذج ووظيفته الرياضية دون تغيير، على الرغم من أن ترتيب العمليات والدقة قد ينتج عنهما اختلافات عددية طفيفة. يشرح البرنامج التعليمي المنشور من قبل Machine Learning Mastery هذه التقنيات، مع أمثلة على الكود.

تعتمد طبقة المحول (transformer) على عمليات شائعة: الإسقاطات الخطية، والانتباه، والتطبيع، ودوال التنشيط، والجمع المتبقي (residual additions). تقوم التطبيقات المباشرة بإطلاق نواة حسابية منفصلة، تُسمى «kernel»، لكل عملية، وتكتب كل موتر وسيط في ذاكرة المسرّع. يبقى الحساب صحيحًا، ولكن وقت التنفيذ قد يُكرّس أكثر لتحريك القيم وإطلاق النوى منه للحسابات المفيدة.

دمج العمليات

تُظهر كتلة SwiGLU، المستخدمة من قبل العديد من النماذج ذات وحدة فك التشفير فقط (decoder-only)، هذه المشكلة. يطلق التطبيق المباشر عمليات ضرب مصفوفات للإسقاطات، ونواة لدالة SiLU، وأخرى للضرب عنصرًا بعنصر، ثم عملية ضرب مصفوفات أخيرة. عند كل حدود، قد يُكتب موتر وسيط في ذاكرة النطاق الترددي العالي (HBM) ثم يُعاد قراءته. يتكون الدمج من جمع هذه الخطوات في نواة واحدة. يوفر هذا الوقت عندما تكون حركة الذاكرة وإطلاق النوى مكلفة، وأقل بكثير عندما تهيمن عملية ضرب مصفوفات كبيرة بالفعل على التنفيذ. يبقى اختيار النواة تجريبيًا: يجب تحليل أداء الحمل الكامل للعمل.

عمليات دمج أخرى شائعة في المحولات، مثل إضافة اتصال متبقي متبوعًا بتطبيع RMSNorm أو LayerNorm، أو الجمع بين إزالة التكميم (dequantization) وضرب المصفوفات. ومع ذلك، للدمج حدوده: العمليات ذات تنظيمات البيانات غير المتوافقة أو الحالة الوسيطة كبيرة الحجم لا تندمج جيدًا. قد تزيد النواة الكبيرة جدًا من الضغط على السجلات، وتقلل من معدل الإشغال، وتصبح أبطأ من عدة نوى مضبوطة جيدًا.

انتباه من نوع FlashAttention والانتباه المُجزّأ (Paged Attention)

يحسب الانتباه الكلاسيكي مصفوفة درجات بحجم T² لكل رأس، حيث T هو طول التسلسل. على وحدة معالجة الرسومات (GPU)، فإن إنتاجها وكتابتها في الذاكرة العالمية ثم إعادة قراءتها يستهلك الكثير من النطاق الترددي، مما قد يصبح عنق زجاجة أثناء عمليات التعبئة المسبقة الطويلة («prefill»). تعالج FlashAttention الاستعلامات والمفاتيح والقيم على شكل كتل. لكل منها، تحسب جزءًا من الدرجات، وتحدّث إحصائيات softmax، وتتراكم المخرجات المقابلة في الذاكرة الموجودة على الشريحة، دون تخزين المصفوفة الكاملة. يعرض PyTorch هذا التحسين عبر الدالة scaled_dot_product_attention(). يوضح البرنامج التعليمي أن فرض backend ثابت قد يتسبب في فشل الكود إذا لم يدعم أي backend المدخلات أو العتاد.

ذاكرة التخزين المؤقت KV، التي تحتفظ بالمفاتيح والقيم المحسوبة مسبقًا، تنمو رمزًا تلو الآخر، لطول نهائي غير متوقع. لذلك، فإن التخصيص المتجاور لكل طلب يترك مساحة محجوزة وغير مستخدمة. يُجزّئ التخزين المؤقت المُجزّأ (Paged cache) التخزين إلى كتل بحجم ثابت ويعتمد على جدول كتل يربط المواضع المنطقية بالكتل الفعلية. يجب على نواة الانتباه بعد ذلك ترجمة كل موضع عبر هذا الجدول. لا يقلل التجزئة من عدد العناصر المنطقية، ولكنه يحد من التجزئة والسعة المحجوزة.

في المثال المقدم، يستخدم vLLM النموذج Qwen/Qwen2.5-1.5B-Instruct مع كتل من 16 رمزًا (block_size=16) وbackend «TRITON_ATTN». وفقًا للبرنامج التعليمي، يتحقق vLLM من توافق backend مع النموذج والعتاد أثناء التهيئة، ويبلغ عن خطأ في حالة عدم التوافق.

الدمج وCUDA Graphs مع torch.compile

تلتقط الدالة torch.compile() سلسلة من العمليات باستخدام TorchDynamo، ثم تُترجمها باستخدام TorchInductor، وهو backend الافتراضي. يمكن لـ TorchInductor توليد نواة Triton واحدة لعمليات متوافقة كان سيطلقها الوضع القياسي بشكل منفصل. تقيّد انقطاعات الرسم البياني، الناتجة على سبيل المثال عن تدفق تحكم يعتمد على البيانات أو تحويل موترات إلى قيم عددية (scalars) في Python، المناطق التي يمكن للمترجم تحسينها.

يطلب الوضع «reduce-overhead» من TorchInductor استخدام CUDA Graphs عندما يكون الرسم البياني الملتقط مؤهلاً لذلك. يسجل CUDA Graph سلسلة عمليات GPU ويعيد تشغيلها بإرسال واحد إلى المعالج. لا يخلق دمجًا إضافيًا، بل يكمل دمج TorchInductor. يتطلب عناوين ذاكرة ثابتة وأشكالًا متوافقة، وقد يستهلك ذاكرة أكثر. يوصي البرنامج التعليمي بالتحقق من النتائج مع هوامش خطأ مناسبة لنوع البيانات، وتحليل أداء التنفيذ، وقياس الأداء الشامل.

S’abonner
Notification pour
guest

0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x