Grouped Query Attention (GQA)
تعرف على كيفية تقليل Grouped Query Attention (GQA) لذاكرة التخزين المؤقت KV، وتحسين كفاءة الاستدلال، وموازنة الأداء في نماذج Transformer.
الانتباه المجمع للاستعلامات (GQA) هو تصميم انتباه تشترك فيه رؤوس استعلام متعددة في مجموعة أصغر من رؤوس المفاتيح والقيم. وهو يحافظ على المنظورات المتنوعة لاستعلامات الرؤوس المتعددة مع تقليل الذاكرة وحركة البيانات اللازمة للمفاتيح والقيم. ويعد الانتباه المجمع للاستعلامات (GQA) قيماً بشكل خاص أثناء الاستدلال التراجعي الذاتي، حيث يولد النموذج رمحاً واحداً في كل مرة ويقرأ مراراً وتكراراً حالات الانتباه المخزنة.
كيف يعمل الانتباه المجمع للاستعلامات (GQA)#
ضمن آلية الانتباه، يتم إسقاط كل رمز في ثلاثة تمثيلات:
- الاستعلام: يصف المعلومات التي يبحث عنها الرمز الحالي.
- المفتاح: يصف ما يمثله كل رمز متاح.
- القيمة: تحتوي على المعلومات المستردة عندما يتطابق الاستعلام مع مفتاح.
في الانتباه الذاتي التقليدي، يتم تقسيم هذه الإسقاطات إلى رؤوس حتى يتمكن النموذج من تعلم علاقات مختلفة بالتوازي. يحافظ الانتباه المجمع للاستعلامات (GQA) على العديد من رؤوس الاستعلام ولكنه يخصص مجموعات منها لرؤوس المفاتيح والقيم المشتركة. على سبيل المثال، قد تستخدم طبقة الانتباه ثمانية رؤوس استعلام ورأسي مفتاح وقيمة. يخدم كل رأس مفتاح وقيمة بعد ذلك أربعة رؤوس استعلام.
تظل عملية حساب الانتباه نفسها عبارة عن انتباه نقطي قياسي مדרج. وما يتغير هو ترتيب الرؤوس وكمية بيانات المفاتيح والقيم المنتجة والمخزنة والمقروءة. ولذلك تتطلب الأطر مثل انتباه الضرب النقطي المدرج في PyTorch أن يكون عدد رؤوس الاستعلام قابلاً للقسمة على عدد رؤوس المفاتيح والقيم عند تمكين الانتباه المجمع للاستعلامات (GQA). (docs.pytorch.org)
الانتباه المجمع للاستعلامات مقابل الانتباه متعدد الرؤوس ومتعدد الاستعلامات#
يقع الانتباه المجمع للاستعلامات (GQA) بين الانتباه متعدد الرؤوس والانتباه متعدد الاستعلامات:
- الانتباه متعدد الرؤوس: لكل رأس استعلام رؤوس مفاتيح وقيم خاصة به. يوفر هذا أقصى قدر من استقلالية الرؤوس ولكنه ينشئ أكبر متطلبات لذاكرة المفاتيح والقيم.
- الانتباه المجمع للاستعلامات: تشترك عدة رؤوس استعلام في كل رأس مفتاح وقيمة. وهو يوازن بين السعة التمثلية وكفاءة الذاكرة.
- انتباه متعدد الاستعلامات: تشترك جميع رؤوس الاستعلام في رأس مفتاح واحد ورأس قيمة واحد. وهذا يقلل من تخزين المفاتيح والقيم ولكنه يوفر تنوعاً أقل للمفاتيح والقيم.
إذا كانت الطبقة تحتوي على 32 رأس استعلام، فقد يستخدم الانتباه متعدد الرؤوس أيضاً 32 رأس مفتاح وقيمة، بينما قد يستخدم الانتباه المجمع للاستعلامات (GQA) 8، ويستخدم انتباه متعدد الاستعلامات 1. ولا يُعد الانتباه المجمع للاستعلامات (GQA) بديلاً لـهيكلية Transformer الأوسع؛ بل هو تكوين واحد محتمل داخل طبقة انتباه Transformer. توضح وثائق الانتباه متعدد الرؤوس ومتعدد الاستعلامات والمجمع للاستعلامات من NVIDIA أن هذه المتغيرات تختلف في الغالب في عدد رؤوس المفاتيح والقيم التي تخدم رؤوس الاستعلام. (nvidia.github.io)
لماذا يُعد الانتباه المجمع للاستعلامات (GQA) مهمًا#
أثناء التوليد التراجعي الذاتي، يخزن النموذج المفاتيح والقيم السابقة في ذاكرة تخزين مؤقت لـ KV. مع الانتباه متعدد الرؤوس القياسي، يساهم كل رأس انتباه بمفاتيح وقيم مخزنة مؤقتاً منفصلة. وبالتالي، يمكن للتسلسلات الطويلة، والدفعات الكبيرة، والعديد من طبقات النموذج أن تستهلك ذاكرة GPU كبيرة.
نظرًا لأن الانتباه المجمع للاستعلامات (GQA) يستخدم عددًا أقل من رؤوس المفاتيح والقيم، فإن ذاكرته المؤقتة تكون أصغر تتناسب طردياً مع الانخفاض في تلك الرؤوس. ويمكن أن تحسن هذه الميزة ما يلي:
- سعة الذاكرة: يمكن أن تتسع الذاكرة المتاحة لموجهات أطول أو لطلبات متزامنة أكثر.
- إنتاجية التوليد: يجب قراءة بيانات مفاتيح وقيم أقل لكل رمز مُولد.
- زمن استجابة الاستدلال: يمكن أن يؤدي تقليل حركة مرور الذاكرة إلى تقصير وقت معالجة رمز لآخر.
- قابلية توسيع نافذة السياق: يصبح التعامل مع التسلسلات الطويلة أكثر عملية.
تعتمد هذه المكاسب على الأجهزة، وطول التسلسل، وحجم الدفعة، ودعم النواة. لا تزال أوقات التشغيل الإنتاجية بحاجة إلى تخصيص فعال للذاكرة المؤقتة؛ على سبيل المثال، يجمع نظام التخزين المؤقت KV لـ TensorRT-LLM من NVIDIA بين دعم الانتباه المجمع للاستعلامات (GQA) والتخزين المؤقت القائم على الكتل، وإعادة الاستخدام، والتفريغ. (nvidia.github.io)
تطبيقات العالم الحقيقي#
مساعدو السياق الطويل: قد يعالج مساعد البرمجة آلاف الرموز البرمجية المصدرية قبل توليد إجابة. يقلل الانتباه المجمع للاستعلامات (GQA) من حالة مفتاح القيمة المخزنة مؤقتاً المرتبطة بهذا السجل، مما يتيح للخادم التعامل مع ملفات أطول أو مستخدمين متزامنين أكثر دون زيادة ذاكرة GPU بشكل متناسب.
مساعدو الصور والفيديو متعددو الوسائط: يمكن لـنموذج الرؤية واللغة تمثيل أجزاء الصور أو إطارات الفيديو كتسلسلات رموز طويلة. يقلل الانتباه المجمع للاستعلامات (GQA) من ضغط ذاكرة التخزين المؤقت للانتباه بعد دخول هذه الرموز المرئية إلى فك التشفير اللغوي، مما قد يترك مساحة أكبر من الذاكرة لصور أو إطارات أو طلبات إضافية. يختلف هذا عن Vision Transformer القياسي، حيث قد يعالج الانتباه جميع أجزاء الصورة بالتوازي بدون تخزين مؤقت تراجعي لـ KV.
التنفيذ العملي والمقايضات#
يتيح PyTorch استخدام الانتباه المجمع للاستعلامات (GQA) عبر enable_gqa=True. يستخدم مثال CUDA الموثق هذا ثمانية رؤوس استعلام ورأسي مفتاح وقيمة مشتركين:
import torch
import torch.nn.functional as F
from torch.nn.attention import SDPBackend, sdpa_kernel
assert torch.cuda.is_available(), "A CUDA device is required."
query = torch.randn(1, 8, 16, 32, device="cuda")
key = torch.randn(1, 2, 16, 32, device="cuda")
value = torch.randn(1, 2, 16, 32, device="cuda")
# Four query heads share each key-value head.
with sdpa_kernel(SDPBackend.MATH):
output = F.scaled_dot_product_attention(
query,
key,
value,
enable_gqa=True,
)
print(output.shape)يحتفظ الناتج بثمانية رؤوس استعلام، بينما تستخدم المفاتيح والقيم رأسين فقط. يمكن لـمحدد الواجهة الخلفية للانتباه في PyTorch التحكم في النواة المدعومة التي تقوم بالعملية، بينما يوفر دليل لبنات بناء Transformer في PyTorch سياق تنفيذ أوسع. (docs.pytorch.org)
يجب اختيار الانتباه المجمع للاستعلامات (GQA) عند تصميم النموذج أو تكييفه؛ فهو ليس بشكل عام مفتاحاً لوقت الاستدلال لنقطة تفتيش موجودة. يجب على المطورين التحقق من دعم الإطار، وقابلية قسمة الرؤوس، والسلوك العددي، واستخدام الذاكرة، جودة المهام. بالنسبة لنشر الرؤية الحاسوبية، تساعد سير العمل التكميلية مثل تكامل Ultralytics TensorRT ووضع قياس الأداء من Ultralytics في قياس ما إذا كانت تحسينات الهيكلية ووقت التشغيل تقدم تحسينات مجدية على الأجهزة المستهدفة.






